1

将数据推送到裸 git repo 时,如何自动将数据推送到 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://bare-vs-nonbare.gitrecipes.de/提供的示例( http://utsl.gen.nz/git/post-update),但我简直不敢相信这么简单的事情自动将 repo-commits 推送到另一个 repo 需要 86 行代码。

4

1 回答 1

2

当您在某些(甚至全部)各种 git 挂钩中时,肯定包括post-receive,环境变量GIT_DIR设置为.(!),这意味着如果您使用cd /etc/puppet/environments/sandbox并运行任何进一步的命令,git它将在/etc/puppet/environments/sandbox即使那是一个非裸仓库,它的 git 管理的内容实际上是在/etc/puppet/environments/sandbox/.git.

如果您简单地添加:

unset GIT_DIR

在使用 git 命令之前。

(请注意,git pull如果最近的推送是,例如,到一个side-project分支,或者是为了添加一个标签,或者任何其他使沙箱分支保持不变的操作,那么盲目地做 a 是有效的,但过度杀伤力。)

于 2013-09-16T13:09:11.860 回答