swift로 작업을 하고 있는데 자동으로 개행, 공백 등을 처리해주는 swift format 프로그램을 사용하고 있다.
참고 : SwiftFormat github 주소
프로젝트 디렉토리 하 커맨드 라인에서 한줄의 명령어 작성으로 하위 스위프트 파일을 reformat해주는 아주 좋은 프로그램이다.(감사합니다.🙇)
다만 문제는 협업하면서 생겼다. 동료와 master 브랜치에 서로의 작업을 merge하는데 내가 먼저 swiftFormat을 돌리지 않고 merge했고 동료는 돌리고 merge를 시도했고 당연히 공통 파일에서 comflict가 생겨버렸다. (나도 돌렸으면 문제가 생기지 않았겠지요... 죄송합니다ㅜㅜ)
하지만 pre-commit 루틴을 자동화할 수 있는 방안을 알게되었고 이를 공유할 기회가 생겼으니 좋게 생각해보도록 한다.
Git도 다른 버전 관리 시스템처럼 어떤 이벤트가 생겼을 때 자동으로 특정 스크립트를 실행하도록 할 수 있다. 이 훅은 클라이언트 훅과 서버 훅으로 나눌 수 있다. 클라이언트 훅은 커밋이나 Merge 할 때 실행되고 서버 훅은 Push 할 때 서버에서 실행된다.
참고 : git Document
쉽게 말하면 깃 푸시, 머지, 커밋 하기전, 후에 뭔가 하고 싶은 액션을 자동으로 할 수 있도록 하는 녀석이다.
이 글에서는 커밋하기 전에 SwiftFormat 프로그램을 돌릴 수 있도록 하는 방법을 알아보도록 하겠다.
나는 커밋하기 전에(pre-commit) swift format을 한번 돌리고 싶다. swift format을 돌리려면 프로젝트가 있는 directory에서 아래처럼 명령어를 실행해주면 된다.
1 . hooks directory 들어가기
프로젝트 디렉토리에서 .git/hooks로 이동한다.
그럼 아래와 같은 파일들을 볼 수 있다.
sample 확장자로 있는 파일 들에서 우리는 pre-commit.sample을 볼 것이다.
아래와 같은 내용이 써져있다.
이곳에 우리가 원하는 액션을 추가해준다.
이제 마지막 작업으로 pre-commit.sample에서 확장자를 지워주어야 한다. sample 확장자는 실행되지 않기 때문이다. 나는 pre-commit.sample 파일은 그냥 그대로 두고 싶어서 새로 pre-commit 파일을 만들어주기로 했다.
아래와 같은 명령어로 sample파일에 있는 내용 그대로 새로운 파일을 만들어준다.
이대로 커밋을 하게되면 pre-commit에 대한 실행 권한이 없다는 에러메시지를 만나게 되므로 실행 권한을 준다. 나는 모든 권한을 열어두었다.
아래 명령어를 실행한다.
이제 커밋하게 되면 swiftformat을 먼저 실행하고 커밋이 이루어진다.
git hook 에 단순히 pre-commit을 추가하면 되는 작업이라 컨트리뷰터 중 한명이라도 git hook을 작성해주면 나머지 팀원들은 안해도 될거라는 생각을 했다. 다만 .git 파일은 푸시가 되지 않기 때문에 다른 방법이 필요하다. 좋은 방법이 생각나면 다시 포스팅 하도록 하겠다!