10

我正在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 命令的正确方法是什么?

4

3 回答 3

5

这里那里所述,您可以在所有 git 命令之前添加:

 env -i

为了确保没有副作用,例如,GIT_DIR以前可能设置的环境变量。
env -i或简单地说unset GIT_DIR:)

于 2011-05-25T10:37:10.550 回答
0

/var/vh/holdinggit 存储库吗?即你有没有运行git init它,设置你的遥控器,设置它来跟踪你的holding.git目录等?此外,如果你不是从你推送的同一个仓库中提取,你不应该需要resetand checkout

于 2011-05-25T12:54:56.627 回答
0

对我来说,前面的 withenv -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用来获取当前工作目录。您可以根据需要进行调整。

于 2020-08-09T00:28:14.020 回答