GitHub에 만들어 놓은 저장소 관리를 알아보자.
1) 리모트 저장소 확인하기
// 프로젝트 복제
$ git clone https://github.com/ysyun/pro_git.git
Cloning into 'pro_git'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
$ cd pro_git
$ git remote
origin
// 같은 프로젝트에 대해서 여러 기여자가 있을 수 있다.
$ git remote -v
origin https://github.com/ysyun/pro_git.git (fetch)
origin https://github.com/ysyun/pro_git.git (push)
2) 리모트 저장소 추가하기 : git remote add [단축이름] [url]
$ git remote -v
dowon $ (fetch)
dowon $ (push)
origin https://github.com/ysyun/pro_git.git (fetch)
origin https://github.com/ysyun/pro_git.git (push)
// 기존 잘 못 설정된 내역 삭제
$ git remote rm dowon
$ git remote -v
origin https://github.com/ysyun/pro_git.git (fetch)
origin https://github.com/ysyun/pro_git.git (push)
// 새로운 remote alias 추가
$ git remote add dowon https://github.com/ysyun/pro_git.git
// 확인
$ git remote -v
dowon https://github.com/ysyun/pro_git.git (fetch)
dowon https://github.com/ysyun/pro_git.git (push)
origin https://github.com/ysyun/pro_git.git (fetch)
origin https://github.com/ysyun/pro_git.git (push)
// 리모트 저장소 이름 변경
$ git remote rename dowon young
// 확인
$ git remote -v
origin https://github.com/ysyun/pro_git.git (fetch)
origin https://github.com/ysyun/pro_git.git (push)
young https://github.com/ysyun/pro_git.git (fetch)
young https://github.com/ysyun/pro_git.git (push)
3) 리모트 저장소를 Pull, Fetch 하기 : git fetch [remote-name]
- fetch : clone 이후 변경된 데이터를 모두 로컬로 가져온다. 그러나 자동 Merge는 하지 않는다. 수동 Merge해야 함
- pull : 리모트 저장소 브랜치에서 데이터를 가져와서 현재 작업하는 로컬 브랜치와 Merge 한다.
// fetch로 새로 추가한 build.gradle 파일 가져오기 fetch 수행
$ git fetch origin
From https://github.com/ysyun/pro_git
49c657f..03ca40a master -> origin/master
// 못가져옴
$ ls
README.md
// pull로 새로 추가한 build.gradle 파일 가져오기 fetch 수행
$ git pull origin
Updating 49c657f..03ca40a
Fast-forward
build.gradle | 3 +++
1 file changed, 3 insertions(+)
create mode 100644 build.gradle
// 가져옴
$ ls -alrt
total 5
drwxr-xr-x 13 yuwonsys Administ 4096 Dec 27 10:45 ..
-rw-r--r-- 1 yuwonsys Administ 38 Dec 27 10:45 README.md
-rw-r--r-- 1 yuwonsys Administ 37 Dec 27 10:58 build.gradle
drwxr-xr-x 14 yuwonsys Administ 4096 Dec 27 10:58 .git
drwxr-xr-x 5 yuwonsys Administ 0 Dec 27 10:58 .
///////////////////////////////
// 내용확인
$ cat build.gradle
task gzip << {
println "gzip"
}
// remote에서 build.gradle 내역 수정함 -> fetch로 가져오기 시도
$ git fetch origin
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From https://github.com/ysyun/pro_git
03ca40a..f856853 master -> origin/master
// 변경 내역 파일 fetch 못함
$ cat build.gradle
task gzip << {
println "gzip"
}
// remote에서 build.gradle 내역 수정함 -> pull로 가져오기 시도
$ git pull origin
Updating 03ca40a..f856853
Fast-forward
build.gradle | 1 +
1 file changed, 1 insertion(+)
// 변경 내역 파일 pull하여 가져왔음
$ cat build.gradle
task gzip << {
println "gzip"
println "ok"
}
4) 리모트 저장소에 Push 하기 : git push [리모트 저장소 이름] [브랜치 이름]
// 맨 하단 내역을 로컬에서 추가한다
$ cat build.gradle
task gzip << {
println "gzip"
println "ok"
println "are you sure?"
}
// 상태를 확인해 보면 modified 상태이므로 Staging Area -> Git Directory로 이동해야 한다
$ git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: build.gradle
#
no changes added to commit (use "git add" and/or "git commit -a")
// -a 옵션으로 Git Directory로 바로 commit 한다
$ git commit -a -m "add content in build.gradle"
[master 329db04] add content in build.gradle
1 file changed, 1 insertion(+)
// commit 완료 확인
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit, working directory clean
// 변경 내역을 리모트의 master 브랜치로 push 한다 (github 사용시 ID/PWD 입력함)
$ git push origin master
Username for 'https://github.com': ysyun@yuwin.co.kr
Password for 'https://ysyun@yuwin.co.kr@github.com':
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 345 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/ysyun/pro_git.git
f856853..329db04 master -> master
5) 리모트 저장소 살펴보기 : git remote show [리모트 저장소 이름]
$ git remote show origin
* remote origin
Fetch URL: https://github.com/ysyun/pro_git.git
Push URL: https://github.com/ysyun/pro_git.git
HEAD branch: master
Remote branch: // pull 하여 오는 리모트 브랜치 목록 보여줌
master tracked
Local branch configured for 'git pull': // Merge 브랜치를 알려줌
master merges with remote master
Local ref configured for 'git push': // master 브랜치가 master 브랜치로 push 함
master pushes to master (up to date)
'Git, GitHub > Git Lec02' 카테고리의 다른 글
[Pro Git] Git Alias 사용하기 (0) | 2013.01.08 |
---|---|
[Pro Git] Tag 사용하기 (0) | 2013.01.08 |
[Pro Git] Git 저장소 만들기와 상태 변경 명령 (0) | 2012.12.24 |
[Pro Git] Git 설치와 최초 설정하기 (0) | 2012.12.24 |
[Pro Git] DVCS역사 (0) | 2012.12.24 |