2

post-receiveGitリポジトリ内に、リポジトリを別のディレクトリに複製してからそのディレクトリに複製するフックがありますcd

#!/bin/bash --login

GIT_REPO="$HOME/oliverjash.me.git"

source "$HOME/.bash_profile"

checkout () {
  BRANCH="$1"
  TMP_GIT_CLONE="$2"

  git clone $GIT_REPO $TMP_GIT_CLONE
  cd $TMP_GIT_CLONE
  git status
}

checkout master "$HOME/tmp/oliverjash.me"
checkout project "$HOME/tmp/project.oliverjash.me"

exit

SSHにログインしているときにこのスクリプトを実行すると、正常に動作しますgit status。ただし、スクリプトがpost-receiveフックとして実行されると、次のようにgit status報告されます。

remote: fatal: Not a git repository: '.'

なんでこんなのかわからない!

4

2 に答える 2

1

gitコマンドが正しく実行されることを本当に確認したい場合は、次を追加できます。

  • --work-tree=$TMP_GIT_CLONE
  • --git-dir=$TMP_GIT_CLONE/.git

そうすれば、gitコマンドは、考慮すべき作業ツリーとgitリポジトリがどこにあるかを認識します。

git --work-tree=... --git-dir=... clone ...

または、この回答で詳しく説明されているように、git 1.8.5以降:

git -C=$TMP_GIT_CLONE clone ...
于 2013-01-30T20:42:32.163 に答える
0

unset GIT_DIRスクリプトの先頭で行う必要がありました。

于 2013-01-30T20:38:57.500 に答える