プロジェクトを SVN から Git/Gitolite に移行中ですが、説明のつかない動作が発生しています。構成ファイルの関連部分は次のとおりです。
repo ade
RW = jenkins matt
- dev/USER/master and VREF/NAME/ade/ = @grads
RW+ dev/USER/ = @all
option hook.post-receive = jenkins
これは、「ade/ディレクトリ内のファイルに触れず、それを自分のマスターブランチにコミットしようとしない限り、誰でも自分のdevブランチにプッシュできる」ことを意味すると私は信じています。そうですか?ええと、スポイラー、それは正しくありませんが、何が間違っているのかわかりません。
問題は、私が実行するときです
git clone git@server:ade
git branch foo
git checkout foo
<<edit some file that's not in /ade/ and commit it>>
git push origin foo:dev/tom/foo
それは言う
remote: FATAL: W VREF/NAME/ade/filename.java ade tom DENIED by VREF/NAME/ade/
remote: error: hook declined to update refs/heads/dev/tom/foo
理由はわかりません。何か案は?
編集:
問題を解決しました...ちょっと。何が間違っていたのかはまだわかりませんが、自分のやりたいように見えるカスタム VREF を書きました。
#!/usr/bin/env python
from subprocess import check_output
import sys
if sys.argv[8] in sys.argv[1] and "/".join(sys.argv[9:]) in check_output(["git", "diff-tree", "--no-commit-id", "--name-only", "-r", sys.argv[3]]):
print sys.argv[7]
うまくいけば、これにより、次の人が数時間の髪を引っ張る時間を節約できます.