尝试创build一个git仓库,每次有人更新原点时自动签出

基本上,我有一个服务器与Git回购“起源”。 每次有人向其中推送代码时,我都想从另一个仓库中自动获取另一个仓库。 我一直在使用钩子来源,特别是后收到。 到目前为止,我的post收到看起来像这样:

#!/bin/sh GIT_DIR=/home/<user>/<test_repo> git pull origin master 

但是,当我从另一台计算机推出来,我得到的错误:

 remote: fatal: Not a git repository: '/home/<user>/<test_repo>' 

但是,test_repo绝对是一个git回购。 我可以进入它并运行'git pull origin master',它工作正常。

有没有更简单的方法来做我想做的事情? 如果不是的话,我在做什么错误的方法呢? 提前致谢。

编辑,澄清:回购是一个正在进行的网站,我想有一个完整的最新版本。

我使用了类似的钩子,但是GIT_DIR必须指向.git子目录。

 #!/bin/sh cd /home/<user>/<test_repo> GIT_DIR=.git git pull origin master 

当你设置一个环境variables时,它只能在shell中使用 – 所以当你启动另外一个程序时,如git,局部variables将不会被传递。 可以说我们有test.sh

 #!/usr/bin/bash echo "GIT_DIR=$GIT_DIR" 

现在让我们看看下面的例子

 $ GIT_DIR=LOOK_MY_GIT_DIR_IS_SET $ ./test.sh GIT_DIR= 

这是因为环境variables没有被导出到启动的程序。

 $ export GIT_DIR=LOOK_MY_GIT_DIR_IS_SET $ ./test.sh GIT_DIR=LOOK_MY_GIT_DIR_IS_SET 

在ScottZ的例子中,当启动程序时设置环境variables会导致它只被导出用于该命令。

 $ GIT_DIR=LOOK_MY_GIT_DIR_IS_SET ./test.sh GIT_DIR=LOOK_MY_GIT_DIR_IS_SET 

希望这可以帮助!

你确定你正在设置GIT_DIR吗?

在这种情况下,我假设你是从一个非裸回购的,你的GIT_DIR应该是

 GIT_DIR=/home/user/test_repo/.git 

要testing这个命令行上运行以下:

 GIT_DIR=/home/user/test_repo/.git git status