git은 소스버전관리 시스템의 일종이다. 필자는 생물학을 전공했고, 컴퓨터공학을 복수전공하였는데 아직도 소스버전관리 시스템이 무엇인지는 명확하게 모르기때문에 해당 내용에 대한 설명은 다른곳에서 하도록 하겠다.
나는 git을 pycharm이라는 IDE(개발도구)와 함께 사용하고 있는데, 주로 내가 짠 코드를 서버에 저장하는 용도로 사용하고 있다. 로컬에만 저장할 경우, 노트북을 분실하거나 .py파일(python 코드 파일)이 날아가는 경우, 여태까지 짠 코드들이 사라지기 때문에 서버에 저장하는 방법을 택했다.
pycharm에서 짠 코드를 내 노트북에 저장하는 장소를 로컬 저장소(local repository)라고 부르고, local repository에서 서버내의 저장공간으로 내가 짠 코드들을 옮길 수 있는데, 서버내의 저장공간을 원격 저장소(remote repository)라고 부른다.
깃은 물론 여러가지 다른 심오한(?)개념들도 존재하지만 일단 여기서는 local repository와 remote repository와 직접적인 연관성이 있는 명령어만 알아보도록 하겠다.
1️⃣ init
cmd를 사용해서 git의 명령어를 사용할 수 있다. 예를 들어 내가 /Users/john/Desktop/sample이라는 디렉토리에 깃 저장소를 만들고 싶다고 하자.
이때 내가 사용해야 할 명령어는 아래와 같다. 리눅스 명령어가 궁금하다면 독자분들이 검색을 해보시길 바란다.
cd /Users/john/Desktop/sample
git init
init은 Initialized의 약자로서, 현재 디렉토리(current Directory)를 깃 저장소로 사용하겠다는 뜻이다. 즉, 현재 디렉토리가 바로 local repository가 되는 것이다.
2️⃣ add
add는 작업한 파일의 내용을 커밋대기상태에 추가하는 명령어이다. 즉, 커밋하기 전 단계라는 것이다. add 다음에 commit을 수행하는데, 왜 굳이 commit전에 add라는 단계가 있어야 하는가? 라는 의문점이 들것이다.
인터넷 검색 결과 아래와 같은 장점이 있다고 한다.
😄 : "각 변경 기록(commit)에 논리적으로 하나의 변경 사항을 담기가 용이한데 이렇게 하면 나중에 버그를 추적하거나 변경 이력을 롤백(roll back)할 때도 이점이 있습니다."
즉, 하나의 커밋에 너무 많은 정보를 넣지 않고 내가 원하는 정보만 넣음으로써 추후에 오류를 추적하는 등의 작업을 용이하게 하기 위함이다. 예를 들어서 내가 어떤 서류처리 작업을 하는데, 작업을 년별로 처리하면 각 년의 달마다 일어난 상황에 대한 정보는 알기가 힘들다. 어떤 달에는 매출의 감소가, 매출의 증가가 일어났을 수도 있고, 회사내에 중대한 변경사항이 있었을 수도 있다. 이러한 이슈를 해결하기 위해서 작업을 좀더 세분화 시켜놓으면 추후에 관리하기가 쉽다.
3️⃣ commit
commit은 로컬 저장소내의 파일에서 생긴 변경사항을 최종 기록하는 것이다. 즉, add를 사용해서 변경사항이 생겼음을 커밋대기상태에 배치하고, commit을 실행하면 로컬저장소에 변경사항이 기록되는 것이다. commit은 기존의 파일과 대비해서 생긴 차이, 즉 새로 짜여진 코드 혹은 변경된 코드기록을 저장한다. 즉, 과거의 상태에 비해 어떤 변경사항이 생겼는지를 확인하는 것이다.
이렇게 하면 좋은 점은, 어떤 commit에서 오류가 발생했는지 추적하기가 쉽다.
4️⃣ push
push는 로컬저장소내에서 생긴 변경사항(커밋이 끝난)을 원격 저장소로 옮겨주는 작업이다.
이때 어떤 branch를 사용해서 옮길지는 사용자가 지정할 수 있다.
이걸 이론적으로만 접근하면 솔직히 이해하기가 쉽지 않기 때문에 예시를 들어서 설명하도록 하겠다.
쉽게 말하면 부산이 로컬 저장소(local repository), 서울이 원격 저장소(local repository)라고 하자. 부산에서 서울로 짐을 옮기는 행위를 push라고 하는 것이다.
이때 어떤 branch를 써서 push를 하는지는 마치 어떤 고속도로를 타고 부산에서 서울로 갈 것인지 정하는 것과 같다.
사용자가 별다른 조치를 취하지 않으면 main branch를 사용해서 push를 하고. branch를 추가하는 방법에 대해서는 이 아래 링크에서 자세히 설명하도록 하겠다.
5️⃣ pull