git1

약속을 지키기 위해 오늘은 드디어 commit 편입니다. 위에 그림을 보시면 Stage Area에서 Local Repository로 단계를 넘어갈 때 사용하는 명령어가 commit입니다. 영어 공부를 열심히 한 여러분은 아마 지난 두 편간 나올 기약이 없던 commit을 보면서 commit인데 왜 약속을 안지키냐고 생각 하셨을 수도 있겠습니다. 프로그래밍을 공부하다 보면 익숙한 단어지만 익숙하지 않은 뜻으로 사용되는 경험을 종종하실 수 있습니다. 오늘의 주인공인 commit도 그 중 하나입니다.

데이터베이스를 공부 하셨던 분들한테는 익숙하겠지만 여기서 commit은 변경사항을 적용한다는 의미입니다. 우리가 앞에서 git init으로 Working Directory를 초기화 했고 파일을 추가하고 addindexing을 해서 Stage Area로 우리의 작업 내용을 옮겨주었습니다. 지금 우리는 어떤 경로에서 어떤 파일과 디렉토리를 관리하겠다만 알려준 상태입니다.

실제로 우리는 아직 작업을 저장하지 않았습니다. 저장을 할 파일과 디렉토리를 골랐을 뿐이죠. 앞선 내용에서 commit에 저장이라는 표현을 썼지만 엄밀히는 저장은 아닙니다. snapshot이라고 해서 특정 시점의 모습을 기록해 두고 다시 불러올 수 있도록 기록하는 과정입니다. 이걸 게임의 세이브 포인트랑 같은거 같은데 그냥 저장이라고 하면 안되냐?라고 하면 세이브 포인트 정도로 우선 이해하고 넘어가셔도 좋습니다.

Git은 크게 3 가지의 상태를 거쳐 snapshot을 저장하게 됩니다. Modified, Staged, Commited를 거치면 snapshot이 만들어 집니다. 우리는 앞에 두 단계를 이미 앞 시간에 배웠습니다.

  1. Modified: git init이 후 발생하는 생성과 수정. Working Directory에서 발생하는 모든 변경 사항
  2. Staged: commit으로 snapshot찍을 데이터 고르기
  3. Commited: Stage Area에 올라온 내용을 snapshot찍어서 저장하기

이런 3단계를 거쳐 우리는 snapshot을 통해 파일의 버전을 관리 할 수 있습니다.

그럼 언제 이런 snapshot을 만드는게 좋을까요? 정해진 것은 없지만 권장되는 시점들은 있습니다.

  1. 기능이나 모듈이 완성 되었을 때
  2. 함수가 완성 되었을 때
  3. 작업을 마무리 할 때
  4. 퇴근하기 전
  5. 화재 대피 전

fire

git commit -m "commit msg"

명령어를 통해 commit을 할 수 있습니다. commit msgsnapshot을 찍을 때 이번 snapshot은 어떤 내용을 위해 기록하는 건지 메모를 남기는 것 입니다. 여러분이 원하고 남들도 이해 할 수 있는 작업내용을 써주시면 됩니다. commit은 제목과 본문이 구분되어 있습니다. 제목과 본문 구분은 "" 안에서 한줄 공백을 주면 구분됩니다. 어떻게 쓸지는 순전히 여러분의 자유입니다. 하지만 추천 되는 방법이 있다면 따라하면서 본인의 스타일을 만드게 좋다고 생각합니다.

제가 공부하면서 배우고 찾은 규칙들입니다. 추후에 별도로 다시 다룰 예정이지만 여기선 중요 포인트만 체크하고 가겠습니다.

  1. 제목은 간결하게 핵심만 쓴다.
  2. 영어는 50자, 한글 25자 내로 쓴다.
  3. 본문은 72자 단위로 줄바꿈을 한다.
  4. 온점(.)을 사용하지 않는다.

이 규칙들은 가독성을 위해서 지켜주면 좋겠습니다.

-mcommitCLI로 하실 때 개인적으로 추천하는 옵션입니다. git bash의 기본 editor는 VIM이라서 익숙하지 않으신 분이 대부분이라고 생각이 들고, vscode로 바꾸셨어도 매번 vscode가 켜지고 커밋 메세지를 작성하는게 여간 귀찮은 일이 아니라서 한번에 해결 할 수 있는 옵션을 추천 드립니다. 제가 처음 Git을 접하고 가장 많은 삽질을 한 부분이 바로 commit 단계에서 VIM을 이용해 커밋 메세지를 작성하는 것이 었습니다.

git commit

으로 VIM들어가서 i로 입력모드로 바꿔서 메세지 쓰고 esc :wq로 저장하는데 툭하면 wq대신 ㅈㅂ 입력하고 엔터쳐서 에러 발생하는 등 익숙하지 않은 도구 두개를 동시에 사용하느라 정말 많은 삽질을 해서 여러분은 삽질 하지 않을 수 있는 옵션 쓰세요.

다음 글은 commit 보충편 또는 Remote Repo편으로 돌아오겠습니다. ignoresetting편처럼 다른게 올 수도 있지만…… 다음 글도 기대해 주세요.


본 게시물에 사용된 이미지는 페이스북 Korea Git user Group이명호님이 제작하신 자료입니다.
겉핥기로 시작하는 Git 시리즈는 Git bash를 사용하는 것으로 전제로 작성 된 글입니다. 이김에 CLI에 익숙해져 보세요!!