web-dev-qa-db-ja.com

更新後フックを使用して別のリポジトリで「git pull」を実行すると、「fatal:not a git repository: '。'」になります

私はgitが初めてなので、ここで用語を誤用した場合は謝罪します(修正してください)が、最善を尽くします。

私は、ウェブサーバー上にベアgitリポジトリ(ハブ)と開発サイト作業コピー(プライム)をセットアップしようとしています。 この記事 の後にパターン化しようとしました。ハブリポジトリがプッシュされるたびに、開発作業コピーが更新されるようにします。このための適切なフックはpost-update、私はそのように作成しました:

#!/bin/sh
whoami
cd /path/to/working-copy/
RET=`git pull`
echo $RET

更新

ローカルリポジトリからベアハブに変更をプッシュすると、更新後スクリプトから次の出力が得られます。

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

しかし、ユーザー「サイト」としてサーバーにSSHで接続し、このスクリプトを手動で実行すると、うまく機能します。

83
Ty W

最終的に機能したスクリプトを次に示します。リモートでの作業を妨げていた元々欠けていたのは、unset GIT_DIR

#!/bin/sh
cd /path/to/working-copy/ || exit
unset GIT_DIR
git pull repo branch

exec git-update-server-info
166
Ty W

代わりに試してください:

#!/bin/sh
cd /path/to/working-copy/
env -i git pull

私の場合、作業ツリーを指定しましたが、これはpull(より正確にはfetch)のようないくつかのコマンドで中断します。

Git configにある作業ツリーの設定を解除するには、次のようにします。

git config --unset core.worktree

(作業ツリーを設定する方法は他にもあります)

重要なことに注意してください、

そもそも、カスタムワークツリーを使用してこの穴を自分で掘った場合を除き、これが問題になることはほとんどありません。

冗談:

これは、git internalsがワークツリー+ .git/ ある場合には。私の経験では、gitの最も基本的な部分を除いて、ワークツリーはまったくサポートされていません。徹底的に実験したことはありませんが、gitディレクトリのconfig変数が適切に設定されていれば、Gitはおそらく動作しますが、これはまだ試していません。

0
ThorSummoner

それにもかかわらず、GIT_DIRが設定されていないだけで機能します。

この問題は、GIT_DIRを誤って別の場所に設定した場合に発生します。

代わりにそれを追加できます:GIT_DIR = .git /それは動作します

0
Zvika Naveh