본문 바로가기
IT

[IT] Git으로 버전관리하는 첫 걸음 완벽 정리 - init, add, commit, push

by hseoy 2020. 6. 8.
반응형

이 글에서는 Git의 사용법에 대해서 다뤄보려고 한다.

Git을 왜 사용해야 하는 지에 대한 이유에 대해서 학생의 지극히 개인적인 입장에서 이야기 해보자면, 내가 무엇을 했는 지에 대해서 기록을 하는 데 사용하는 것이 매우 편하다. 누구나 가끔씩 어제 짠 코드가 뭔지, 그저께 코드와 어제의 코드는 뭐가 다르고 내가 왜 이렇게 짰는 지에 대해서 궁금해 할 것이다. 그리고 오늘 갑자기 오류가 발생했을 때 Ctrl+Z를 눌러 어제의 정상 동작하던 코드로 돌아가고 싶은 마음도 가진 적이 있을 것이다. 이럴 때 사용하면 좋은 것이 Git이다.

"그저께 제 코드는 정상 동작했습니다. 그러다가 더 나은 코드를 위해 어제 코드의 일부를 수정을 했고, 오늘 필요가 없는 부분이라고 생각되었던 부분이 있어서 삭제를 했는 데 오류가 발생했습니다. 이 부분을 삭제를 했을 뿐인데 왜 오류가 발생했을까요?"

오류가 발생했을 때 이렇게 질문을 할 수 있는 사람은 몇이나 될까? 코드의 변경사항을 매번 기록하는 사람이야 당연히 언제 무엇을 했고 어떤 부분을 만졌는 데 어느 부분에서 에러가 발생했는 지를 정확하게 알 수 있을 것이다. 하지만 그렇지 않은 사람의 현실은 어제 코드를 수정한 부분과 오늘 코드를 삭제한 부분의 기억이 섞이면서 정확하게 내가 뭘 했더니 오류가 발생했는 지를 알 수 없어 정확하게 문제점을 파악할 수 없을 것이다. 그리고 정확하게 어디서부터 어디까지가 어제 정상동작했던 코드이고, 어디서부터 어디까지가 오늘 내가 삭제하여 오류가 발생한 부분인지 몰라 오류가 발생하기 전 지점으로 돌아갈 수조차 없을 것이다. 이러한 부분을 도와주는 것이 Git이라고 생각한다.

Git은 커밋이라는 과정을 통해 코드의 어느 지점을 기억하면서 무엇을 변경하였는 지 그 변경사항을 Text로써 기록할 수 있도록 한다. 또한 이후에 문제가 생겼을 경우 그 지점으로 되돌아 갈 수도 있다. 이것이 Git이 주는 혜택이자 장점이다.

하지만 나는 이 Git이라는 것이 생각보다 어려울 수 있음을 알았다. Git을 자주 사용하는 환경에서 프로그래밍을 공부하는 내 친구가 Git을 어떻게 사용해야 하는 지에 대한 질문을 해온 것이다. 학교 동아리에서도 분명히 Git을 사용할 텐데 프로그래밍을 접하고 Git을 접한지 1년이 넘은 이 시점에서 그런 질문을 해온다는 것은 나에게 Git이 매우 어려운 것이였나 라는 생각을 하게 만들었다. 나는 개인적으로 이렇게 생각한다. Git은 잘 쓰기는 어렵겠지만 그냥 쓰는 것은 매우 쉽다.

내가 예시로 들었던 그저께,어제,오늘 코드 문제를 해결하기 위해서는 Git을 잘 쓸 필요는 없다. 매우 간단한 명령어 몇 개만 알면 되는 문제이다. 일단 먼저 오늘 이야기할 명령어들을 이용하여 폴더를 git으로 초기화하고 README를 커밋할 리스트에 추가하고 github repository와 local과 연결한 다음 local에 있는 내용을 원격에 있는 github에 올리는 것까지 살펴보도록 하자.

