오늘 가볍게 끄적여볼 이야기는 git에 대한 이야긴데, 아마 개발자라면 모르는 사람이 없을 만큼 유명한 협업툴이고, 어떤 이들은 git을 통해 블로그를 운영하거나, 또 자신이 쓴 코드들을 저장해두는 저장소로 사용하기도 한다. 하지만 생각보다 이 git 의 개념이나 사용방법 같은 것들이 상당히 추상적이고, 머릿속에 붕붕 떠 다니는 느낌으로 막연하게 사용하는 사람들도 꽤나 되기 때문에, 이 git에 대한 정리를 하고 넘어가려고 한다. (Github은 나중에 기회가 되면 건드려보자.)
1. 협업의 개념
우리는 개발이라는 과정을 할 때 물론 혼자할 때도 있겠지만, 대부분의 사람들이 협업을 통해 하나의 프로그램을 만들어 나간다. 헌데 이 협업이라는게 상당히 골치가 아프다. 학원에서 git이라는 걸 알려주지 않았다면 아마 경험했겠지만, 어쩌다 보니 같은 프로젝트 파일을 공유하려면 상당히 골치아프다거나, 동일한 부분을 개발해 헛수고를 한다거나, 항상 누가 어딜 업데이트 했는지 모르니 구두로 의사소통을 해야한다거나, 심지어 그게 두명 정도가 같이 하는게 아니라 4명 5명 이렇게 커져가면 그건 조금 심각한 문제가 된다.
이런 문제를 해결하기 위해 등장한게 협업 도구들인데, 뭐 예전엔 SVN 이런거 쓰다가, git이 나오면서 git이 대세가 되었다. 라는 역사 정도만 알고 있으면 될 것 같다.
2. git 이란?
git은 앞서 말했듯 본질적인 목적은 협업이다. 여러 사람이 하나의 프로젝트를 개발할 때, 그 안에서 발생하는 문제를 해결하기 위한 솔루션이라고 보면 되겠다. (오픈소스 OS의 최강자 linux의 주인장이신 리누스 토르발스씨가 만들어낸 역작이다.)
근데 이 git에서 고안해낸 개념이라는게 상당히 추상적이고 조금 이해가 안가는 감이 없지 않아 있다. 그래도 실무에서 사용하게 되는 것들은 몇 가지 안될 뿐더러 그게 이 글을 쓰는 목적이니, 어쨌든 차근차근 살펴보도록 하자.
<git 과 branch>
git을 이해하는데 필수적이고 가장 핵심이라고 볼 수 있는 개념이 branch이다.
branch를 한국말로 번역하면 나뭇가지 라는 의미가 되는데, 하나의 같은 줄기에서부터 여러갈래로 뻗어나가는 그림을 생각하면 이 git을 이해하기가 상당히 쉽다. 최초에 하나의 git 레포지토리를 파게 되면, Master라는 branch가 만들어지게 되는데, 이 Master라는 branch를 나무의 줄기라고 생각하면 된다. 그럼 하나의 줄기가 생겼으니 각 개발자들은 그 줄기에서 자신만의 나뭇가지를 만들어나가고, 그 나뭇가지를 나중에 줄기에다가 갖다 붙여주면 다른 사람들도 그 줄기를 보고 있으니 내 작업물을 공유받을 수 있는 것이다.
원래 용도와 다르게 사용하는거긴 하다만 어쨌든 이 그림이 git의 branch 개념을 머릿속에 그리기가 쉽다고 보여서 가져와봤다. Master라는 메인 흐름이 하나 있고, 필요에 따라 그 Master의 커밋시점 한 부분에서 branch를 만들고 그 branch에서 작업을 이어나간 다음, 나중에 다시 Master에다가 이어 붙여주는 느낌으로 생각하면 좋겠다.
<Commit>
Commit 은 git에서 "확정" 이라는 개념이라고 보면 된다. 위의 그림을 살펴보면 노드가 연결된 모양인데, 저 노드하나하나가 Commit이다. Commit은 지금 현재까지 작업하여 반영한 내용을 확정짓는다. 라는 의미를 띄고, 만일 나뭇가지처럼 뻗어나온 branch안에서 Master라는 줄기에 반영을 하고자 하여 반영을 할때 이 Commit한 내역들이 반영된다고 생각하면 되겠다. 뭐 게임에 비유하자면 세이브포인트랑 살짝 비슷하다고 볼 수 있을 것 같다.
<git 과 git Command>
자 앞에서 이제 git에서 알아야 할 개념 중 가장 필수적인 요소인 branch와 Commit라는 개념을 알아봤고, git의 사용 이유는 사실 저게 다라서, 저걸 하는 방법에 대해서만 알아보면 끝이다.
일단 이 git도 뭐 인텔리제이 같은 IDE 환경에서는 아주 아름답게 GUI를 사용할 수 있지만 모두가 그런 IDE를 사용하고 있지 않기 때문에 기본적으론 CLI를 통해 명령을 하게 된다. 때문에 우리가 뭐 npm, yarn 사용하듯이, git으로 시작하는 커맨드를 작성해주면 되겠다.
1. git add
$ git add .
지금 현재 작업한 내용을 커밋할 리스트에 등록하겠다는 명령이다. 이는 커밋의 전 단계이며, add라는 명령을 해야만 커밋할 내역이 생긴다고 생각해주면 되겠다. add 뒤에 점하나를 찍어주면 지금 현재 변경사항 전체를 커밋할 리스트에 추가하겠다는 의미가 된다.
2. git commit
$ git commit -m 'this is commmit message'
위의 그림과 설명에서 알 수 있듯 노드 하나를 생성하여 지금까지 변경한 변경사항을 확정짓는 command라고 생각하면 되겠다. commit을 한 내역들은 전부 Master라는 줄기에 반영될 예정인 것이라고 생각하면 되고, Master에서 이뤄진 commit이라면 따로 나뭇가지를 합칠 것 없이 Master 안에서 세이브포인트를 하나 만들었다고 생각하면 되겠다.
기본적으로 저 git commit이라는걸 git bash안에서 입력하게 되면 커밋메세지를 입력할 수 있도록 editor가 활성화 되는데, 그 과정 귀찮다 하면 git commit -m '커밋메세지' 이런 식으로 간소하게 입력할 수 있는 방법도 있다.
3. git branch 브랜치 이름
$ git branch mybranch
$ git branch -D mybranch
이건 나뭇가지 하나 만들겠다. 라는 의미로 생각하면 된다. 즉 Master와 분리된 작업환경을 만들겠다 라는 뜻인데, 이를 통해 branch를 만들고 코드를 작성하면 내가 뭔짓거릴 하든 Master에 반영되지 않으니 안심하고 그냥 삽질하면 된다.
만일 삭제하고 싶으면 git branch 뒤에 -D + 삭제할 브랜치 이름 을 입력해주면 된다.
4. git checkout 브랜치이름
$ git checkout mybranch
checkout은 두가지 용도가 있는데 일단 흔히 사용하는 방법은 branch 전환이다. 두번째 방법은 딱히 쓸 일 없으니 생략할건데 그냥 설명만 하자면 특정 커밋시점으로 이동하는 거라고 생각하면 된다. 하지만 일반적으론 그냥 브랜치전환할때만 사용한다. 예를 들면 내가 새로운 브랜치를 만들었는데 그 브랜치에서 작업을 하려면 Master브랜치에서 해당 브랜치로 전환을 해줘야할 거다. 그럴때 쓰는게 이 checkout이라고 생각하면 된다.
5. git merge 브랜치이름
$ git merge mybranch
이것도 흔히 사용되는 command 인데, branch에서 실컷 개발하고 이 개발한 내용을 Master에 반영해야하는 순간이 오면 사용한다. 여기서 중요한건 merge하는 주체가 애매모호하다보니 많이 헷갈리는데, 내가 Master에 내가 개발한 mybranch의 내용을 merge하고 싶다면, 지금 checkout 되어있는 branch는 Master 브랜치여야한다. 그러니까 즉, 개발한 내용을 받아들이는 브랜치가 지금 현재 브랜치로 세팅 되어있어야한다는 뜻이다. mybranch에 있는 상황에서 git merge master이렇게 해버리면 master의 내용을 지금 내 branch로 가져온다는 내용이니 이 부분 이해에 주의를 해야한다. 그렇다면 master에 다른 사람이 개발한 코드가 업데이트 되었을때 지금 현재 내가 개발중인 branch에 그내용을 반영해두고 싶다. 이런 상황이면, git merge master를 해주는게 맞다는 뜻이 된다.
6. git remote add repository이름 원격repository주소
$ git remote add origin https://github.com/xxx/xxx/asdfasdfsadf
이거는 github같은 원격 레포지토리에 저장하기 전에 하게 되는 command인데, 지금 내 로컬에 저장된 소스파일들을 연결해두는거라고 보면 된다. 이게 되어있어야지만 이후 말할 push같은 것들이 가능하기때문에 잘 기억해두도록 하자. repository이름이라고 되어있는건 alias, 즉 별명이라서 내가 하고 싶은대로 써도 상관이 없으나, 뒤의 주소는 내가 연결하고싶은 github repository로 명확히 해야한다.
7. git push origin 브랜치이름
$ git push origin master
원격 레포지토리에 지금 로컬에서 커밋, 머지한 내용들을 반영하고 싶을 때 사용하는 command이다.
이렇게 하면 이제 원격 레포지토리에 저장이 되는거니 github를 예로 들면 github에서 public하게 공개 되어있는 레포지토리이기만 하면 전세계 모든 github이용자들이 내 코드를 볼 수 있게 되는거다.
그리고, 만일 그냥 지금 내 브랜치와 푸시하고 싶은 원격 레포지토리의 브랜치의 이름이 같으면 그냥 git push만 해줘도된다.
대충 이정도 하면 어지간하면 일하면서 쓰게 될 건 다 본거라고 생각할 수 있다. 물론 이 git도 기능이 상당히 많기 때문에 막 전문적으로 사용하면 당연히 좋겠지만, 애초에 그 모든 기능을 사용할 일도 잘 없을 뿐더러, 사용한다고 해도 커밋 잘못한거 되돌린다거나, 뭐 그정도일거고, git을 짱짱 잘다루는 것 말고도 다른 부분에서 공부 할 것은 얼마든지 많기 때문에 일단 초보개발자라면 얕고 넓게 알아간다는 생각으로 자연스레 사용할 수 있을 정도만 익혀두는게 좋지 않을까 한다.
'Dev > Basic' 카테고리의 다른 글
[Front Basic] CSS (0) | 2023.06.15 |
---|---|
[Front Basic] HTML (0) | 2023.06.14 |
[HTTP] HTTP (0) | 2023.04.27 |
[REST] REST API (0) | 2023.04.27 |
[REST] REST (0) | 2023.04.26 |