기타

[git]책 - 팀개발을 위한 git, github 시작하기(1일차)

변기원 2023. 1. 18. 18:20

현업에서 근무한 지 6개월 차가 되었지만 부끄럽게도 이제야 git을 제대로 파보려고 한다.

배포를 하면서 깃 관련 문제를 겪어 다른 직원분들을 기다리게 하고 시간을 보내서 굉장히 죄송하고 쑥스러웠다.

 

git, github이 어려워서, 그리고 기능개발에 치우쳐서 당장 급한 것만 겨우 하면서 작업해 왔는데 더 이상 미룰 수 없다.

이번 기회에 git을 찢어보자.

첫번째 책은 쉽게 설명이 되어있기로 유명한 "팀개발을 위한 git, github 시작하기"이다.

 

1일 차

로컬저장소는 눈에 보이는 실체가 있는 녀석이었다.

잘 알지도 못하면서 처음 프로젝트를 만들면 터미널에 git init을 입력하고 대충 '아 로컬저장소가 만들어졌구나'생각했는데

git init을 입력하면 .git 이라는 폴더가 생기고 이 폴더가 바로 이 프로젝트의 로컬저장소가 된다.

이 .git 폴더 안에 들어가면 버전정보, 커밋 정보, 스테이지 정보, 원격저장소 주소 등이 모두 이 .git 안에 있다.

 

git add README.txt를 하면 README.txt파일을 스테이지에 올린다.

책에서는 말 그대로 데뷔 준비가 다 된 가수를 무대 위에 올리는 것에 비유한다.

git commit은 지금 스테이징 된(데뷔준비가 다 돼서 무대 위에 올라온) 파일들을 추가해서 하나의 버전으로 만드는 것이다.

알지도 못하면서 git add .을 사용해 왔는데, 이것은 지금까지 변경된 사항을 모두 추가해서 스테이지 위에 올린다는 뜻이다.

그리고 commit을 하게 되면 지금까지 작업한 애들까지 하나의 버전이 되는 것이다.

여기까지만 하면 버전관리를 나 혼자서 하고 있는 것이다. 

내 .git폴더, 즉 로컬저장소에서만 버전관리를 하고 있다.

나 혼자 버전관리를 하고 있으니 언제든 로컬에서 checkout을 통해 과거의 버전으로 돌아갈 수 있다.

 

이 버전관리를 다른 사람과 하려면 이 로컬저장소를 같이 써야 한다. 그게 아니라면 클라우드에 저장소를 올려서 공유해야 한다.

이게 github이고 공유된 저장소가 바로 '원격저장소', '레포지토리'이다.

 

commit이 되어 로컬저장소에 버전관리된 프로젝트를 원격저장소에 올려서 다른 사람과 버전관리를 같이할 수 있다.

push란 로컬저장소의 커밋내역을 원격저장소에 올린다는 것이다.

커밋내역이 올라간다는 뜻은 로컬에서 버전관리된 코드들이 원격저장소로 올라간다는 뜻이다.

 

책에서는 소스트리를 사용해서 이것을 시각적으로 이해할 수 있도록 한다.

이 점이 굉장히 좋아서 이 책을 선택했는데 보통 어려운 개념을 쓰고 싶을 때 먼저 시각적으로 이해하고 나면

추상적인 상황에서도 마치 머릿속에 그림이 그려지는 것 같아서 응용하기도 좋다고 생각한다.

 

정리

1. 처음 만들어서 작업한 파일은 untracked 상태

2. 버전관리를 위해 작업이 끝난 파일들을 골라서 스테이지에 올린다. staged 상태

3. 스테이지 상태의 파일들을 커밋하면 하나의 버전이 된다. 즉, 이것이 최종버전이므로 unmodified 상태가 된다.

4. 이것을 원격에 올려서 다른 사람과 공유할지, 아직 로컬에서만 관리할지는 내 선택. 원격에 올려도 파일상태와는 관련 없음

5. 먼저 커밋했던 파일에 변경이 생기면 modified 상태

6. 새로운 파일을 만들면 1번과 같이 untracked 상태

7. modified, untracked상태는 스테이지에 올릴 수 있는 상태. (unmodified는 스테이지 못 올림. 정확히는 올릴 필요가 없지)

8. 둘 다 스테이지에 올리면 staged상태

9. 커밋하면 직전에 수정하고 새로 만든 파일까지 추가되어 snapshot으로 남아 새로운 버전이 된다.

10. 다시 모든 파일이 unmodified상태로 바뀜.

11. push 원격에 올려서 다른 사람과 공유

12. 원격저장소와 로컬저장소가 모두 최신버전으로 맞춰짐

13. 파일의 상태는 untracked, unmodified, modified, staged이다.