基本上,我有一个服务器与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