在bash脚本中执行git命令

时间:2011-05-25 10:24:00

标签: git bash githooks

我正在为中央存储库编写gitosis推后挂钩

将更新从中央存储库提取到测试环境

nano /var/git/repositories/holding.git/hooks/post-update

 #!/bin/bash

 cd /var/vh/holding;
 git reset --hard;
 git checkout testing;
 git pull;

这是我在推送客户端(开发虚拟机)后获得的内容

# blah ...
Counting objects: 57, done.
Compressing objects: 100% (24/24), done.
Writing objects: 100% (30/30), 3.42 KiB, done.
Total 30 (delta 18), reused 0 (delta 0)
fatal: Not a git repository: '.'
fatal: Not a git repository: '.'
fatal: Not a git repository: '.'
fatal: Not a git repository: '.'
To git@cheby.ru:holding.git
   233b5a2..0f46cd8  testing -> testing

显然,我试图告诉git,它应该在哪里拉,但是失败了。

在bash脚本中为指定的工作副本运行git命令的正确方法是什么?

3 个答案:

答案 0 :(得分:5)

如上所述herethere,您可以在所有git命令之前添加:

 env -i

以确保没有副作用,例如,可能先前已设置的GIT_DIR环境变量。
env -i或简称:unset GIT_DIR

答案 1 :(得分:0)

/var/vh/holding是git存储库吗?你有没有运行git init,设置你的遥控器,设置它来跟踪你的holding.git目录,等等?此外,如果您没有从同一个仓库中撤出,则不应该使用resetcheckout

答案 2 :(得分:0)

对我来说,以env -i开头是无效的。我总是会收到此错误:

***请告诉我你是谁。

尽管我已经设置了全局配置。通过指定--git-dir参数,这对我有用:

#!/bin/sh

GIT='git --git-dir='$PWD'/.git'

$GIT checkout hotfix
$GIT merge --no-ff master -m "Merged master"
$GIT push

我在工作目录中运行脚本,因此我使用$PWD来获取当前的工作目录。您可以根据需要进行调整。