본문 바로가기

서버운영 (TA, ADMIN)/미들웨어

[버전관리] Git 간편안내 10가지 팁

본 포스팅은 git - 간편안내서 페이지를 참고하였습니다. (https://rogerdudler.github.io/git-guide/index.ko.html)



1. git bash 다운로드 사이트 안내

- OS X용 git 다운로드 ( https://git-scm.com/download/mac )

- Windows용 git 다운로드 ( https://git-scm.com/download/windows )

- Linux용 git 다운로드 ( https://git-scm.com/download/linux )



2. 새로운 저장소 만들기

폴더 생성후, 그 안에서 아래 명령어 실행

git init



3. 저장소 받아오기

로컬 저장소를 복제(clone)하려면 아래 명령을 실행.

git clone /로컬/저장소/경로


원격 서버의 저장소를 복제하려면 아래 명령을 실행

git clone 사용자명@호스트:/원격/저장소/경로



4. 작업의 흐름

로컬 저장소는 git이 관리하는 세그루의 나무로 구성되어있습니다.

첫번째 나무인 작업디렉토리(working directory)는 실제 파일들로 이루어져 있고,

두번째 나무인 인덱스(Index)는 준비영역(staging area)의 역할을 하며,

마지막 나무인 헤드(HEAD)는 최종 확정본(commit)을 나타냅니다.


5. 추가와 확정(commit)

변경된 파일은 아래 명령어로 (인덱스에) 추가할 수 있습니다.

git add <파일 이름>

git add *

이것이 바로 git의 기본 작업 흐름에서 첫 단계에 해당됩니다.


하지만 실제로 변경 내용을 확정하려면 아래 명령어를 내려야 합니다.

git commit -m "이번 확정본에 대한 설명"

위 명령어로 변경된 파일 HEAD 반영이 완료됩니다. 하지만, 원격 저장소에는 아직 반영이 되지 않았습니다.



6. 변경 내용 발행(push)하기

현재의 변경 내용은 아직 로컬 저장소의 HEAD 안에 머물고 있습니다. 변경 내용을 원격서버로 올리는 명령어는 아래와 같습니다.

git push origin master             // 다른 가지를 발행하려면 master를 원하는 가지 이름으로 변경.


만약 기존에 있던 원격 저장소를 복제한 것이 아니라면, 원격 서버의 주소에 대한 정보가 필요합니다.

git remote add origin <원격 서버 주소>

이제 변경 내용을 원격 서버로 발행할 수 있는 상태 변경이 완료 되었습니다.



7. 가지(branch)치기

가지는 안전하게 격리된 상태에서 무언가를 만들때 사용합니다. 여러분이 저장소를 새로 만들면 기본으로 master 가지가 만들어집니다. 이제 다른 가지를 이용해서 개발을 진행하고, 나중에 개발이 완료되면 master 가지로 돌아와 병합하면 됩니다.

참고 사이트 ( http://88240.tistory.com/286 )


git flow에 대한 간략한 설명 입니다.

 Git은 로컬에서 다루기 쉽고 Branch를 자유롭게 생성 가능합니다. Branch 내에서 자유롭게 개발하고 여러 Branch 간에 Merge가 쉬울뿐 아니라 Branch끼리 충돌하는 경우에도 유연하게 해결할 수 있습니다. 이러한 점들이 제공되기 때문에 기존 형상관리 툴인 SVN과 CVS와 달리 소스를 최신버전으로 유지하면서 개발자들이 편하게 사용하고 있습니다. 특히, Git의 가장 큰 장점인 Branch 전략을 잘 정립해서 Git Branch를 활용한 Git Flow 방식이 가장 많이 쓰이고 있습니다. Git Flow는 네덜란드 출신의 Vincent Driessen라는 파이썬 개발자가 공유한 Branch 전략입니다. 


아래 명령으로 "feature_one"이라는 이름의 가지를 만들고 갈아탑니다.

git checkout -b feature_one


아래 명령으로 master 가지로 돌아올 수 있습니다.

git checkout master


아래 명령으로는 가지를 삭제할 수 있습니다.

git branch -d feature_one


여러분이 새로 만든 가지를 원격 저장소로 전송하기 전까지는 다른 사람들이 접근할 수 없습니다.

git push origin <가지 이름>



8. 갱신과 병합(merge)

로컬 저장소를 원격 저장소에 맞춰 갱신하려면 아래 명령어를 실행하세요.

git pull


이렇게 하면 원격 저장소의 변경 내용이 로컬 작업 디렉토리에 받아지고(fetch), 병합(merge) 됩니다.

다른 가지에 있는 변경 내용을 현재 가지(예를 들면, master 가지)에 병합하려면 아래 명령을 실행하면 됩니다.

git merge <가지 이름>


첫번째 명령이든 두번째 명령이든, git은 자동으로 변경 내용을 병합하려고 시도합니다. 문제는, 항상 성공하는게 아니라 가끔 충돌(confilicts)이 일어나기도 한다는 점입니다. 이렇게 충돌이 발생하면, git이 알려주는 파일의 충돌 부분을 여러분이 직접 수정해서 병합이 가능하도록 해야 합니다.

충돌을 해결했다면, 아래 명령으로 git에서 아래 명령으로 충돌파일을 병합합니다.

git add <파일 이름>


변경 내용을 병합하기 전에, 어떻게 바뀌었는지 비교해볼 수도 있습니다.

git diff <원래 가지> <비교 대상 가지>



9. 꼬리표( tag ) 달기

소프트웨어의 새 버전을 릴리즈할때마다 tag를 달아놓으면 좋습니다. (물론 tag는 SVN 등에 이미 존재하는 기능이긴 합니다.) 아래 명령을 실행하면 새로운 꼬리표인 1.0.0을 달 수 있습니다.

git tag 1.0.0 1b2e1d63ff


 위 명령에서 1b2e1d63ff 부분은 꼬리표가 가리킬 확정본 식별자입니다. git log 명령으로 확정본 식별자를 얻을 수 있습니다. 단, 그 일부분은 반드시 고유하다는 조건이 필요합니다.


10. 로컬 변경 내용 되돌리기

만약 실수로, 무언가 잘못한 경우, 아래 명령으로 로컬의 변경내용을 되돌릴 수 있습니다.

git checkout -- <파일 이름>


위 명령은 로컬의 변경 내용을 변경 전 상태(HEAD)로 되돌려 줍니다. 다만, 이미 인덱스에 추가된 변경 내용과 새로 생성한 파일은 그대로 남는답니다.


만약, 로컬에 있는 모든 변경 내용과 확정본을 포기하려면, 아래 명령으로 원격 저장소의 최신 이력을 가져오고, 로컬 master 가지가 저 이력을 가리키도록 할 수 있습니다.

git fetch origin

git reset --hard origin/master



11. 그외

- git의 내장 GUI 명령어는 gitk 입니다.

- 콘솔에서 git output을 컬러로 출력하는 명령은 git config color.ui true 입니다.

- 이력(log)에서 확정본 1개를 딱 한 줄로만 표시하는 명령어는 git config format.pretty oneline 입니다.

- 파일을 추가할 때 대화식으로 추가하는 명령은 git add -i 입니다.


- 그래픽 클라이언트, 한글 안내서(Pro Git, A Visual Git Guide, Git 작업흐름, Git 브랜치 배우기) 등은

   원본 링크에서 제공하고 있으니 참고 부탁드립니다.



git 원격 저장소를 서버에 직접 생성하는 방법에 대해서는 추후 상세 포스팅 하겠습니다.

그전에 http://egloos.zum.com/devxpert/v/1034173 를 참고하면, 관련 내용 알 수 있습니다.