3

《Git Internal》一书提到在 p50 使用 git 作为对等内容分发网络,但没有太多细节。尤其是如何拥有多个跟踪不同文件的分支。例子:

(工作目录) a00.exe a01.exe b00.exe c00.exe c01.exe c02.exe

Master 分支跟踪所有文件,而分支 A 只跟踪 a00.exe 和 a01.exe,分支 B 跟踪 b00.exe 等等。下一次提交将更新 a00.exe b00.exe c00.exe。如何创建这样的分支?一旦所有分支都提交了,我只能从远程获取某个分支吗?谢谢!

4

2 回答 2

7

您将需要某种脚本来为您构建各种内容分支。执行此操作的基本方法是将内容添加到数据库(在您的情况下,只需将它们提交到主分支),然后在临时索引中,读取您希望在每个分支中拥有的所有内容(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

在这里,我定义了许多服务器,每个服务器都有一个或多个角色(“memcache”、“database”或“webserver”)。然后我可以向这样的角色添加内容:

$ update_content.rb /path/to/content file_name memcache

这会将内容添加到我的 git db,然后更新受影响服务器的分支(在这种情况下具有 memcache 角色)。我可以为任何角色的多个文件执行此操作,并且 git 将跟踪每个服务器应具有的内容。然后每个服务器都可以获取它们的特定分支('server/s1'、'server/s2'等)。

我正在考虑做一个快速的截屏视频来演示这一点——希望示例脚本对您有所帮助。它应该很容易运行并弄清楚发生了什么。在同一个项目中,有一个“列表”脚本列出了哪个服务器分支上的内容。

于 2009-12-07T23:56:35.387 回答
5

git internals 作者 scott chacon 有一个关于该主题的视频/讨论,他谈到了在某种商场中的广告内容分发网络。鼓舞人心:http ://www.techscreencast.com/language/ruby/using-git-in-ruby-applications---scott-chacon-/1431

于 2009-12-07T22:55:07.997 回答