4

如果我有一个 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

4 回答 4

8

我会说实际上

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

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

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

于 2008-12-17T05:10:59.483 回答
3

一种)

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

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

于 2008-12-17T04:51:16.883 回答
3

两者都不!

一个更好的方法是:

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

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

于 2008-12-18T02:01:04.433 回答
2

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

vigetlab的capistrano_rsync_with_remote_cache

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

于 2008-12-17T04:53:54.540 回答