Gerrit에서는 누가 무엇을 커밋했는지 추적하기 위해, 명시적으로 sign-off라는 부분에 사람의 이름을 표시하는 기능을 사용하기도 한다. 이 기능을 깃에서 지원하고 있으며 patch의 마지막 줄에 Signed-off-by 부분이 추가된다. 예제 커밋 메시지는 다음과 같다.
initial commit Signed-off-by: Random J Developer <random@developer.example.org>
이를 사용하기 위해서는 깃에서 commit 시에 -s 파라미터만 붙여주면 된다.
>git commit -s -m "initial commit"
문제는 이 파라미터를 안드로이드 스투디오(정확히는 IDEA)에서 추가할 방법이 없다는 것이다. 커스텀 파라미터도 제공하지 않고, 체크박스를 통해 활성화/비활성화 할 방법도 없다. 아틀라시안(Atlassian) 사의 소스트리(SourceTree) 는 이미 지원하고 있다는데 안드로이드 스투디오에는 2011년부터 일부 IDEA 사용자가 요청하고 있지만 아직 추가되지 않았다.
~/.gitconfig 안에 format.signoff 파라미터를 지정할 수 있다고 하나, 안드로이드 스투디오에는 효과가 없다. 윈도우즈 환경이라면 깃의 commit 명령어인 경우 여기에 -s 파라미터를 추가하는 스크립트를 만들어, 이 배치 파일을 안드로이드 스투디오의 ‘File > Settings > Version Control > Git > Path to Git executable’ 에 배치파일을 지정하면 된다.
배치 파일의 코드는 다음과 같다.
@FOR /f "usebackq tokens=4*" %%i in (`@ECHO %*`) DO @SET other_params=%%j @IF /i "%4" EQU "commit" ( git %1 %2=%3 %4 -s %other_params% ) ELSE ( git %* )
위 방법은 파라미터들을 변수에 저장하기 때문에 순서를 바꾼다거나, 특정 파라미터만 비교할 수 있는 장점이 있다. 하지만, 단순 치환(replace)로도 ‘commit -s’는 지원할 수 있다.
:파라미터를 변수에 할당한다. @set command=%* : 바꾸고 싶은 값을 열거한다. @set command=%command: commit = commit -s % @set command=%command: merge = merge --no-commit % :명령 실행 @git %command%
필요에 따라 사용하도록 하자.
그 밖에
git config의 format.signoff 파라미터는 패치(patch)에 대한 것으로 커밋(commit)에는 적용되지 않는다. 이에 대한 설명은 여기에! 만약, 모든 commit에 signed-by-off 부분을 추가하고 싶다면 GPG(GNU Private guard)에 대한 다른 글 참고하자.
업데이트
안드로이드 스투디오 3.0에 commit 시 signed-off를 달지 선택하는 체크박스가 추가되었다.
참고