如何使用git裸存储库推入非裸存储库?

时间:2012-07-07 09:27:17

标签: git

基本上,我想将所有本地更改推送到远程服务器上的备份裸存储库,然后让裸存储库将更改推送到同一服务器上的生产(非裸)。现在,我正在考虑做一个钩子。如果重要的话,我不会使用gitosis。我怎样才能实现这个目标?

我不知道这是否是正确的方式,但我基本上只想将我的本地更改推送到备份仓库(裸机)和非裸仓库。

2 个答案:

答案 0 :(得分:1)

TL; DR

您无法成功推送到非裸存储库。

三个实用选项

选项1

实际上,如果你努力尝试,可以推送非裸存储库,但即使你这样做,也不会为你更新工作树。例如,推送错误消息显示:

  

您可以将'receive.denyCurrentBranch'配置变量设置为   在远程存储库中“忽略”或“警告”以允许推入   现在的分支;但是,除非您这样做,否则不建议这样做   安排更新其工作树以匹配您推送的一些   其他方式。

您必须更改非裸机上的配置,并添加后接收挂钩以更新工作树。因此,当有更简单的方法时,通常没有用。

选项2

您还可以在裸存储库上创建一个post-receive hook,它将使用ssh(或类似的)连接到具有非裸存储库的远程主机,并在更新裸存储库时执行拉取。这与前一个选项非常相似,但不需要对非裸存储库进行任何配置更改。

选项3

轮询是另一种选择。您可以执行与https://stackoverflow.com/a/11254771/1301972类似的操作,您可以按时间间隔轮询裸存储库。此选项根本不需要git配置或自定义挂钩,因此,如果您有权访问crontab,那么我建议将其作为常规解决方案。

答案 1 :(得分:0)

不确定这是否有效但是......可以在仍然在裸仓上进行结账--work-tree=<path>(GIT_WORK_TREE环境变量)。我在手册页中找不到任何方法。