**깃(Git)**은 프로그램의 소스 코드 관리를 위한 분산 버전 관리 시스템 입니다. 소스 코드를 효율적으로 관리하기 위해 사용하며, 말그대로 버전을 관리하는데에 사용됩니다. 코드의 버전을 관리함으로써 예전 버전으로 되돌아가는 것이 편하고, 협업을 할 때 서로 같은 코드를 공유할 수 있게 도와줍니다. 또한, 현재 서비스 중인 branch와 개발에 사용되는 branch를 나눠 안정적인 버전과 실험적인 버전을 따로 둘 수 있으므로 서비스에 문제가 생길 위험도 방지할 수 있습니다. Git은 CLI(Command Line Interface)나 GUI(Graphical User Interface)를 통해 사용할 수 있습니다. 이번 코스에서는 CLI를 이용하여 깃을 사용합니다. 자세한 내용은 이 링크에 있는 공식문서를 읽어보세요.
보통 Git과 함께 프로젝트를 진행할 때는 깃허브(GitHub)나 빗버킷(Bitbucket)과 같은 클라우드 시스템을 이용합니다. 이러한 플랫폼들의 온라인 저장소를 이용하면 언제 어디서나 원하는 프로젝트에 접근할 수 있습니다. 이번 코스에서는 깃허브 이용할 것 입니다.
먼저 Fork를 통해 코드를 복제합니다. Fork는 팀의 저장소(repository, 줄여서 레포라고 함)에 업로드 되어있는 코드를 자신의 레포로 복제하여 그 위에 자신의 코드를 덧댈 수 있게 도와줍니다. 이때 보통 팀의 레포를 upstream 이라고 하며, 자신의 레포를 origin 이라고 합니다. upstream에 코드를 바로 업로드 하는 것은 협업에 좋지 않으므로 origin에 먼저 업로드를 한 후, Pull Request(줄여서 PR이라고 함)를 합니다. 그러면 팀에서 회의를 통해 PR을 수용하게 되고, 비로소 upstream에 자신의 코드가 올라가게 되는 것 입니다.
포크는 다른 사용자의 레포지토리(저장소)에 있는 코드를 내 레포지토리로 옮기는 작업입니다.
Fork를 하고자 하는 레포에 접속한 후, 우측 상단의 Fork를 클릭합니다.
그러면 위와 같은 화면이 나오는데, 내 레포지토리로 포크가 진행중이라는 뜻입니다.
포크가 완료되면 화면이 전환되고, 좌측 상단에보면 내이름/레포지토리이름으로 바뀌어 있는 것을 확인할 수 있습니다. 처음 포크를 진행했을 때 사진과 비교해보면 내이름 부분이 바뀌어 있는 것을 확인할 수 있습니다.(메인리포 -> 내계정이름)
Git을 설치하고 나서 가장 먼저 해야 하는 것은 사용자 이름과 이메일 주소를 설정하는 것 입니다. Git은 커밋할 때마다 이 정보를 사용합니다.
git config --global user.name "John Doe" git config --global user.email johndoe@example.com
만약 프로젝트마다 다른 이름과 이메일 주소를 사용하고 싶으면 --global 옵션을 빼고 명령을 실행해야 합니다.
설정 확인을 확인하고 싶을 때는 다음 명령어를 입력하면 됩니다.
git config --list
먼저 Fork한 레포로 이동합니다. Clone or download를 클릭하면 clone with HTTPS라는 창이 나온것을 확인할 수 있습니다.
레포지토리에서 내 컴퓨터로 파일을 받는 방법은 2가지가 있는데, 먼저는 명렁프롬프트에서 명령어를 사용하는 방법과 그냥 알집으로 내려받아서 사용하는 방법이 있습니다. 우리는 조금 프로그래머다운? 방식을 사용해보기 위해 명령프롬프트를 이용해보도록 하겠습니다(윈도우:cmd, 맥:terminal)
터미널에서 코드를 다운받을 폴더로 이동합니다. 폴더를 이동할 때는 cd 명령어를 사용하고, 폴더를 만들 때는 mkdir 명령어를 사용합니다.
그 다음 git clone 명령어를 이용해 원하는 레포의 코드를 다운 받습니다.
git clone https://github.com/<username>/underscore.git
다운이 완료되면 다운 받은 폴더로 이동한 후, 다음 코드를 통해 remote목록을 볼 수 있습니다. remote는 레포의 주소들을 모아놓은 주소록이라고 생각하면 편합니다.
cd underscore git remote -v --- 결과물 --- origin https://github.com/Leebonggu/underscore.git (fetch) origin https://github.com/Leebonggu/underscore.git (push)
다음 코드를 이용해 원본 레포(메인리포)의 주소를 remote목록에 추가합시다. 원본 레포지토리의 주소를 확인하려면 포크를 받은 사용자의 레포지토리에서 확인할 수 있습니다.
git remote add upstream https://github.com/<메인리포>/underscore.git
다시 remote목록을 확인해 봅니다.
git remote -v --- 결과물 --- origin https://github.com/Leebonggu/underscore.git (fetch) origin https://github.com/Leebonggu/underscore.git (push) upstream https://github.com/<메인리포>/underscore.git (fetch) upstream https://github.com/<메인리포>/underscore.git (push)
먼저 수정한 코드를 다음 명령어를 통해 확인합니다.
git status
현재 작업 폴더에 수정한 내용이 있다면 git status 입력 시 빨간 글씨로 수정한 내용이 표시될 것입니다.
그 다음 업로드하는 과정은 add, commit, push 총 3가지로 구분됩니다.
add는 새로운 파일을 추적(Track)하거나 추적중인 파일(Tracked File)인 경우 Stage 합니다. add를 택배로 비유하면, 박스에 물건을 넣는 행동입니다.
commit은 수정한 파일들을 기록하는 역할을 합니다. 기록하는 역할이기 때문에 커밋 메시지를 남겨줘야 합니다. commit을 택배로 비유하면, 박스에 테이프를 붙이고 어떤 물건인지 설명을 붙여 놓는 행동입니다.
push는 commit들을 레포에 반영하는 역할을 합니다. push하지 않은 commit들이 모두 원하는 레포에 올라갑니다. push를 택배로 비유하면, 받는 사람 주소를 적고 그 주소에 택배를 보내는 행동입니다.
add는 다음과 같이 사용합니다.
git add . 또는 git add 파일이름1or폴더이름1 파일이름2or폴더이름2 ...
commit은 다음과 같이 사용합니다.
git commit -m '커밋 메시지'
push는 다음과 같이 사용합니다.
git push 올릴레포주소 올릴브랜치
최종적인 예제 코드를 보면 다음과 같습니다.
git add . git commit -m 'underbar all done' git push origin master