2023.11.14 - [프로그래밍/General Development Skills] - Git이란 무엇인가? - 코드 형상관리를 위한 첫걸음
Git이란 무엇인가? - 코드 형상관리를 위한 첫걸음
2023.11.14 - [프로그래밍의 역사] - Git 이전에는 어떻게 코드를 관리했을까? - 시대를 평정한 Git의 등장 Git 이전에는 어떻게 코드를 관리했을까? - 시대를 평정한 Git의 등장 Git은 프로그래머라면 빼
code-mark.tistory.com
git을 사용하는 이유
- 코드 백업
- 코드 형상 관리
- 코드 협업 관리
등등 Git을 사용하면 좋은 이점은 사용하지 않았을 때 보다야 훨씬 많다. 이전에도 포스팅했지만 소프트웨어의 규모가 커지면서 git은 소프트웨어 개발의 필수불가결한 존재가 되었다. git을 사용해야 되는 이유는 굳이 설명하지 않아도 대부분 알 것이다.
git은 분산 저장소이다. 그러므로 git convention이 필요하다.
git을 대충 배워서는 안 되는 이유는 분산 저장소이기 때문이다. 많은 인터넷 강의나 블로그 글들을 보면서 git을 배우려는 사람들의 수요에 맞게 'git을 어떻게 사용하는가'에 대해서 초점이 맞춰져 있다. 물론 그 정도만 해도 충분히 git을 활용하고 회사에서 일을 하는데 전혀 문제가 없을 수는 있다. 그럼에도 불과하고 개발자는 좀 더 자세히 배울수록 만일 발생할 문제에 대해서 예측하고 해결할 수 있게 된다. 나아가 전에 없던 새로운 시스템을 제안할 수 있다. 그리고 새로운 시스템까지는 아니더라도 git convention 정도는 제안할 수 있으리라.
git은 분산저장소이고 단순히 명령어만 외워서 사용하기에는 사용하다 보면 이슈에 맞닥뜨리기 쉽다. 이럴 때 사전에 문제를 예방하고 관리하기 위해서 git convention이 매우 중요한데 git의 원리를 알고 git convention을 제안할 수 있는 개발자가 되면 좋을 것이다.
git은 지정한 디렉터리의 상태를 추적한다.
git을 사용하려면 git을 설치하고 이미 생성되어 있는 git repository를 이용하여 clone을 받아서 로컬에 repository를 생성을 하거나 ‘git init’을 통해서 로컬에 repository를 생성해야 한다.
git repository를 로컬에 생성하였다면 git은 snapshot(commit이 기준)을 통해서 현재 상태의 디렉터리(하위 디렉터리포함)가 변경되었는지 확인한다. 이 과정을 diff라고 한다.
git은 파일과 디렉터리의 상태, 커밋 정보 등 모든 객체에 대해 SHA-1 해시를 사용하여 유니크한 40자리의 체크섬(해시값)을 생성한다. 이 해시는 객체의 내용에 기반하여 계산되므로, 파일이나 디렉터리의 내용이 조금이라도 변경되면 해시 값도 달라진다. 이를 통해 Git은 데이터의 무결성을 보장하고, 변경 사항을 정확하게 추적할 수 있다.
버전의 기록은 commit으로 하지만 버전 관리는 HEAD가 한다.
엄밀히 말하면 해당 중제목이 틀렸을 수 있다. 정확히 버전 관리는 commit과 HEAD가 합쳐져야 가능하기 때문이다. 하지만 우리는 commit은 단순히 데이터를 기록한다고 생각하고 HEAD가 버전관리를 한다고 생각해도 무방할 것 같다. 어차피 우리가 rebase를 하던 reset을 하던 또는 브랜치를 생성하던 모두 HEAD를 옮기는 작업이다.
HEAD는 현재 작업 중인 브랜치를 가리키는 것을 뜻한다. HEAD를 뒤로 옮기면 commit이 삭제가 될 수도 있다. 이때 commit에 반영했던 변경사항을 버리거나 남길 수 있다. 변경 사항을 버리거나, commit을 합치거나(변경 사항은 유지한 채 HEAD만 뒤로 되돌림) 할 수 있다. 여기서 주의할 점은 commit이 이미 다른 저장소에 push가 되어 있다면 commit을 지우는 일에는 매우 조심해야 될 일이라는 것이다. 다른 사람이 해당 commit을 받아서 작업을 하고 있다면 충돌이 날 수 있다.
결국은 commit과 HEAD 뿐이다.
결국에 git은 어떻게 commit을 할 것이며 이러한 commit에 문제가 있거나 분기(branch)를 해야 될때 어떻게 HEAD를 옮길지 어떻게 commit들을 문제없이 합칠지에 관한 것일 뿐이다. git의 수많은 명령어와 git-flow 등 사용 방법은 단지 응용일 뿐인 것이다.
git의 사용을 심화해서 하다보면 매우 복잡하게 느낄 수 있다. 필자도 처음 git을 접했을 때는 충돌도 많이 일으켰고 매우 복잡하다고 느꼈다. 이제 와서 생각을 해보면 git에 대한 제대로 된 이해가 없이 사용을 하다 보니 별것 아닌 문제도 쩔쩔매거나 문제를 일으켰던 것 같다.
'프로그래밍 > General Development Skills' 카테고리의 다른 글
cron expression 스케쥴 프로그래밍 (0) | 2024.03.22 |
---|---|
오~~ Auth~~ OAuth - 너네 API 쩔더라. (0) | 2024.03.22 |
Git 이전에는 어떻게 코드를 관리했을까? - 시대를 평정한 Git의 등장 (2) | 2023.11.14 |
Git이란 무엇인가? - 코드 형상관리를 위한 첫걸음 (1) | 2023.11.14 |