当它被推送到一个简单的git仓库时,如何自动将数据推送到git-repo?

时间:2013-09-16 09:43:17

标签: git

如果将数据推送到裸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行代码。

1 个答案:

答案 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分支,或者是为了添加标签,或者任何其他离开的操作,那就太过分了沙箱的分支未受影响。)