Git ?
: 공식 명칭은 분산 버전 관리 시스템 (VCS)으로 프로젝트 파일의 변경 사항을 추적하는 시스템이다
Git을 통해 프로젝트의 변경 사항을 기록하고, 특정 시점의 버전으로 언제든 돌아갈 수 있다
Git은 개인 혹은 팀 간의 프로젝트를 관리하는 데 가장 널리 사용되고 있는 툴이니 잘 알아두도록 하자VCS를 안한다면
1. 수정할 때 마다
최종
,최최종
,진짜_최종
,진짜진짜_최종
처럼 새로운 파일을 자꾸 만들게 된다
2. 파일을 수정하다가 실수해서 오류가 뜨는데 뭘 만졌는지 모르겠다..아
3. 이 파일 마지막으로 누가 수정한거야 ? (범인 찾기)
4. 협업할 때 USB에 넣어서 파일 공유하기
등등 생각만 해도 끔찍하다
: Git repository는 Git으로 관리하는 프로젝트 저장소로 두 가지 종류가 있다
1. Local repository - 본인의 컴퓨터에 저장된 로컬 버전의 프로젝트 저장소
2. Remote repository - 내 컴퓨터가 아닌 외부 (일반적으로 원격 서버) 버전의 프로젝트 저장소 (ex. Github)
git init
Git으로 프로젝트 관리를 시작하려면 원하는 디렉토리로 이동하여 명령어를 입력한다
해당 장소에 .git
디렉토리를 생성하고 해당 저장소에 대한 모든 변경사항을 추적/관리한다
git status
어떤 파일이 변경되었는지, 어떤 파일이 추가되었는지 등을 전부 보여준다
git add .
우리가 원하는 파일들을 staging area
로 추가하고 커밋을 남길 수 있게 해준다
.
은 모든 파일/폴더를 의미한다
.
이 아닌 파일 이름을 사용해서 특정 파일만 추가할 수 있다
git commit -m "Commit message"
특정 시간의 코드 스냅샷의 형태로 해당 repository의 커밋 기록에 남게된다
새 커밋을 남기려면 staging area
에 파일을 추가 한 다음 커밋을 남기는 프로세스를 반복해야 한다
git log
프로젝트의 모든 커밋 내역을 볼 수 있다
log
는 각 커밋에 대한 자세한 정보를 담고 있습니다. (작성자, hash 값, 날짜와 시간, 그리고 커밋 메세지)
git checkout <commit-hash>
위 명령어를 통해 특정 커밋 시점의 코드로 되돌아 갈 수 있다
: 독립적으로 어떤 작업을 진행하기 위한 개념이다
각각의 브랜치는 다른 브랜치의 영향을 받지 않기 때문에, 여러 작업을 동시에 진행할 수 있다
다수가 동시 작업을 할 때는
git branch <new-branch-name>
새로 만들어진 브랜치는 현재 프로젝트의 코드를 그대로 반영하여 생성된다
git checkout <branch-name>
프로젝트에 존재하는 모든 브랜치를 확인하고 싶다 ?
➡ git branch
git merge <branch-name>
A 라는 브랜치에서 작업한 내용을 B 라는 브랜치에 적용하고 싶을 때 사용
ex. 특정 브랜치에서 테스트까지 완료했다면 master 브랜치에 구현내용을 적용시킨다
git branch -d <branch-name>
GitHub ?
: Git repository를 위한 호스팅 플랫폼이다
GitHub를 사용해야 다른 개발자와 같은 프로젝트를 두고 협업하거나 내 코드를 공유할 수 있다
'New repository' 를 통해 repositiry를 생성하고 git push
명령어를 통해 로컬 Git repository 의 코드를 GitHub repository 로 업로드 해준다
git remote add origin https://github.com/<your-username>/<your-repo-name>.git
git push -u origin master
git push
명령어를 실행하면 GitHub 유저네임과 비밀번호를 입력하라는 prompt 가 뜬다
변경사항이 있으면 다시 push
를 해줘야 GitHub repo 가 업데이트 된다
git add .
git commit -m "Change greeting"
git push origin master
다른 연결 방법으로 GitHub repo 를 먼저 생성한 뒤 clone 을 받아 내 로컬환경에 다운로드 후 프로젝트를 시작할 수 있다
'Clone or download' 에서 repository 주소를 복사하고 git clone
명령어를 실행하면 된다
git clone <github-repo-link>
checkout
을 통해 push
하려는 브랜치로 이동하여 커밋, 푸시해주면 된다
git add .
git commit -m "message"
git push origin "branch_name"
브랜치를 push
하고 master
브랜치에 적용될 준비가 되었다면 Pull Request
를 통해 프로젝트 오너 (혹은 팀 리더) 에게 내가 작업한 브랜치의 작업내용을 master
브랜치에 반영해달라는 요청을 보낼 수 있다
Pull Request
에서는 해당 repository 를 열람할 수 있는 권한이 있는 개발자들이 작업내용에 대한 리뷰를 해주거나 변경 사항을 확인할 수 있다 (master
브랜치로 합쳐지기 전에 확인해야하기 때문)
모든 리뷰 내용이 반영된 후 master
브랜치와 충돌이 발생하지 않았다면, 해당 PR은 master
브랜치로 merge
될 준비가 완료된 것이다
만약에 충돌이 생겼다면 개발자가 직접 코드를 비교해 충돌을 해결하고 merge
를 마무리 해야한다
Pull Request
를 통해 master
브랜치를 업데이트하면 로컬 repository와 GitHub 에 있는 master
는 서로 다른 내용을 가지고 있게 된다
이 때 git pull
명령어를 통해 remote
의 최신화된 코드를 내 로컬 repo 에 반영할 수 있다
git pull origin master