【问题标题】:git archive vs cp -Rgit存档vs cp -R
【发布时间】:2008-12-17 04:26:32
【问题描述】:

如果我有一个 git 存储库的克隆作为远程服务器上用于 capistrano/vlad 样式部署的缓存副本,那么做 A) 会更好)

git archive --format=tar origin/master | (cd #{destination} && tar xf -)

或 B)

cp -R cached-copy #{destination} && rm -Rf #{destination}/.git

为了澄清,存储库已经在远程服务器上,我只想在部署期间将特定版本复制到同一服务器上的发布目录。

【问题讨论】:

  • 我无法编辑,但第一句末尾有一个错字。大概应该是“这样做更好吗”。

标签: git capistrano vlad-deployer


【解决方案1】:

我想说的是

rsync -avP /local/repo/* server:/remote/repo

只要可以跳过 repo 中的所有点文件,它就可以工作,而不仅仅是.git。如果您想跳过.git,则需要-f 选项和手册页。

我爱rsync。效果很好,大多数时候你可以像使用 scp 一样使用它!

【讨论】:

  • 我开始使用 git 存档版本,但意识到它缺少 git 子模块。因此,使用 using rsync 是我没有想到的一个很好的选择。谢谢奥托(顺便说一句,名字很好)和诺曼!
【解决方案2】:

A)

您节省了传输 .git 目录的网络开销,这可能会非常大,具体取决于当前 HEAD 中没有多少历史记录和对象。

如果您想在远程端拥有一个实际的 git 存储库,您最好推送到一个真正的存储库并且只需要更改增量。

【讨论】:

    【解决方案3】:

    都没有!

    更好的方法是:

    • git fetch你的缓存
    • 将缓存克隆到当前目录(启用--no-checkout 选项)
    • 签出您想要的提交。

    当你进行本地克隆时,Git 使用硬链接。这意味着,在您修改文件之前,您不会修改文件,您可以拥有 1,000 个部署,并且(实际上)只使用您需要的空间。这种方式也可以更快地归档或 rsync。

    【讨论】:

      【解决方案4】:

      还有人可能已经为你编写了代码。

      vigetlab's capistrano_rsync_with_remote_cache

      我将它与 Subversion 一起使用,它对我来说效果很好。

      【讨论】:

      • 啊哈;正是我要自己写的答案:rsync。
      猜你喜欢
      • 2015-02-21
      • 2015-01-20
      • 2011-05-02
      • 1970-01-01
      • 1970-01-01
      • 2015-01-30
      • 2014-06-26
      • 2012-07-01
      • 2015-11-15
      相关资源
      最近更新 更多