git post-receive checkout到远程机器?

时间:2013-01-22 22:29:28

标签: linux git bash rsync

如果将以下脚本作为hooks/post-receive挂钩添加到裸git存储库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的正确选项是什么,以致结果目录与直接签出是一致的?)

1 个答案:

答案 0 :(得分:1)

GIT_WORK_TREE=/bar表示bar是git repo。

如果bar是远程端的git仓库,则它可以从裸仓库bare_bar.git(也在远程端)拉出,您可以将其推送到。

换句话说,你的post-receive钩子会通过ssh推送到bare_bar repo,而那个裸仓的post-receive钩子会触发实际仓库bar的拉动:见“ Creating a git repository from a production folder”。


  

我更喜欢一种解决方案,让远程服务器不受任何.git dirs(甚至理想的git包本身)

在这种情况下,您当前的post-receive挂钩及其rsync命令似乎是以递增方式将新数据复制到远程工作树的唯一方法。