web-dev-qa-db-ja.com

WindowsでのGitフック

受信後フックの作業ディレクトリでチェックアウトする次のコードがあります。

#!/bin/sh
git --work-tree=d:/websites/__gitweb --git-dir=d:/_gitrepo.git/ checkout -f

残念ながら、動作しないようです。ただし、Windowsコマンドライン(cms)に次のように入力すると、コマンドは機能します。

git --work-tree=d:/websites/__gitweb --git-dir=d:/_gitrepo.git/ checkout -f

権限と実行属性を確認しましたが、何もしませんでした。

更新:

近づいていると思います。今私は問題が何であるかを知っていますが、なぜこれが起こっているのか分かりません。フックは実際にトリガーされていますが、次のメッセージが表示されます。

remote: Starting copy from repository to work tree...
remote: fatal: Not a git repository: 'd:/_gitrepo.git/'
remote: Finished.

D:のパスをネットワークパス全体に変更しようとしましたが、それでも機能しません。リモートリポジトリに移動してgit logを実行すると、変更があり、フックをshで実行すると機能します。明らかにそれがgitリポジトリではないと言っているのはなぜですか?

12
Ramzendo

やっと動いた!これは本当に奇妙です。 pwdと入力して、実際にバッチが配置されている場所を確認する必要があり、サーバー上のフックの場所が表示されました。ただし、次の行にhostnameを追加すると、ローカルホスト名が表示されました。次に、次のようにパス全体を追加します。

#!/bin/sh
echo "Starting copy from repository to work tree..."
pwd
hostname
git --work-tree=//remotehost/d$/Webseiten/__gitweb --git-dir=//remotehost/d$/_gitr
epo.git checkout -f
echo "Finished."

この解決策が誰かのために役立つことを願っています

14
Ramzendo

シェルスクリプト(およびこれらのフックスクリプトは、Windowsでも msysgitのmsysレイヤー を介してシェルとして実行されます)の場合、別の種類のパスを使用できます。

#!/bin/sh
git --work-tree=/d/websites/__gitweb --git-dir=/d/_gitrepo.git/ checkout -f

MinGWでのPosixパス変換 による他の可能性も参照してください。

4
VonC