git archive vs cp -R

时间:2008-12-17 04:26:32

标签: git capistrano vlad-deployer

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

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

或B)

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

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

4 个答案:

答案 0 :(得分:8)

我实际上说

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

只要可以跳过回购中的所有点文件,而不仅仅是.git,这是有效的。如果您只想跳过 .git,那么您需要-f选项和手册页。

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

答案 1 :(得分:3)

<强> A)

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

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

答案 2 :(得分:3)

<强>既不!

更好的方法是:

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

当你做本地克隆时,Git使用硬链接。这意味着,在您修改文件之前,您可以进行1,000次部署,并且(几乎)仅使用您需要的空间。这种方式也可以更快地存档或rsync。

答案 3 :(得分:2)

也有人可能已经为您编写了代码。

vigetlab's capistrano_rsync_with_remote_cache

我在Subversion中使用它,对我来说效果很好。