1

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

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

4

2 回答 2

1

TL;博士

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

三个实用选项

选项1

实际上,如果您足够努力,您可以推送一个非裸存储库,但即使您这样做,它也不会为您更新您的工作树。例如,推送错误消息说:

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

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

选项 2

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

选项 3

轮询是另一种选择。您可以执行类似于https://stackoverflow.com/a/11254771/1301972的操作,您可以在其中定期轮询裸存储库以获取拉取。此选项根本不需要 git 配置或自定义挂钩,因此如果您可以访问 crontab,我建议将其作为通用解决方案。

于 2012-07-07T09:46:59.020 回答
0

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

于 2012-07-07T21:22:05.507 回答