基本上,我想将所有本地更改推送到远程服务器上的备份裸存储库,然后让裸存储库将更改推送到同一服务器上的生产(非裸)。现在,我正在考虑做一个钩子。如果重要的话,我不会使用gitosis。我怎样才能实现这个目标?
我不知道这是否是正确的方式,但我基本上只想将我的本地更改推送到备份仓库(裸机)和非裸仓库。
答案 0 :(得分:1)
您无法成功推送到非裸存储库。
选项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环境变量)。我在手册页中找不到任何方法。