(4)-4.GIT - 3.+Training+Set+B
3. Training Set B
- TrainB Working Directory 생성
- Staging (Index에 올리기)
- Commit
- Push (Local Repository의 Commit 내용을 Remote Repository로 전송)
- 새로운 작업 디렉토리 생성
- 신규 파일 추가 및 Push
- TrainB Working Directory에서 fetch 와 pull의 차이 확인
이번 Training Set B는 Staging, Commit, Push / Clone, Fetch, Pull 을 다시 한 번 복습해보는 과정입니다.
TrainB Working Directory 생성
- Training Set A에서 생성한 가상 Remote Repository를 Clone 해서 Working Directory를 생성합니다.
$ git clone file://c:/opt/repository/test.git TrainB : 원격 저장소에서 프로젝트를 가져와서 TrainB 란 Working Directory를 생성합니다.
$ cd TrainB : Working Directory로 이동합니다.
$ git remote -v : 원격 저장소가 제대로 세팅되었는 지 확인합니다.
$ vi test1.txt : 파일 생성
$ git status : 생성된 파일이 Untracked 되고 있는 상태를 확인합니다.
Staging (Index에 올리기)
- Tracking 할 의미있는 파일을 staging합니다.
- Tracking 하지 않을 파일로 notrack 이란 파일을 만듭니다.
- .gitignore 파일을 생성하여, notrack 을 써둡니다.
- 전체 폴더 내용을 Staging하여 .gitignore 가 작동하는 것을 확인합니다.
$ touch notrack : notrack 이란 파일을 만듭니다.
$ git status : notrack이 untracked되고 있음을 확인합니다.
Untracked files:
(use "git add <file>..." to include in what will be committed)
notrack
test1.txt
nothing added to commit but untracked files present (use "git add" to track)
$ vi .gitignore : .gitignore 파일을 생성하고 notrack을 추가합니다.
$ cat .gitignore
notrack
$ git status
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
test1.txt
nothing added to commit but untracked files present (use "git add" to track)
$ git add * : 현재 폴더의 모든 파일을 스테이징합니다. 결과 notrack이 .gitignore에 있어서 스테이징 되지 않음을 확인합니다.
Commit
- commit message는 필수 이므로 commit -m "메시지명" 으로 Local Repository에 commit 을 추가합니다.
$ git commit -m "init"
$ git log : commit ID 가 생성되고, 현재 HEAD가 master를 가르키고 있음을 확인합니다.
$ gitk -a : 같이 배포되는 비주얼 툴인 gitk을 활용하여, 현재 커밋 상황을 확인합니다.
Push (Local Repository의 Commit 내용을 Remote Repository로 전송)
- 현재 커밋 내용을 Remote Repository로 전송.
- 여러 번의 커밋이 있으면 모두 전송
- 몇 번의 커밋을 수행한 후, 다시 Remote Repository로 전송.
$ git push origin master
$ vi test1.txt : test1 변경 (2번째)
$ git commit -a -m "2nd" : 한 번 스테이징한 파일은 -a 옵션을 추가하여 한꺼번에 스테이징과 커밋 수행 가능
$ vi test1.txt : test1 변경 (3번째)
$ git commit -a -m "3rd"
$ vi test1.txt : test1 변경 (4번째)
$ git commit -a -m "4th"
$ vi test1.txt : test1 변경 (5번째)
$ git commit -a -m "5th"
$ git push origin master : 추가한 commit들을 원격 저장소로 전송
새로운 작업 디렉토리 생성
- 다른 개발자라 가정하고, TrainB2 란 Working Directory 를 Clone명령을 활용하여 생성
- TrainB2 폴더로 이동 git remote -v 로 원격 저장소 설정 확인
$ git clone file://c:/opt/repository/test.git TrainB2 : 원격 저장소에서 프로젝트를 가져와서 TrainB2 란 Working Directory를 생성합니다.
$ cd TrainB2 : Working Directory로 이동합니다.
$ git remote -v : 원격 저장소가 제대로 세팅되었는 지 확인합니다.
$ git log : 앞에서 생성한 5개의 commit이 모두 전송되었는 지 확인.
신규 파일 추가 및 Push
- 신규로 test2.txt파일 생성하고, 차례로 staging, commit , push 수행
$ vi test2.txt : 신규 파일 생성
$ git add * : 스테이징
$ git commit -m "another folder" : commit
$ git push origin master : (가상) 원격 저장소에 Push 수행
$ cd ../TrainB : 처음 만들었던 작업 폴더로 이동
TrainB Working Directory에서 fetch 와 pull의 차이 확인
- fetch 와 pull 의 차이를 명확히 이해할 것
$ ls : test2.txt가 없는 것을 확인
notrack test1.txt
$ git fetch : fetch 수행 , Remote Repository의 내용을 별도의 브랜치(FETCH_HEAD)를 만들어 가져옴
$ git checkout FETCH_HEAD : 가져온 내용을 확인 (아래 메시지 내용 정독할 것)
Note: checking out 'FETCH_HEAD'.
You are in 'detached HEAD' state. You can look around, make experimental changes and commit them,
and you can discard any commits you make in this state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may do so (now or later) by |
using -b with the checkout command again. Example: git checkout -b <new-branch-name>
$ ls : 원격에서 가져온 커밋엔 test2.txt가 있는 것 확인
notrack test1.txt test2.txt
$ git checkout master : master 브랜치로 이동
Previous HEAD position was 6f925d6... another folder Switched to branch 'master'
Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded. (use "git pull" to update your local branch)
$ git pull : 원격 저장소에서 가져와서 현재 working directory와 병합 수행
Updating 0554ad2..6f925d6
Fast-forward
test2.txt | 4 ++++
1 file changed, 4 insertions
create mode 100644 test2.txt
$ ls : test2.txt가 생성된 것을 확인
notrack test1.txt test2.txt