1

開発者がgitolite/gitを介してリポジトリをリモートリポジトリ/ウェブサーバーにプッシュできる開発/テストサーバーをセットアップしました。リポジトリサイトではすべてがうまく機能しますが、開発者はサーバーを使用できます。

問題:

コードをapachedocumentroot(chown'd apache:apcaheおよびchmod'd 755)にデプロイしたいと思います。私はこれらの指示に従い、次のように説明するように受信後フックを編集します。

#!/bin/sh
echo "deploying to DocumentRoot"
GIT_WORK_TREE=/var/www/www.example.com git checkout -f

ただし、ローカルリポジトリからgit pushを実行すると、次のような権限エラーが発生します。

error: git checkout-index: unable to create file .gitignore (Permission denied)
error: git checkout-index: unable to create file .htaccess (Permission denied)

そして、私のドキュメントルートは空です... post-receiveフックはユーザー'gitolite'として実行されています(それが重要かどうかはわかりません)。

gitoliteはすでにsudoersリストに含まれているので、次のようなものを実行したいと思います。

GIT_WORK_TREE=/var/www/www.example.com sudo git checkout -f

しかし、これもうまくいかないようです。可能であれば、別のシェルスクリプトを呼び出さないようにします。

どんなアイデアでも本当にありがたいです。

4

1 に答える 1

3

まず、gitアカウントがapacheアカウントと同じグループにあることを確認します。(または、避けたい以前の回答
に戻る必要があります)

あなたはこの作品を報告します:

 sudo GIT_WORK_TREE=..... git checkout -f

しかし、ベアリポジトリを使用すると、次のように表示することもできます。

 fatal: You are on a branch yet to be born

(このブログ投稿のように、ギトライトで管理されているベアレポを非ベアレポにすることはお勧めしません

git config core.worktree /home/user/myproject
git config core.bare false
git config receive.denycurrentbranch ignore

)。

/var/www/www.example.com私は、ディレクトリがチェックアウトしようとするのではなく、プルできるgitリポジトリであることを確認することを好みます。
だから私が好きなフックはもっとあります:

cd /var/www/www.example.com
git --git-dir=/var/www/www.example.com/.git --git-work-tree=/var/www/www.example.com pull

(をorigin使用すると、デフォルトでデフォルトで使用されるリモート名でgit pull、gitoliteベアリポジトリを参照します)

于 2013-03-14T14:06:55.060 に答える