私は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で接続し、このスクリプトを手動で実行すると、うまく機能します。
最終的に機能したスクリプトを次に示します。リモートでの作業を妨げていた元々欠けていたのは、unset GIT_DIR
#!/bin/sh
cd /path/to/working-copy/ || exit
unset GIT_DIR
git pull repo branch
exec git-update-server-info
代わりに試してください:
#!/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はおそらく動作しますが、これはまだ試していません。
それにもかかわらず、GIT_DIRが設定されていないだけで機能します。
この問題は、GIT_DIRを誤って別の場所に設定した場合に発生します。
代わりにそれを追加できます:GIT_DIR = .git /それは動作します