git post-receive checkout远程机器?

如果将以下脚本作为hooks/post-receive挂钩添加到裸仓库foo.git

 #!/bin/sh GIT_WORK_TREE=/bar git checkout -f 

那么无论何时有人推送到存储库,当前状态将在目录bar更新。

这需要barfoo.git在同一台机器上。

什么是最简单的方法来修改它,以便在远程机器(如baz:/bar )上签出?

一种方法是:

 #!/bin/sh GIT_WORK_TREE=/tmp/bar git checkout -f rsync ... /tmp/bar baz:/bar 

有没有更好的办法? 也许不需要中间临时目录? (如果没有什么正确的选项传递给rsync,使得生成的目录是直接签出的?

Solutions Collecting From Web of "git post-receive checkout远程机器?"

GIT_WORK_TREE=/bar表示bar是一个git repo。

如果bar是远程端的git repo,那么它可以从bare_bar.git (同样在远程端)拉出来,你可以把它推到。

换句话说,你的post-receive钩子会通过ssh推送到bare_bar repo,而在裸仓库上的post-receive钩子会触发从实际仓库中的pull:请参阅“ 从生产文件夹创建git仓库 ”。


我更喜欢一个解决方案,使远程服务器免费的任何.git dirs(甚至理想的git包本身)

在这种情况下,您当前的post-receive hook和rsync命令似乎是将新数据增量复制到远程工作树的唯一方法。

  • git archive会每一次存档一切。
  • git bundle将需要在另一边的混帐。