《Git Internal》一书提到在 p50 上使用 git 作为点对点内容分发网络,但没有提供太多细节。特别是如何拥有多个跟踪不同文件的分支。例子:
(工作目录)
a00.exe
a01.exe
b00.exe
c00.exe
c01.exe
c02.exe
主分支跟踪所有文件,而分支 A 只跟踪 a00.exe 和 a01.exe,分支 B 跟踪 b00.exe 等等。下一次提交将更新 a00.exe b00.exe c00.exe。如何创建这样的分支?提交所有分支后,我只能从远程获取特定分支吗?谢谢!
您将需要某种脚本来为您构建各个内容分支。执行此操作的基本方法是将内容添加到数据库(在您的情况下,只需将它们提交到主分支),然后在临时索引中,读取您想要在每个分支中拥有的所有内容(git read -tree/git update-index),写出该树(git write-tree),写入提交对象(git commit-tree)并将分支更新到该新提交(git update-ref)。这些都是日常操作中通常不使用的管道命令,但允许您构建快照,而无需同时将磁盘上的目录中的所有内容包含在内。
执行此类操作的示例脚本如下:
http://github.com/schacon/gitcrazy/blob/master/update_content.rb http://github.com/schacon/gitcrazy/blob/master/update_content.rb
在这里,我定义了许多服务器,每个服务器都有一个或多个角色(“memcache”、“database”或“webserver”)。然后我可以向角色添加内容,如下所示:
$ update_content.rb /path/to/content file_name memcache
这会将内容添加到我的 git db,然后更新受影响的服务器(在本例中具有 memcache 角色)的分支。我可以对任何角色的多个文件执行此操作,并且 git 将跟踪每个服务器应具有的内容。然后每个服务器都可以获取其特定分支(“server/s1”、“server/s2”等)。
我正在考虑很快做一个快速截屏视频来演示这一点 - 希望示例脚本有所帮助。它应该很容易运行并弄清楚发生了什么。在同一个项目中,有一个“列表”脚本,列出了哪个服务器分支上的内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)