-
알 수 있는 것
- Git의 기본적인 내용과 사용법이 있다. 쉽고 필수적인 내용들을 순서대로 적었다.
- Git으로 원격 레포지토리에 업로드 할 수 있다. 원격 레포지토리로써 Github를 사용한다.
- Git을 처음 사용하는 사람들에게 유용하다.
Git을 사용하려는 이유
- Git을 사용하면 버전 관리가 쉬워진다는 말이 잘 와닿지 않았는데, 다음과 같은 PPT를 보고 알게 되었다.
- 출처: Git 더하기 GitHub <http://www.slideshare.net/ssusercef361/git-github-62006866>
- Git을 사용하면 소스 코드에서 무엇이 변경 됐는지, 누가, 언제, 왜 바꾸었는지, 복구는 어떻게 하는지 등을 쉽게 알 수 있다.
- Git과 같은 버전관리시스템 활용은 개발자라면 필수 덕목 중 하나가 되었다.
이 글을 쓴 후
- 해보니 정말 쉽고 재밌으며, 이것을 왜 이제야 알게 되었나 아쉽기까지 하다.
Git
- 분산 버전 관리 시스템으로, 리누스 토발즈가 개발했다.
- 프로그램을 개발할 때 매우 유용하며 대규모 프로젝트에서 협업 시 특히 유용하다.
GitHub
- Git 저장소 호스팅 서비스. Git으로 Github를 원격 저장소로써 활용할 수 있다.
- 오픈소스 소프트웨어 개발 관리 웹 사이트로 프로그래밍 협업 기능을 제공한다.
- 유명하고 다양한 오픈소스 프로젝트들이 이 사이트에 소스를 다 공개해놔서, 오픈소스 소프트웨어의 허브라고도 불린다.
- Github는 프로그램 개발 히스토리가 남으므로, 많은 개발자들이 포트폴리오로써 활용하기도 한다.
- Github 외에도 유명한 git hosting 사이트들.
- sourceforge
- codebase
- Bitbucket
Git의 필수 개념
- Git의 세가지 상태
- Working Directory
- 현재 우리가 작업하는 영역으로, 실제 파일들이 위치한다.
- 프로젝트의 특정 버전을 checkout하면 이 영역에 위치하게 된다.
- add하면 이 영역의 파일들이 staging area로 이동한다.
- Staging Area = Index
- 이 영역의 파일을 commit하면 Git Directory(로컬 저장소)로 이동된다.
- Git Directory = Repository = 로컬 저장소
- Git으로 관리되는 프로젝트 정보가 저장되는 영역이다.
- git init 명령어를 통해 초기화하거나, 다른 프로젝트 저장소를 clone하면 생성된다.
Git을 통한 작업순서
- working directory에서 파일을 수정한다. 소스코드파일에 코드를 추가하거나 변경하는 일들이 된다.
- working directory에서 변경된 파일을 staging area에 추가한다.
- 다시 말하면, commit 할 snapshot을 생성하는 것이 된다.
- staging area의 파일을 commit하면 git directory에 영구적으로 저장할 수 있다.
파일의 상태
- 파일의 네가지 상태
- untracked
- Git이 파일의 변경을 추적하지 않는 상태
- unmodified
- 추적 중인 파일이 수정되지 않은 상태
- modified
- 추적 중인 파일이 수정된 상태
- staged
- staging area에 추가된 상태
- 파일의 라이프사이클
Git 실습 시작하기
- git 설치하기
- $ sudo apt-get install git
- git 저장소 생성
- $ git init
- .git directory가 생성된다.
- 마침표가 붙은 파일은 숨겨진 파일, hidden file이다!
- 리눅스, 유닉스에서는 파일명 앞에 점을 하나 찍어 파일을 숨긴다.
- 그래서 ls로 디렉토리를 볼 때 -a옵션을 붙이면, 숨겨진 파일도 볼 수 있다.
- 사용자이름과 이메일 설정
- $ git config user.name "Night Good"
- $ git config user.email "goodnight@good.com"
- commit을 할때마다 설정된 사용자 이름과 이메일 정보를 사용한다. 이름, 이메일을 등록한다.
- .gitignore 파일추가
- .gitignore에 적용된 패턴에 해당하는 파일을 git을 통해 추적하지 않는다.
- node앱을 작성할 때, node_modules폴더까지 다 추적하고 원격 레포지터리에 추가하면 시간과 공간이 낭비이므로 .gitignore에 추가한다.
- staging area에 추가하기
- $ git add .
- 현재 디렉토리 하위의 모든 파일을 staging area로 추가한다.
- $ git add <특정 파일 이름>
- 특정 파일을 staging area로 추가한다.
- $ git add -A
- 모든 변경된 파일을 추가함
- commit하기
- $ git commit -m "[메시지]"
- commit 시 메시지가 꼭 포함되어야 한다. 수정 후 확정하여 저장할 것이므로, 설명이 필요하다.
- 파일 상태 확인하기
- $ git status
- commit 로그 확인하기
- $ git log
branch 활용해보기
- 소스코드 생성(임시로 code.txt라 정함)
- git status 확인
- git add 하기
- 모든 파일들을 staging area에 추가
- git commit하기
- .git directory에 추가됨
- commit 로그 확인
branch를 활용하여 code 수정하기
- branch 생성하기
- $ git checkout -b [branch이름]
- abranch를 생성하면서 checkout함
- checkout이란 working directory로 가져오는 것
- git branch로 branch목록과 현재의 branch 확인
- *표시로 현재의 branch가 금방 만든 abranch임을 알 수 있다. checkout했기 때문이다.
- code수정
- 변경된 내용 확인하기
- $ git diff
- $ git diff [원래 branch] [비교할 branch]
- git 확인하기.
- git add로 staging area에 추가
- git commit하여 git directory에 추가
- commit 되었으니, working directory가 비워짐!
- git log로 commit로그 확인하기
- 특정 branch로 checkout하기
- $ git checkout [checkout할 branch]
- master branch로 checkout
- *표시가 master에 있다.
- 여기서 code를 확인하면
abranch에서 code를 변경했던 부분이 보이지 않는다.
즉, master branch에서 code는 변경하기 전임을 알 수 있다.
- branch 합치기
- merge를 적용할 branch로 이동checkout하기
- $ git checkout <이동할 branch>
- merge 실행
- $ git merge <수정된 branch>
- 현재의 branch에 수정된 branch를 가져와 합친다.
- 예제에서 abranch를 master로 merge할 것이므로, master로 checkout한 후, abranch를 merge하겠다.
- code를 보면
- 수정된 code가 master branch에 적용되었다.
- branch 삭제하기
- 더 이상 특정 branch를 사용하지 않는다면, 삭제할 수 있다.
- $ git branch -d <삭제할 branch>
GitHub에서 원격 저장소에 업로드하기.
- github로 내 계정으로 가서 new repository생성하기
- repository가 생성되고, repository의 URL이 생성되었다.
- https://github.com/<아이디>/<repository이름>.git
- 원격 repository 설정(add)하기
- $ git remote add <레포지토리 이름> <github의 repository URL>
- $ git remote -v로 원격 repository 등록 확인
- 원격 repository에 로컬의 git directory의 파일들을 업로드(push)
- $ git push <remote> <branch>
- origin이라는 원격 repository에 로컬의 master branch를 push하겠다.
- github에 가보면
- 로컬 작업 내용이 github의 repository에 업로드 된 것을 확인할 수 있다.