如果将数据推送到裸git仓库,我怎样才能自动将数据推送到git-repo?
gitrepo - the name of my bare repo, I push to this repo from my desktop
sandbox - the name of a git repo, should automatically contain up-to-date data
每次推送到gitrepo后,沙箱存储库应自动包含最新数据。
我认为没有使用裸存储库并直接推送到沙箱,不可能推送到非裸git存储库。所以人们推荐的解决方案是一个post-receive钩子,它将使数据在/ etc / puppet / environments / sandbox /下可用。
[root@puppet environments]# cat gitrepo/hooks/post-receive
#!/bin/sh
cd /etc/puppet/environments/sandbox/
git pull origin
[root@puppet environments]#
不幸的是,这个钩子也没有做任何事情。我查看了http://utsl.gen.nz/git/post-update提供的示例(http://bare-vs-nonbare.gitrecipes.de/),但我几乎无法相信将repo-commits自动推送到另一个repo这样简单的事情应该需要86行代码。
答案 0 :(得分:2)
如果你在某些(或者甚至全部)各种git钩子中,肯定包括post-receive
,那么环境变量GIT_DIR
被设置为.
(!),意味着如果你使用cd /etc/puppet/environments/sandbox
并运行任何进一步的git
命令,它将在/etc/puppet/environments/sandbox
中查找repo,即使这是一个非裸的repo,它的git-managed内容实际上是/etc/puppet/environments/sandbox/.git
。
如果您只是添加:
,您的简单测试钩子可能会开始为您工作(让其他人工作更难)unset GIT_DIR
在使用git命令之前。
(请注意,盲目地执行git pull
是有效的,但是如果最近的推送是例如side-project
分支,或者是为了添加标签,或者任何其他离开的操作,那就太过分了沙箱的分支未受影响。)