$ git init
$ git add README.md
$ git commit -m "Add README"
$ git remote add origin https://github.com/user-name/repository-name.git
$ git push origin main # 기존은 master, 지금은 main으로 해야 한다.

위의 명령들만 알면 git은 끝이다. 매우 SIMPLE, SO SIMPLE!

.

.

.

라고 말했지만 저 명령어들이 어려워 지금 이 글을 읽고 있는 것이라 생각하므로 좀 더 자세하게 살펴보도록 하겠다.

먼저 "git init". 이것은 init이 initial, 초기화를 의미한다. 이 것은 현재 디렉토리(폴더)에서 git을 사용하겠다고 알려주는 것이다. 그러면 git은 사용자에게는 숨겨져 있는 .git이라는 폴더를 만들면서 관련된 정보를 이 폴더에 담게 된다.

두 번째로는 "git add README.md"이다. git add 명령은 어떠한 파일을 변경사항에 반영하겠다라는 의미를 가지고 있다. Git은 다음 변경사항에 올릴 파일들을 add라는 명령을 통해 받는다. git add README.md의 의미는 README.md라는 파일을 다음 변경사항에서 반영하겠다는 것이다. 

그리고 이렇게 변경사항에 올린 파일들은 git commit이라는 명령을 통해 기록된다. 여기서 "-m 'Add README'는 변경사항에 대해서 설명하는 text라고 보면 된다. -m이라는 옵션은 인라인으로 변경사항에 대한 description을 작성하겠다는 것이다. 다른 텍스트 에디터의 도움 없이 바로 작성하겠다는 것을 의미한다. 그리고 그 뒤의 큰 따옴표 안의 내용은 그 인라인으로 작성한 변경사항에 대한 description이다. 지금은 README를 추가했다는 의미에서 Add README라고 기록했지만 만약 프로젝트를 초기화하는 커밋이라면 이 description을 "Initial commit"이라고 기록하는 것이 적당할 것이다. 

"git remote add origin https....."는 원격 저장소에 대한 정보를 git에 추가하는 것이다. origin 뒤의 url은 원격 저장소의 위치를 의미하며 origin은 원격 저장소 url의 별명, 이름이라고 보면 좋을 듯하다. 즉 origin이라는 것은 변경가능한 요소임을 의미한다. git remote add origin https...는 https...에 위치한 원격저장소의 이름을 origin으로 하고 이것을 git에 기록하겠다는 것이다. 

위에서 기록한 원격저장소에 대한 정보는 git push 명령을 사용할 때 필요해진다. "git push origin master"라는 것은 origin이라는 원격 저장소의 master 브랜치에 현재까지 기록된 변경사항들을 밀어넣겠다(push)라는 의미이다. 즉 백업, 공유라고 봐도 좋을 듯하다. 브랜치가 뭔지에 대해서는 아직까지는 그냥 백업본이라고 생각하면 될 듯하다. 브랜치를 생성할 때의 변경사항을 그대로 가져가면서 별도의 공간에서 기존 것과는 다르게 작업을 할 수 있으니 백업본이라는 표현도 틀린 말은 아닐테다.

* 지금은 master 브랜치가 main 브랜치로 용어가 변경되었다. 따라서 git push origin master 대신 git push main을 사용해야 한다.

git push 작업까지 수행하게 되면 연결된 원격저장소(github)에 local에서 작업한 내용에 대한 기록이 올라갔을 것이다. 그러면 이제 남은 것은 파일들을 수정하고 그것들을 변경사항에 추가(add)한 다음 그 변경사항을 기록(commit)하고 그것들은 원격저장소에 백업(push)하는 작업을 반복하는 것이다.

여기까지가 git을 시작하는 데 있어 알아야할 가장 기본적인 내용이라고 생각한다. 약간의 틀린 내용도 있을 수 있으나 그건 git을 배우고, 사용하다보면 자연스레 고쳐지고 이해될 것이라 생각된다. 틀려도 좋으니 일단 시작하는 것이 가장 많은 것을 배울 수 있다.

반응형

댓글