안드로이드 스투디오의 sign-off-by

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’ 에 배치파일을 지정하면 된다.

androidstudio_git-signoff

배치 파일의 코드는 다음과 같다.

@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를 달지 선택하는 체크박스가 추가되었다.

참고