1

ワークフローを実装しようとするGITは初めてです。

w:/webs/site.com/site.gitローカルオフィスのセットアップでは、Apache、Linuxなどと共有のDebian Sambaディスクを使用します。したがって、これはBAREリポジトリのタイプの「ローカルパス」からプロジェクトのクローンを作成します。

w:/webs/site.com/site.git/hooks/post-receiveにある「post-receive」フックとしてbashスクリプトを作成しました。これは、「linux」gitによって次のように実行されると考えられます。 `/home/samba/webs/site.com/hooks ...これには、チェックアウトにコミットされたブランチに応じて、次のような条件付きスクリプトが含まれます。

GIT_WORK_TREE=/home/samba/webs/site.com/html git checkout -f $BRANCH

問題は、tortoiseGITローカルコピーからオリジンブランチにプッシュすると、フックが次のように失敗することです。

リモート:致命的:「C:/ ProgramFiles(x86)/Git/home/samba/webs/site.com/html」に切り替えることができませんでした:そのようなファイルまたはディレクトリはありませんw:/webs/site.com/siteへ。ギット

私たちが理解していることは、WORK_TREEまたはフックスクリプト全体がクライアントGITによって実行されていることを意味します。

問題は、SSHやその他のリポジトリへのアクセスを開くことを計画しているため、Windowsローカルパスを使用した場合、Windows以外のローカルネットワーククライアントからプッシュすると失敗することです。別の方法は、ローカルであってもSSH経由でリポジトリをプルすることですが、これはかなり非効率的であり、このフックの問題にのみ必要であると考えています。

両方と互換性のある、使用できる提案やGIT変数はありますか?ありがとう。

4

1 に答える 1

2

この問題は、インタープリター自体ではなく、GIT_WORK_TREEのパスに実際に関連しています。

これで、GIT_WORK_TREE = "../ html"を使用すると、Samba経由でアクセスするWindowsクライアントまたはLinux経由でSSHgitプッシュのいずれかから完全に機能することがわかりました。

どうやらGITフックは、.gitが存在するリポジトリルートディレクトリ自体(フックディレクトリではなく)内で実行されているようです。

「その他」の問題はシンボリックリンクに関連しています...プッシュプロセスがWindowsクライアントから実行される場合、シンボリックリンクは元のシンボリックリンクのようにファイルとして自動生成(チェックアウト)HTMLディレクトリに表示されます。

このため、ローカルであってもSSH経由でリポジトリにアクセスすることを最終的に決定しました。;(

于 2012-07-25T17:37:24.233 に答える