개요
42와 Git
42서울을 들어오기 위한 라피신부터 이너서클뿐만 아니라 아우터에서도 과제를 제출하기 위해 간단하게 git을 이용한다. 클러스터 말고 다른 공간에서 과제를 하기 위해 각자의 개인 레포지터리에 파일을 저장해서 작업을 하기도 하고, 팀 과제 및 과제 외 프로젝트를 위해 우리는 git을 이용하는 경우도 있다.
과제 맨 마지막에 항상 보이는 이 문구!
굳이 Git를 배워야 할까?
하지만 아직도 git이 불편하고 복잡하다고 생각하거나, 굳이 과제를 하는데 git까지 이용을 해야하나라는 이유로 메일로 서로의 코드를 합치는 방법을 자주 사용한다. 이 또한 좋고 편한 방법이고 확실히 명백한 이유이다.
그래도 앞으로의 개발을 위해 git이랑 좀더 친해진다면 좋을 거 같아 간단한 git 명령어부터 대규모 프로젝트에 쓰이는 GitFlow 전략을 설명해볼 것이다. 이번 장에선 git에서의 기초적인 명령어와 개념을 공부하고 다음 장에는 이를 과제에 적용해보고 싶은 분들을 위해 팀과제에 맞는 GitFlow도 소개해 보이겠다.
본문
Git이란
git이란 버전 관리 시스템(Version Control System, 일명 VCS)의 하나이다.
하지만 단순히 버전 관리만을 담당하지 않고 추가적인 기능을 갖고 있다. 백업을 위해서 Github 서비스를 이용하거나, 다른 사람들과 협업을 하기 위한 도구로 사용한다.
그리고 Git를 좀더 편하고 직관적으로 사용하기 위해 다양한 프로그램이 있지만, 이 글에선 git의 기초가 되는 커맨드 라인 인터페이스를 다룰 예정이다.
Git과 Github의 차이점
이 둘은 정말 찰떡같은 궁합을 자랑하며 서로 떌 수 없는 관계이지만, 분명히 다른 도구이다.
Git은 위에서 말했듯 작업물의 버전이나 코드을 효율적으로 관리하는 도구이지만,
Github는 git을 이용하는 사람들을 위한 클라우드 저장소이며, 개발자들을 위한 커뮤니티 같은 공간이다. 즉 Git만으로는 로컬 단위에서만 작업물을 관리할 수 있지만, Github와 함께라면 온라인으로 작업물을 올려서 다른 사람들이 볼 수 있거나 수정할 수 있게 할 수 있다.
자주 사용하는 Git 명령어
! 명령어의 순서는 임의로 정렬되있음을 밝힙니다.
0. Git를 위한 기본 설정법
만약 git을 처음 접하거나 새로운 셋팅을 위해서 해야할 설정법으로, 혹시나 필요한 사람들을 위해 토글로 적어놓겠습니다.
기본 설정법
1. Clone
원격으로 Github에 있는 저장소를 복사하기 위한 명령어로, 평소에 42서울에서 과제를 제출하기 위해 과제마다 생성되는 레포지터리의 링크를 복사하기 위해 사용되는 명령어다.
하지만 이 명령어로 다른 사람들의 레포지터리를 복사하게 된다면 원격 저장소에 있는 파일도 같이 복사되는 걸 알 수 있다.
git clone [복사하려는 주소] [복사할 때 생성될 디렉터리의 이름]
Bash
복사
그리고 github에서 다른 사람의 레포지터리를 복사하려고 보면 독특한 링크들을 볼 수 있다.
위에 초록색 Code를 누르면 보이는 창
•
HTTPS : https://github.com/[USERNAME]/[REPOSITORY_NAME].git 의 구조로 구성되어 있으며 이 링크로 clone하게 된다면 github의 로그인 정보를 입력하게 요구한다. 하지만 대부분 git에 있는 저장소 기능으로 계정 정보를 알아서 넣어주기에 레포지터리의 권한 설정말 되어 있으면 자유롭게 사용이 가능하다.
•
SSH : git@github.com:[USERNAME]/[REPOSITORY_NAME].git 의 구조이며 우리가 제출해야 하는 과제의 레포지터리의 주소형식이다. 이 주소로 clone하면 SSH의 키를 요구한다. 즉 라피신에서 했던 SSH-GEN의 부분이 이 파트와 연관이 있다. 원격 저장소에 설정만 해주면 그때부터 레포지터리에서의 작업이 가능하다.
2. Add
수정한 파일을 스테이지하는 명령어로, 작업 트리에서 파일을 만들거나 수정했다면 스테이지에 수정한 파일을 추가한다. 스테이징은 간단하게 말하면 ‘인덱스에 등록’하는 것이다.
git add [추가하거나 수정하려는 파일 이름]
Bash
복사
3. Init
깃을 초기화하는 명령어로, 주로 작업 디렉터리 안에서 새로운 git을 생성하거나 다시 초기화를 할 때 사용한다. 이 명령어를 사용하면 주로 .git이라는 디렉터리가 생기고, 이 폴더를 지우면 git을 지우는 것과 똑같이 되니 조심하자!
4. Status
해당 git의 상태를 보여주는 명령어로, 여기서 말하는 상태는 파일이 스테이징 영역에 있는지 없는지, 어떤 상태인지를 구체적으로 알려준다.
5. commit
해당 버전에서 한번의 스테이징(Add 커맨드)가 있을 때 어떤 변경 사항이 있고 이 버전에 대해 코멘트를 다는 명령어. 가상 머신의 스냅샷을 찍는 듯한 기능으로, 주로 코멘트로는 어떤 작업을 했는지 작성하면 된다.
git commit -m "messege"
git commit -am "messege2"
#Add와 Commit를 동시에 가능한 명령어
#하지만 해당 파일이 한번이라도 커밋이 되어 있어야함!!
Bash
복사
6. push
먼저 지역 저장소의 커밋을 원격 저장소로 보내는 명령어
git push -u origin master
#지역 저장소에서 원격 저장소의 master branch로 푸시!
#-u : 지역 저장소의 브랜치를 원격 저장소의 master 브랜치와 연결하기 위한 명령어
Bash
복사
7. pull
원격 저장소에 있는 파일을 지역 저장소로 내려받는 명령어
git pull origin master
#origin의 내용을 master 브랜치로 가져온다는 의미
Bash
복사
8. branch
1) 브랜치란?
영어 단어로 ‘나뭇가지’라는 의미를 갖고 있는 것처럼, 여러 갈래로 퍼지는 데이터 흐름을 가리키는 말로, 단순히 해당 커밋을 가리키는 포인터와 비슷하다.
처음에 git을 생성하면 master 브랜치로 설정되어 있다.
git branch #git에 있는 브랜치 목록 확인
git branch [만들려는 브랜치] #브랜치 생성
git branch -d [지울려는 브랜치] #브랜치 삭제
Bash
복사
9. checkout
1) 특정 브랜치로 이동
특정한 브랜치로 이동하는 명령어
git checkout [브랜치 이름]
git checkout -b [브랜치 이름] #해당 브랜치를 생성 후 이동
git checkout -b [만들 브랜치 이름] [기존 브랜치 이름] #특정 브랜치의 파생 브랜치를 만들고 이동
Bash
복사
2) 작업 내용 되돌리기
작업 트리에서 수정한 파일을 되돌리는 명령어로, 이 명령어를 쓰면 현재 디렉터리(작업트리)에서 작성한 내용은 지워지고 가장 최근의 상태로 돌아간다. 되돌린 내용은 다시 복구가 불가능하니 조심하자.
git checkout -- [되돌릴 파일 이름]
git checkout . #모든 변경 사항을 취소
Bash
복사
10. merge
현재 있는 브랜치에 원하는 커밋을 병합하기 위한 명령어로, 지정한 커밋은 현재 HEAD를 가리키는 브랜치에 넣어진다.
이런 방식으로 A 커밋에 있는 master 브랜치를 hotfix 브랜치에 있는 B 커밋으로 옮기는 작업으로, 위 예제는 기반하는 브랜치 안에서의 합병으로 Fast Forward 라고 불리곤 한다.
merge의 활용 방법은 무궁무진하고 다른 사람과의 협업을 위해선 반드시 익혀야 한다.
특히 조심해야할 부분은 다른 브랜치에서 같은 부분을 고치고 이를 merge하려고 한다면 충돌이 날 수 밖에 없다. 이 경우에는 파일에 충돌이 난 지점을 표시해 주는데 이 부분을 고치고 다시 merge를 하면 된다.
<<<<<<< HEAD:index.html
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
please contact us at support@github.com
</div>
>>>>>>> iss53:index.html
#====== 기준으로
#위에는 현재 위치하는 브랜치의 내용이고
#아래는 merge하려는 브랜치의 내용이다.
#둘 중 맞는 내용을 택해서 고치고 다시 시도해보자.
Bash
복사
부록
Git을 완전히 깊게 이해하기! (계속 작성중)
이 파트는 간단하게 git을 사용하는 것에서 벗어나 좀더 심도 깊은 이해를 위한 파트입니다.
스테이지와 커밋
참고자료
•
Do it! 지옥에서 온 문서 관리자 깃 & 깃허브