1

ワークステーションでローカルに行われた変更を「ハブ」リポジトリ (リモート) にプッシュできる環境をセットアップしています。その後、更新後フックがステージング Web サイト (「プライム」) を自動的に更新します。これを行っているのは、リモート ハブにプッシュしたときに、変更がステージング サイトに自動的に反映されるのを確認できるようにするためです。

この設定は、この記事に基づいています。私のサーバーは Windows 2012 で、サーバーとワークステーション (Windows 7) の両方で MSysGit を使用しています。

すべてを手動で行うと、すべてが正常に機能します-ローカルリポジトリからハブにプッシュし、手動でプライムにフェッチ/マージします。私の問題は、更新後のフックでフェッチ/マージを実行しようとしたときです。

ハブに変更をコミットすると、次のような出力が得られます。

c:\Code4X\GIT\stage>git push stage master
Counting objects: 11, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 518 bytes, done.
Total 6 (delta 5), reused 0 (delta 0)
remote:
remote: **** Pulling changes into Live [Stage's post-update hook]
remote:
remote: hooks/post-update: line 12: cd: /c/websites/myproject.staging: No
such file or directory
To w:/stage.git
   ce1e2ea..93e11f4  master -> master

私の更新後のフックは次のとおりです。

#!/bin/sh

echo
echo "**** Pulling changes into Live [Stage's post-update hook]"
echo

cd /c/websites/myproject.staging || exit
unset GIT_DIR
git pull stage master

exec git update-server-info

問題なくディレクトリに bash cmd シェルと cd を起動できるので、何が問題なのかわかりません。

私も試しました:

  • PATH に git\cmd を含める
  • cd しようとしているパスを引用符 (") で囲みます。
  • シバンが #!/c/progra~1/git/bin/sh を指すようにする

うまくいけば、それは明らかなことです。問題が何であるかについて何か考えはありますか?

4

3 に答える 3

1

私は自分のプロジェクトの1つで、やや似たようなことをやり遂げました. あなたは正しい考えを持っているようです。

代わりに相対パスを使用してみてください。

#!/bin/sh
unset GIT_DIR
cd ..
# You are now in the project root
cd ../project.prime
git pull stage master

これがあなたを助けるかもしれないので、私が何をしているのかをあなたに知らせようと思いました。このスクリプトは、リポジトリが更新されるたびに作業コピーを強制的に更新します。

#!/bin/sh
unset GIT_DIR
cd ..
git checkout -f
于 2012-12-19T00:57:04.510 に答える
0

参照として使用している記事は、ハブとプライムが同じホスト上にあることを前提としているようです。おそらく、別のホストにそれらがあるため、/c/websites/myproject.staging が実際に存在しない場所で更新後のフックが実行されていることを意味します (プッシュを受信するリモートで実行されます)。

さらに、非裸のリポジトリへのプッシュを避けるという著者のアドバイスは一般的に有効ですが、この方法でプルをスクリプト化することは、そうするのとほぼ同じであるため、プッシュをハブ上のリモートにチェーンするように変更する可能性があります (プライムを指す) ) ポストアップデート内? これにより、別のホストにあるハブとプライムで動作し、フック内のディレクトリをナビゲートする必要がなくなります。

于 2012-12-18T23:00:11.740 に答える
0

ここで答えを見つけました:ポストフックで実行されるgitコマンドの前に「env -i」を付けます。したがって:

cd /path/to/other/repo && env -i git pull

投稿で詳しく説明されているように、その理由は、post-hook コマンドが GIT_DIR 環境変数セットで実行されるため、実行されるすべての git コマンドは、現在のリポジトリではなく、古いリポジトリを参照するためです。「env -i」その変数の設定を解除する 1 つの方法です。

于 2013-01-08T13:51:00.093 に答える