繁体   English   中英

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

[英]How can I use a git bare repository to push into a non-bare repository?

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

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

TL; DR

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

三种实用选择

选项1

实际上,如果您尽力而为, 就可以推送一个非裸仓库,但是即使您这样做,它也不会为您更新工作树。 例如,推送错误消息显示:

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

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

选项2

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

选项3

轮询是另一种选择。 您可以执行类似于https://stackoverflow.com/a/11254771/1301972的操作 ,在该时间间隔内轮询裸存储库以获取拉取。 此选项完全不需要git配置或自定义钩子,因此,如果您可以访问crontab,那么这是我建议的一般解决方案。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM