我正在使用python编写一个post-receive钩子,希望能够自动部署我项目中所有更新的文件。基本上,每次推送“部署”分支时,它都会通过FTP将更改的文件上传到我的服务器。
这是我到目前为止所拥有的:
def deploy(old, new):
fileList = subprocess.Popen(['git', 'diff', '--name-only', old, new], stdout=subprocess.PIPE)
files = fileList.stdout.read().split('\n')[:-1]
# Switch to the regular repository and pull to it.
os.chdir("/home/git/testrepo")
subprocess.Popen(['git', 'pull'], cwd="/home/git/testrepo")
for file in files:
print file
for line in sys.stdin.xreadlines():
old, new, ref = line.strip().split(' ')
if ref == "refs/heads/deploy":
print "Deploying the new commits now."
deploy(old, new)
else:
print "No need to deploy."
包含此挂钩的存储库是一个裸存储库。然后,我在/home/git/testrepo/
下有另一个存储库,它是此存储库的克隆。
在这段代码中,我尝试将我的工作目录更改为该存储库,然后启动拉取。但是,这不起作用。相反,当我按下并执行钩子时,我得到以下消息:“致命:不是git存储库:'。'”。
关于如何成功拉到此存储库的任何想法,以便我可以将其文件上传到我的其他服务器?我试过的每一种方法都失败了。
答案 0 :(得分:0)
git diff ...
失败了,因为它不知道你在一个裸露的回购中。
尝试使用git --bare diff ...
或设置$GIT_DIR
。