git clone
이라는 명령어를 이용해야하고, clone은 복제를 의미하고 이는 remote 환경에 있는 소스를 복제한다는 의미이다.push
해야한다. 내 로컬에 있는 소스 수정내용을 중앙서버로 밀어넣는다는 의미이다.pull
해야한다.clone
은 처음 소스를 다운받을때만 사용하고, 이미 다운 받은 소스의 변동사항을 다운받으려면 pull
해야한다.깃을 버전 관리를 할 때 3개의 상태중 하나의 상태에 있게 된다.
commit
되지 않은 상태의 파일이다.commit
될거라고 mark 해놓은 상태이다.commit
하기전에 중간상태를 저장하고 혹시라도 잘못 수정되었을 경우 다시 되돌리도록 임시저장하는 기능이다.commit
된다는 뜻이다.commit
이 되었을 때 비로소 push
를 할 수 있는 준비가 되었다고 볼 수 있다.clone
한다. (소스코드를 다운로드 받는 다는 의미이며, 전문언어로, "git repository를 checkout한다" 라고 표현한다.)stage
한다.commit
한다.git init
프로젝트를 git repository를 만들기 위해 사용하는 명령어. 최초의 프로젝트를 생성한다고 생각하면 좋다. 여기서 프로젝트라 함은 개발하고자 하는 소스코드들이 있는 디렉토리를 말한다. git init
을 해서 git repo로 만들어야 git으로 버전 관리가 시작된다.
git add
modified, 즉 수정된 파일을 staged된 상태로 옮기고자 할 때 사용하는 명령어이다. 무언가 수정하게 되면 그것에 대해서 중간저장을 하기 위해서 commit
을 하기 전에 git add
을 해야한다. 또한, git repo에 새로 추가된 파일들은 staged 상태로 옮길때도 사용된다. 새로 추가된 파일들을 'untracked' 파일이라고 하는데, git 에서는 이들도 수정사항으로 본다.
git commit
add된 파일들은 하나의 commit으로 만들어서 commit 메세지를 부여하고, commit 하는 작업을 말한다.
git diff
modified 상태에서만 결과물이 나오는데, 말그대로 수정사항들을 보여준다.
git status
현재 git repository 내부안에 있는 상태를 보여준다. modified인지 staged인지 알려준다.
git log
commit 내역들을 보여준다. commit history라고도 한다. 이제까지 commit한 내역들을 모두 볼 수 있는데, 보기가 쉽지 않아서 tig 같은 툴을 사용하면 더 편리하다.
git rm
git에 등록된 파일을 삭제하는데 사용한다.
git mv
git에 있는 파일을 이동시킬 때 사용한다. 주로 rename 할 때 사용된다.
git branch
branch를 생성하고 삭제하고 관리하는 명령어이다.
git checkout
어떤 branch에서 checkout 할 때 사용되는 명령어 이다. branch를 이동할 때 사용한다.
branch는 가지이다.
git은 commit
내역을 tree 형태로 관리한다. 기준이 되는 history인 master는 기본적으로 우리가 이용하는 소스 가지이다. 우리가 뭔가 수정을 하고 싶을 때는 master에서 하지 않고, branch를 새로 만들어서 작업한다. 이유는 기존에 있는 소스가 영향을 받지 않고 안전하게 관리하기 위해서다. 또한, 여러 사람이 동시에 master에 수정을 하게 되면 변동사항에 영향을 받아서 문제가 생긴다.
이렇게 생성하는 branch를 feature branch 혹은 기능 브랜치라고 한다. 우리가 branch를 생성하게 되면 branch의 명칭은 feature/ 와 같이 앞에 붙이는 걸 권장한다.
merge는 기존의 코드와 수정사항을 합치는 걸 의미한다. 이 과정은 master branch에 feature branch에서 작업한 commit을 병합하는 것이다. 과정에 따라 충돌이 발생할 수 있다. 충돌은 conflict
라고도 부르는데, conflict
는 에러가 아니라 소스를 수정하고 합치는 과정에서 필연적인 과정이다. conflict
가 발생하면 해당 부분을 git에서 가이드 해준다. 해당 가이드 부분을 확인하고 수정한 뒤 merge하면 된다.
순서를 정리해보자.
1. Matser branch를 check out 한다.
2. 자신만의 feature branch를 만든다.
3. Feature branch에서 개발을 한다.
4. 완료되면 commit 한다.
5. Master branch에 feature branch를 merge 한다
.gitignore File
git repo에 있는 모든 파일을 전부 commit
해야하는 것은 아니다. 파일들중에 commit
하지 말아야 하는 파일들도 있는데, 이런 파일들을 git에서 자동으로 skip하도록 설정하는게 좋다. .gitignore
파일을 만들어서 관리하게 되는데, .gitignore
파일에 *.un~ 같이 라인을 추가하면 된다.
git
: 버젼관리를 위해 리눅스 커널의 창시자인 리누스 토발스가 직접 만든 프로그램. 서버에 의존하지 않고, 자신의 로컬 PC에서 소스코드를 관리한다. 작업의 기록을 남겨서 수정 및 보완 등의 이력을 추적할 수 있게되서 협업하기 쉬워진다. 게임의 세이브 포인트를 남긴다고 생각하면 좋다.github
: git은 프로그램이지만 github은 파일의 버젼 관리를 다른 사람이 볼 수 있게 정보 교환이 이뤄지는 일종의 서버라고 볼 수 있다. 협업을 하고 소스에 대한 이력을 관리할 수 있어서, 다른 사람들이 개발한 코드를 볼 수 있고, 진행되는 프로젝트에 참여해서 수정 및 보완 작업을 협업할 수 있다.VCS
: 소스코드 등의 변경점을 관리해주는 소프트웨어를 말한다. 파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버젼을 다시 꺼내올 수 있는 시스템을 의미한다. 버젼을 통해 변경 사항과 작업자를 추적할 수 있다.git init
: 해당 폴더에서 git init
명령어를 실행하면 새로운 저장소가 생성된다. 저장소 구성을 위한 .git 폴더가 생성되며, 이 폴더에는 프로젝트 관리를 위한 파일들과 해당 프로젝트에만 적용할 config 파일 등이 들어 있다.git add remote
: 기존의 워킹 디렉토리에 새로운 remote repository(원격저장소)를 추가한다. git add remote <remote_repo_name> <remote repository url>
명령을 사용한다. git add remote exam https://github.com/[이름]/gitExam
이라는 명령어가 의미하는 것은 exam 이라는 이름으로 원격 저장소 주소를 등록하게 된다.git remote -v
: (일단 git remote
가 원격 저장소를 관리할 수 있는 명령어이다.) git remote -v
는 등록된 저장소 이름과 url을 표시한다.local repository / remote repository
Remote repository : 파일이 Remote repository 전용 서버에서 관리되며 여러 사람이 함께 공유하기 위한 저장소. 여럿이 같이 쓰는 클라우드 느낌이다.
Local repository : 내 PC에 파일이 저장되는 개인 전용 저장소
git clone vs. git pull 개념 및 차이점
git clone
: 서버의 프로젝트를 내려받는 명령어. git clone [저장소 주소]
를 하면 된다. 저장소의 내용을 다운로드 받고 자동으로 init도 된다.git pull
: 이 명령어는 git fetch
와 git merge
를 합친 명령어라고 볼 수 있다. 원격 저장소의 변경사항 중 로컬 저장소에 반영되지 않은 내용을 가져와서 현재 branch에 병합한다. 옵션을 주지 않으면 원격 저장소의 master branch를 갖지고 온다.branch의 개념 + 관련 명령어(branch 생성, branch 이동, branch 제거)
git branch issue
라는 명령어도 issue 라는 branch를 생성한 것이다. checkout
이다. git checkout issue
라고 작성하면 된다.
git checkout -b <branch_name>
checkout 명령어에 -b 옵션을 넣어주면 브랜치 작성과 체크아웃을 한번에 할 수 있다.
git branch -d issue
라고 작성하면 issue 브랜치가 삭제된다.git staging 설명 + 관련 명령어(add, commit, push)
git staging : staging area
는 index
라고도 불리는 장소인데, commit
이 되기전에 거쳐가는 공간이다. git add
명령어를 통해서 index
장소로 올라간다.
add : working directory에서 수정된 파일을 staged area
에 올리는 명렁어이다. git add <파일 이름>
으로 사용한다.
commit : staging
된 파일을 로컬저장소에 기록하는 작업이다. staged
상태인 파일을 git commit
명령어로 로컬 저장소에 저장할 수 있다.
push : 로컬저장소에서 원격저장소로 보내는 작업을 담당하는 명령어이다.
git push <remote_name> <branch_name>
이라는 명령어로 사용하는데, 상황에따라 문법이 달라질 수 있다.
git remote add origin <원격 서버 주소>
는 기존에 있던 원격 저장소를 복제한 것이 아닐 때, 원격 서버의 주소를 git에게 알려줘야하기 때문에 이런 문법을 사용한다.
git commit -m "comments"
commit 명령어에 -m 옵션을 주면 커멘트를 달 수 있다.
conflict는 왜 발생하는가? 어떻게 해결하는가?
HEAD는 현재 브랜치를 가리키는 포인터이며, 해당 브랜치에 담긴 커밋 중 가장 마지막 커밋을 가리킨다. 단순하게 HEAD는 마지막 커밋의 스냅샷이라고 생각하면 편하다.