共有ベアリポジトリ(ssh経由)にプッシュすると、post-commitが正しく機能しません。
ここの多くのスレッドで見つけたので、これはかなり一般的であり、同じサーバー上の他の2つのリポジトリーでも正常に機能するため、非常識になります。
#!/bin/sh
GIT_WORK_TREE=/ab/cd/staging git checkout -f
リポジトリ自体は、フックがチェックアウトするディレクトリと同じディレクトリにあります
/ab/cd/barerepo
プッシュすると、目的のパスにファイルがチェックアウトされませんが、次のエラーメッセージが表示されます。
Writing objects: 100% (3/3), 299 bytes, done.
Total 3 (delta 2), reused 0 (delta 0)
fatal: Could not jump back into original cwd
error: hooks/post-receive exited with error code 128
これが何を意味するのかについての情報は見つかりませんでした。(Googleは、私が知る限り、git自体への貢献からのみコミットを表示します)。だから私は読んで推測して試しました…</p>
- さらに、受信後フックにGIT_DIRを設定します
- --git-dir = / ab / cd/barerepoでベアリポジトリを再初期化--working-dir=/ ab / cd / staging
- barerepo/configで作業ディレクトリを手動で設定する
- ベアリポジトリを空白に設定してコミットする
- クローン作成によるベアリポジトリの設定
現在、構成は次のようになっています
[core]
repositoryformatversion = 0
filemode = true
bare = true
しかし、私もこれを持っていました(努力なしで)
[core]
repositoryformatversion = 0
filemode = true
bare = true
sharedrepository = 1
worktree = /ab/cd/staging
logallrefupdates = true
[receive]
denyNonFastforwards = true
また、受信後のフックに2行目を追加しました
echo "post-receive done" > updated.txt
ベアリポジトリのディレクトリにファイルを書き込みます。GIT_DIRは「。」に設定されているように見えるので、これは私には理にかなっています。これは、別のSO質問から取得した受信後の切り取りによって確認されます。
echo Running $BASH_SOURCE
set | egrep GIT
echo PWD is $PWD
結果:
Running hooks/post-receive
GIT_DIR=.
PWD is /ab/cd/barerepo
では、どうすればgitを元のcwd(現在の作業ディレクトリ)に戻すことができますか?参考までに:私はまだgitに慣れておらず、明らかな何かが欠けていると愚かな感じがしますが、この特定のエラーメッセージについて本質的なものが見つからないので不思議に思います。ところで、プッシュ自体は正常に機能します。