【问题标题】:How to use Git as content distribution network如何使用 Git 作为内容分发网络
【发布时间】:2009-12-07 22:52:14
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您提供如此有用的信息。在 Ruby 脚本中,这个命令 'git update-index --add --cacheinfo 100644 (sha1) (path)' 中的模式 100644 来自哪里?谢谢!
    • 并在第 43 行: pcommit = (prev_commit != "servers/#{server}") ? "-p #{prev_commit}" : '' prev_commit 是 sha1,其中 servers/#{server} 是类似“master”的字符串,所以它永远不会彼此相等。这应该是这样吗?谢谢。
    • 当您将内容添加到索引(使用更新索引)时,您必须为文件提供一个模式 - 100644 是一个普通文件,或者您可以使文件可执行(100755,我认为) 或符号链接。这只是一个unix文件模式。至于 prev_commit - 如果有先前的提交,它将等于 sha1 值,但如果没有先前的提交 - 如果 servers/{server} 尚未设置为任何内容,则 rev-parse 命令将返回您提供的字符串它,因为它无法为它找出一个 sha。这就是我如何判断是否还没有第一次提交。希望有帮助。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-30
      • 2016-01-09
      • 2023-03-30
      • 1970-01-01
      • 2018-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多