'Tool/Git'에 해당하는 글 24건

.gitignore

Tool/Git 2013. 3. 29. 01:34

버전관리 디렉토리에서 버전관리 하지 않을 파일들에 대한 패턴을 만듭니다.
로그파일이나, 임시파일, 각종 무시할 파일들이 그 대상이 될 수 있으며 패턴을 정의해 놓으면,
status 확인시 이 패턴에 대하여 불필요하게 상태를 나타내지 않습니다.
패턴은 표준 Glob 패턴을 사용합니다.

 

$ ls -al
.git
$ vi .gitignore
# 확장자가 .a인 파일 무시
*.a
# 윗 줄에서 확장자가 .a인 파일은 무시하게 했지만 lib.a는 무시하지 않는다.('!')
!lib.a
# 확장자가 .o 나 .a 인 파일 무시
*.[oa]
# 루트 디렉토리에 있는 TODO파일은 무시하고 subdir/TODO처럼 하위디렉토리에 있는 파일은 무시하지 않는다.
/TODO
# build/ 디렉토리에 있는 모든 파일은 무시한다.
build/
# `doc/notes.txt`같은 파일은 무시하고 doc/server/arch.txt같은 파일은 무시하지 않는다.
doc/*.txt

 


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret

git push

Tool/Git 2013. 3. 29. 00:50

로컬 저장소의 작업물을 원격 저장소에 적용하는 것은 push 명령으로 가능합니다.
push 명령을 실행하기 전에는 반드시 fetch나 pull 명령으로 원격 저장소의 마지막 커밋을 다시 받아야 합니다.
그렇지 않으면 다음과 같은 오류 메시지가 출력될 것입니다.
 ! [rejected]        master -> master (non-fast-forward)

 

 

git push <repo> <refspec>

 

$ git show HEAD
diff --git a/y1.txt b/y1.txt
deleted file mode 100644
index 9daeafb..0000000
--- a/y1.txt
+++ /dev/null
@@ -1 +0,0 @@
-test

$ git pull origin
Already up-to-date.

$ git push origin

 

추적 파일들을 생성,수정,삭제 등의 작업을 마치고 commit 을 했다면,
push 전에 show 명령을 사용하여 전달될 작업물을 확인할 수 있습니다.
pull 명령으로 push 전에 원격 저장소의 마지막 커밋을 받습니다.
refspec 지정을 하지 않으면 master->master로 작업물이 전달됩니다.

 

로컬 저장소의 second 라는 branch를 원격 저장소로 전달할 수도 있습니다.

 

$ git push origin second:second
To git@github.com:ggamzzak/test.git
 * [new branch]      second -> second

 


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret

pull scenario

Tool/Git 2013. 3. 28. 01:37

원격 저장소의 작업물을 로컬 저장소로 복제하기 위해 clone 을 사용했지만,
이 후 원격 저장소의 변경된 작업물을 가져오기 위해서는 pull 이나 fetch 명령을 사용해야 합니다.
fetch 명령은 원격 저장소의 변경된 작업물(obj, ref, tag)만을 가져옵니다.
pull 명령은 fetch + merge 를 실행하는 것과 동일한 결과를 보여 줍니다.

 

만약 로컬의 master 와 원격의 master(origin/master) 가 각각 다른 commit을 진행중일 때,
merge를 원한다면 pull 명령을, 단지 origin/master 만 update 하길 원한다면 fetch 를 사용하면 되겠습니다.

 

우선 clone 으로 동기화한 후의 fetch 명령은 이미 remote branch 세팅이 끝난 상태이므로 패스하고,
초기화(init)된 상태에서 fetch 와 merge, origin/master 추적을 사용해 보겠습니다.

 

 

 

git fetch <repo> <refspec>

 

$ git init
$ git remote add origin git@github.com:ggamzzak/test.git
$ git fetch origin
From github.com:ggamzzak/test
 * [new branch]      b2         -> origin/b2
 * [new branch]      master     -> origin/master

 

remote branch 가 생성되었습니다.
이제 merge를 사용하여 로컬 origin/master 에 master HEAD 를 놓습니다.

 

$ git merge origin/master

 

* refspec 이란 것은 간략하게 <src branch>:<dest branch> 라고 보면 되겠습니다.

 

 

 

git pull <repo> <refspec>

 

$ git init
$ git remote add origin git@github.com:ggamzzak/test.git
$ git pull origin
Enter passphrase for key '/home/oops4u/.ssh/id_rsa':
From github.com:ggamzzak/test
 * [new branch]      b2         -> origin/b2
 * [new branch]      master     -> origin/master
You asked to pull from the remote 'origin', but did not specify
a branch. Because this is not the default configured remote
for your current branch, you must specify a branch on the command line.
$ git checkout -B master origin/master
Branch master set up to track remote branch master from origin.
Reset branch 'master'
$ git pull origin
Already up-to-date.

 

fetch와 merge를 사용한 결과는 pull 명령을 사용한 것과 동일합니다.
동일하다고는 하였지만, 원격 저장소 주소만 추가한 상태에서 branch 를 명시하지 않으면,
merge할 branch를 지정하라는 메시지를 출력합니다.
이 때 master 를 reset 하여 origin/master 를 추적하도록 합니다.
그리고 나면 pull 명령에 branch 를 생략해도 master->master 로 가져오게 됩니다.


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret

clone scenario

Tool/Git 2013. 3. 27. 01:15

clone 명령의 시나리오는 단지 최초에 한번만 원격 저장소의 작업물을 복제하고 시작하므로 변수가 많지 않습니다.
한 번의 명령으로 히스토리까지 모두 원격 저장소와 동일하게 복제되어 동일한 구조를 만들어 줍니다.

 

$ git clone git@github.com:ggamzzak/test.git
$ cd test
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
$ git remote show origin
Enter passphrase for key '/home/oops4u/.ssh/id_rsa':
* remote origin
  Fetch URL: git@github.com:ggamzzak/test.git
  Push  URL: git@github.com:ggamzzak/test.git
  HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

 

branch -a 명령으로 로컬 저장소에 생성된 remote branch 까지 출력됩니다.
3개의 branch가 생성되어 있는데 * master 를 제외한 것들은 모두 remote branch입니다.
origin/master 는 origin 원격 저장소의 master branch 를 의미하며 로컬의 master branch를 추적하게 됩니다.
clone 이 완료되었으면 로컬에 생성된 master branch에서 작업을 진행하면 됩니다.

 

 

여기서 꼭 알아두어야 할 것이 바로 이 그림입니다.
clone 이 완료된 직후의 그림으로 볼 수 있는데, 그림상으로는 단지 두개의 평범한 branch 입니다.
하지만 remote branch 는 직접 컨트롤 할 수 없으며,
로컬 master 에서 작업이 진행된 후에 pull 명령으로 master와 병합되어 나갈 것입니다.

 

 

 

git clone multiple branches

 

$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/other1
  remotes/origin/other2

 

원격 저장소에 branch가 두 개 이상일 경우에도 로컬에서 컨트롤이 가능한건,
remote branch 를 제외한 master branch 한 개 밖에 없다는 점.
원격 저장소의 특정 branch 를 가져오려면 clone -b <branch> 명령을 사용할 수 있습니다.


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret

Remote Repository

Tool/Git 2013. 3. 26. 01:03

로컬 저장소에서 특정 작업물을 commit 하여 HEAD 에 반영하였습니다.
이제 원격 저장소와의 소통이 필요할 때입니다.
원격 저장소의 작업물을 로컬 저장소로 받아오던지(pull), 로컬 저장소의 작업물을 원격 저장소로 보내던지(push).

 

 

git remote add <별칭> <URL>

 

첫째로 remote 명령을 사용해서 원격 저장소의 주소를 로컬 저장소에 추가해야 합니다.

 

$ git remote add r1 git@github.com:ggamzzak/test.git
$ git remote show r1
Enter passphrase for key '/home/oops4u/.ssh/id_rsa':
* remote r1
  Fetch URL: git@github.com:ggamzzak/test.git
  Push  URL: git@github.com:ggamzzak/test.git
  HEAD branch: master
  Remote branch:
    master new (next fetch will store in remotes/r1)
  Local ref configured for 'git push':
    master pushes to master (local out of date)

 

remote show 명령으로 원격 저장소(r1)의 정보를 확인할 수 있습니다.
원격 저장소의 URL과 branch에 대한 정보가 나타나지만 그 외에 자료가 없는 관계로 많은 정보가 나타나지 않았습니다만,
pull, push, fetch 명령을 사용시 작업이 진행될 branch 들을 명시합니다.

 

로컬 저장소에 추가한 원격 저장소의 별칭 수정.
git remote rename <별칭> <새별칭>
별칭 삭제.
git remote rm <별칭>

 

 

push / pull

 

다시 branch로 되돌아가서...
로컬 저장소에는 최소 하나의 branch(master)가 생성됩니다.
원격 저장소도 마찬가지로 최소 하나의 branch(master)가 생성됩니다.

 

두 저장소간에 작업물을 보내거나(push), 받는(pull, fetch) 것은,
상대 저장소 branch의 마지막 커밋을 추가하거나 병합되는 형태가 됩니다.

 

원격 저장소에서 로컬로 작업물을 가져오는 방법은 세가지가 있습니다.
clone / pull / fetch
세 명령의 차이와 특징에 맞게 사용하면 되겠습니다.


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret