본문 바로가기
Programming

GIT 간단 사용기 - http://devinfo.tistory.com(퍼옴)

반응형

GIT가  SVN과 비슷하다 하드만... 도저히 감이 안잡힌다. 뭐 이런게 다 있나 싶을정도로....

몇일간의 웹서핑과, Local에서의 테스트로 얻은것들을 정리한다.
이제 초기 작업을 위한  내용파악이 된 상태지만, 머지 않아 내가 Local에서 마음대로 쓰기에 불편하지 않을 정도가 될 것같다. (@.@ 뭐시라???)

이 문서는 기존의 Repository에서 GIT로 다운받은 후 Local에서 버전관리 하기 위한 시작단계의 내용들이다.
Sample은 u-boot 코드를 이용하였다.
Test환경은 Cygwin 상에서 이루어 졌으며, Linux상에서도 아무 문제 없이 될 듯하다.
아직은 Linux보다는 윈도우에 설치된 Cygwin이 내 입맛에는 맞는 듯하다.

1. Repository에서 GIT로 다운 받기
>> mkdir git-repos 
>> cd repos
>> git clone git://git.denx.de/u-boot.git  
혹은
>> git clone http://git.denx.de/u-boot.git  

를 실행하여 u-boot를 다운받는다.
<결과>
/home/git-repos/u-boot
가 생성된다.
앞으로 local에서 사용할 GIT의 Repository이다.

/home/git-repos/u-boot 폴더에서 git log, git tag -l, git branch 등을 이용하여 GIT의 정보를 마음껏 확인할 수있다.

2. Work Project를 생성하자.
/home/git-repos 폴더에서
>> git clone u-boot /home/work/u-boot
를 실행하여 work project를 만든다.

이제 작업할 Base 버전을 선택하고 Branch를 만들자.
물론 Main에 저장해도 상관은 없겠지만, Original Source가 내가 만든 것이 아니므로....

Tag 와  Branch를 확인해보자.
>> git tag -l

...
v1.3.4
v1.3.4-rc1
v1.3.4-rc2
v2008.10
v2008.10-rc1
v2008.10-rc2
v2008.10-rc3
...

>> git branch
>> * master
현재 등록되어서 사용되는 Branch를 볼수 있다. 
다운받은 u-boot코드는 master가 하나 딸랑 보이고 앞에 '*'가 붙어 있다. 이놈이 SVN의 trunk에 해당하는 듯 하다.
'*' 는 현재 사용되는 branch를 가르킨다.

이제, 내가 원하는 TAG의 코드로 나만의 branch를 생성시켜보자.
생성 명령은 checkout 이고, Branch 생성은 -b new 이다.

>> git checkout -b mybranch U-Boot-1_1_6
를 실행하면 U-Boot-1_1_6 의 TAG코드로 변경되고, mybranch가 생성되어 현재 사용되는 branch로 등록된다.

다시한번
>> git branch
를 실행하면 아래와 같은 화면이 보인다. 이번에는 메인 branch가 mybranch로 변경되었다.
>>   master
>> * mybranch

branch를 생성하긴 했는데, 코드를 다른 놈을 Base로 쓰고 싶단다. 그럼 어떻게 하나????
>> git reset --hard TAG
멋지다. 요렇게 하면 마음대로  Base코드도 바꿀 수 있다.

근데... 요렇게 작업하다가 master로 돌아가고 싶으면???? 
음... 요기까지는 아직 검토안해봤다. Branch의 이동명령...  왠지 그런 것도 될 것만 같은...

쩝... 암튼.. 겁나 편한 거 같기는 한데 아직은 잘 모르겠다.

Commit이랑 History관리 등등은... 기약없이 다음으로 .....

더 자세한 사항은 http://git-scm.com/ 의 Document를...

웹으로 부터 clone한 폴더를 로컬 서버로 다시 clone한 다음 부터 진행하도록 한다.

2. Work Project를 생성하자.
/home/git-repos
폴더에서
>> git clone u-boot /home/work/u-boot

1. 사용자 등록
우선, 사용자 등록을 하도록 하자. name 과 email을 이용하여 git에게 사용자를 알려주게 된다.

>> git config --global user.name myname
>> git config --global user.email mymail@email.addr
>> git config -l

...
user.name=myname
user.email=mymail@email.addr
...


2. Branch 가지고 놀기
  어쨌든 다운 받은 코드에서 Branch를 이용해보자. 생성 삭제 등등이 너무나 자유로워서 내마음대로 가지고 놀아도 괜찮을 듯하다.
1) Branch 생성

>> git branch mybranch

or

>> git checkout -b mybranch [TAG]

이처럼 두가지 방법으로 Branch 생성이 가능하다.
 첫번째는 mybranch라는 이름의 branch를 생성하기만 한다. 즉, 현재 branch는 mybranch를 생성하기전의 branch가 되는 것이다. 지금은 master이다.
 두번째는 간단 사용기 1에서도 사용했던 것 처럼 mybranch를 생성과 동시에 현재 branch를 mybranch로 변경하는 것이다. [TAG]를 사용할 경우 해당 TAG를 default code로 사용하게 되며, [TAG]를 입력하지 않을 경우 mybranch를 생성하기 직전의 코드를 default로 사용하게 될 것이다.

2) Branch 변경 및 삭제

>> git checkout mybranch
>> git branch -d mybranch

checkout 은 현재 소속을 변경하는 역할을 한다. 명령을 이용하여 해당 branch로 변경할 수있다. 또한 생성된 branch를 삭제하고 싶으면 branch의 -d 옵션을 사용하면 된다.
등록되어 있는 모든 branch를 확인하고 싶으면 그냥  git branch를 입력하면 된다.


3) branch에서 작업한 내용을 병합하기 (Merge)
- mybranch에서 작업을 한 이후 commit를 이용하여 변경사항을 적용한다. 추가된 사항이 있다면 add 명령을 이용하여 추가해야 할 것이다.

>> git commit -a

- 변경사항이 저장되었으면, 머지될 branch로 돌아가자. 우선은 master에 머지하는 것으로 하겠다.
행여나 master 가 변경되어야 할 사항이 있다면 commit부터 하도록하자.

>> git checkout master
>> git commit -a
>> git merge mybranch

만약 충돌 사항이 없다면 제대로 된 것이다. 충돌이 있을 경우 diff명령을 이용하여 충돌을 확인 후 수정 및 commit를 하면 된다.
diff 명령은 새롭게 추가된 파일중 add가 수행되지 않은 파일도 보여준다. 충돌 사항을 확인 하기에는 번거로운 경우이다. 이를 피하기 위해 --cached 옵션을 사용하자. 서버에 등록된 코드의 변경사항만 보여준다.

>> git diff
>> git diff --cached
>> git status

status 명령은 작업 프로젝트의 간단한 변경사항들을 알려준다.

4) 작업완료된 분기 삭제하기
- 변경 사항이 모두 적용되었고 더이상 branch가 사용되지 않는 다면 위의 삭제 명령을 이용하여 과감히 버리자.


더 자세한 사항은 http://www.kernel.org/pub/software/scm/git/docs/user-manual.html 의 GIT user manual이나 http://git-scm.com/ 의 Document를...

반응형