如何使用Git作为内容分发网络

时间:2009-12-07 22:52:15

标签: svn git git-svn distribution content-management

“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。如何创建这样的分支?一旦所有分支都提交,我是否只能从远程获取某个分支?谢谢!

2 个答案:

答案 0 :(得分: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'等)。

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

答案 1 :(得分:5)

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