2014-04-09 9 views
1

저희 회사는 팀으로 나뉘어져 있으며 품질 보증 담당자에게 코드를 보내기 전에 코드 검토를 수행합니다.GIT : 저자 그룹 별 로그 필터

일반적으로 우리가 만지는 모든 코드는 동일한 팀 (A)의 누군가가 검토하지만 경우에 따라 다른 팀 (B)의 코드도 터치해야합니다.

이러한 경우 코드 검토는 A 팀이 검토 한 부분과 B 팀을 검토 한 두 부분으로 이루어져야합니다.

문제는 팀 A가 팀 B가 검토 할 코드를 보내지 않아 팀 B가이 새로운 코드를 알지 못한다는 것입니다.

내가하고 싶은건 정기적으로 코드의 특정 부분 (보통 우리 팀이 처리하는 모듈이있는 하위 디렉토리) 내의 커밋을 찾기 위해 스크립트를 실행하여 팀에 속하지 않은 사람이 으로 만들었지 만, 불행히도 git log에서 --not 인수는 내가 행복하게 내 요구 사항은 목록 모든 커밋 터치 모듈/A, 모듈/B 또는 모듈 "같은로 변환 git log --not --author "John" --author "Paul" --author "Ringo" module/A module/B module/C

를 실행할 수 없습니다 --author 작동하지 않는 것/C 존 아니라 사람에 의해 수행 , Paul 또는 Ringo "

"공식"도구를 사용하여이를 수행 할 수있는 방법이 있습니까? 필자는이 결과를 한 줄짜리 또는 그와 비슷한 방식으로 수행한다는 의미 일 경우 오픈 소스 스크립트에도 관심이 있습니다.

답변

4

편집 : "John" "Paul"또는 "Ringo"를 포함하지 않는 작성자 이름으로 커밋되어야합니다. git을 PCRE로 빌드해야합니다. 당신의 자식 인 경우


당신은 부정적인 모습 숨김 주장을 사용하여 수행 할 수 있어야한다 :

git log --perl-regexp --author='^(?!(.*(John|Paul|Ringo)))'

나는 그들이 여전히 유용 할 수 있으므로 아래 이전의 변종을 떠날거야 PCRE 지원으로 컴파일됩니다. 이런 식으로 뭔가 당신이 원하는 일을해야합니다

git log --perl-regexp --author='(?<!(john|paul|ringo))@'

참고 정규식이 실제로 john|paul|ringo 앞에 @하지을 찾고있다. 이름을 사용하여 작업하게하려면 제외하려는 이름으로 시작하지 않는 '앵커'를 찾는 편리한 방법이 없기 때문에 이름을 사용하는 것이 더 까다 롭습니다.

당신은 저자 라인의 시작을 고정하려고 만 (중간 이름이 여전히 표시하는 것처럼 즉 요한 커밋) John|Paul|Ringo을 시작하지 않는 것이 커밋 보여줄 수 :

git log --perl-regexp --author='^(?!(John|Paul|Ringo))'

+0

하셨습니까 PCRE로 빌드 된 자식에 대해 알고 있습니다. 좋은 답변입니다! 다른 사람들이 GIT 컴파일을 필요로하지 않는 다른 솔루션을 제공 할 수 있는지 좀 더 기다려 보겠습니다. – Seb

+1

우분투에서 prebuilt git 패키지는 PCRE가 활성화 된 상태로 제공됩니다. – ArtemB

+0

우분투 13.10에서 사용했는데 PCRE를 사용하도록 설정되어 있습니다. 하지만 그것은 실제로 12.04에 있지 않습니다. ( – Seb