로컬환경에서 혼자 Git을 사용한다는 가정아래 git의 명령어를 보도록 하겠습니다. 일단 로컬에서 기초를 먼저 다지시면 원격저장소에 저장하는것은 크게 어렵지않게 느끼시게 될것입니다. 기본을 다지다 생각하시고 해당 포스팅 보시면 되겠습니다.


하기와 같은 시나리오 대로 진해앱도록 하겠습니다.

- 로컬 저장소 생성

- 저장소에 파일 생성 및 추가

- 추가된 파일의 수정

- 기본 브랜치에 영향을 끼치지않는 브랜치 생성

- 브랜치 병합

- 충돌 해결

- 저장소 기록 보기


시나리오를 살펴보니, 브랜치간의 병합하고 충돌과정을 해결하는게 딱봐도 어려워 보이네요. 차근차근 풀어가보도록 하겠습니다.


용어정리를 먼저하겟습니다.


Checkout: 현재 작업공간으로 해당 브랜치를 가져온다.

Commit: 프로젝트에서 의미가 있는 최소한의 단위입니다. 의미를 가질 수 있게되는 시기라면 커밋을 하는게 좋습니다.


앞서 포스팅했던, 글을 참고하여 git bash를 실행하도록 합니다.


1. git init 저장소 생성

Git저장소로 사용할 디렉터리를 만들어봅니다.


> mkdir my_work   //디렉토리를 새로 생성합니다.

> cd my_work        // 디렉토리 이동을 합니다.

> git init               //  저장소 초기화를 진행합니다.


현재 작업중인 브랜치가 master가 된것도 확인하실 수 잇습니다.



2. git add, git commit

파이썬 파일 Hello world를 출력하는 프로그램을 작성하도록 하겠습니다. 파이썬이 설치안되어있으시다면 일반 텍스트파일로 진행하셔도 무난합니다. 실전과 같은 느낌으로하려고 파이썬 을 선택했기 때문입니다. 정말 윈도우에서 파이썬을 설치하고싶으시다면, 해당링크 선택하여 설치하시고 오시면 되겠습니다. 


저는 hello.py 파일을 생성해서 print("hello world") 라고 코드를 작성하여 저장했습니다.


hello world가 출력되는것을 확인하실 수 있습니다.

자 이제 저장소 상태를 확인해봅시다.


> git stauts

아래과 같은 메세지가 출력됩니다.

추적하지 않은 파일이 저장소에 있다고 알려줍니다. 이를 추적하려면 git add를 사용하며 된다고 하네요. 소원대로 사용해줍시다.


> git add hello.py


그이후에 다시 쳐봅니다.

> git status


새로운 파일 hello.py가 추가되었다고 뜨는것을 확인하실 수 있습니다.

이제 commit을 해보겠습니다.


> git commit


앗 유져 이메일과 사용자이름을 먼저 설정하고 진행하라고 하는군요. 저처럼 설정안하신분은 설정하고 다시 진행하도록 합니다.


> git config --global user.email "이메일"

> git config --global user.name "이름"


다시 깃 커밋을 날려줍니다.

> git commit


커밋 메세지를 작성하는 화면이 나옵니다. 아마 VIM이 실행되었을 것입니다. I키를 눌러 첫번째 줄에 여러분들의 커맨트를 다시면 되겠습니다.

그이후 ESC를 누르고 :wq룰 입력후 enter를 쳐서 빠져나옵니다. 그러면 커밋이 완료된것입니다.

화면을 빠져나오면, 마스터 브랜치에 어떠한 변화가 생겼는지 출력되는 커멘트들을 확인하실 수 있습니다.


.


3. git branch, git checkout

현재 작업하고있는 브랜치를 확인하는 커맨드는 다음과 같습니다.

> git branch

master 브랜치를 확인하실 수 있습니다.


브랜치 생성은 다음과 같습니다.

> git branch myBranch 


>git branch

master 브랜치, myBranch 를 확인하실수있습니다. 또한 *글자가있는데, 이는 지금 작업중인 브랜치를 표시합니다.


이제 브랜치를 이동해보겠습니다.

>git checkout myBranch


> git branch


해당 브랜치에서 hello.py를 수정해보겠습니다.

>vim hello.py


printf("Hello world") 코드아래, print("Tell me hello") 코드 작성합니다. 저장후 나옵시다. 여기까지가, myBranch에서 hello.py파일을 수정한 상태입니다.



4. git commit -a

현재의 상태를 보겠습니다.

>git status

hello.py 가 수정되었다고 하네요.

이제는 git add 혹은 git commit -a 를 커멘드를 날려라고 하네요. -a옵션은 변경된 저장소 파일모두를 커밋하는 옵션입니다.


> git commit -a 

역시, vim 이뜨면서 커멘트를 달아라고합니다. 적당한 커멘트를 달고 나옵니다. 


그리고 다시 상태를 확인해봅니다.

> git status

myBranch 에 커밋할게 없다고 뜨는것을 확인하실 수 있습니다.


커밋할때 vim이 열려서 따로 추가하고 나오는게 번거로울 수 있는데 그럴때는 아래와 같이 명령어를 치면 되겠습니다.


> git commit -m "커밋할 메세지를 여기에 작성"


5. git merge: master 브랜치와 병합

그럼 이제 다시 master 브랜치로 체크아웃 하겠습니다.


> git checkout master

> python hello.py 

헬로 월드만 뜨는것을 확인하실 수 있습니다.


그리고 이제 브랜치 병합을 실시하겠습니다.


>git merge myBranch

myBranch에 추가한 print("Tell me hello")가 제대로 뜨는지 확인해보겠습니다.


>python hello.py

제대로 출력되는것을 확인하실 수 있습니다. 혹은, cat hello.py 를 입력하시면, myBranch에서 추가한 구문이 병합되어 master 브랜치의 hello.py에 반영된것을 확인하실 수 있습니다. 


6. 각 브랜치의 독립성 확인

병합전 독립성을 확인해보겠습니다.

현재 master 브랜치에서 hello.py마지막에 print("tell his world") 를 추가합니다.


그리고 커밋을 합니다.

>git commit -a    //a옵션은 수정된 파일 모두 커밋입니다.


마스터 브랜치에 커밋 완료했으면 다시 브랜치를 이동하겠습니다.


>git checkout myBranch

>vim hello.py

여기까지 실행했으면 hello.py에는 master 브랜치에서 반영했던 내용이 반영안된것을 확인하실 수 있습니다.

여기선 print("Tell Her world") 를 추가하고 저장하겠습니다.


그리고 해당 브랜치에서 커밋하겠습니다.

>git commit -a 


자 그럼 hello.py가 master 브랜치와 myBranch에서 독립적으로 작성된것을 확인하실 수 있습니다.



7. .gitignore 불필요한 파일 및 폴더 무시

보통 개발을할때 빌드파일 로그파일 기타 잡파일들이 프로젝트 폴더에 포함되는경우가 있습니다. 이런파일들을 commit하게되면 브랜치에는 쓸데없는 파일들이 차고 넘치겠지요. 이런것들을 방지하고자 commit할때 제외시켜주도록 도와주는 파일이 .gitignore파일이 되겠습니다.


>touch .gitignore

빈파일의 .gitignore 파일을 생성합니다.


직접 작성하기엔 저희에겐 시간이없습니다. 그래서 해당사이트에서 도움을 받도록 하겠습니다.

https://www.gitignore.io/

파이썬과 사용중인 운영체제 윈도우스를 선택했습니다. IDE도 입력하시면 됩니다. 아무튼 create하면 파일을 생성해주는데 이걸 .gitignore 파일에 넣으시면 되겠습니다. 저는 메모장으로 그냥 넣었어요.


그리고 다시 

> git status


항상 파일을 새로생성했으면add를 먼저 해주시고 그이후부터 commit을 해주셔야 합니다. add를 통해서 추적을 시작하겠다는것을 전달하는 것이지요.


>git add .gitignore

>git commit -m "added ignorefile"


이제 윈도우, 파이썬으로 작업하실때 불필요한 파일이 저장소에 커밋되는것을 방지하실 수 있습니다.


8. 충돌해결

마스터 브랜치로 이동하여 myBranch와 병합을 시도해보록 하겠습니다.


>git checkout master

>git merge myBranch

cat hello.py

해당 master 브랜치가 merging 이라고 표시가 나오네요. 또한, hello.py 파일을 보면 myBranch에서 작성했던 내용이랑 달랐기때문에 충돌이 되었고 해당파일에 충돌 표시가 보이는것을 확인하실 수 있습니다.


충돌이 났으니 개발자가 직접 풀어야겠죠? 해당 hello.py를 열어서 충돌난 부분을 수정해서 적절하게 합쳐줍시다.

그리고 커밋해봅시다. 

참고로, 이번엔 add로 추적할 대상을 선택안했기때문에 git commit 이 아닌 git commit -a 를 쓰면됩니다.


> git commit -a -m "conflict resolved!"


충돌을 해결하니 master 브랜치도 merging이없어진것을 확인하실 수 있습니다.

충돌을 해결하였습니다.



9. git log 기록보기

> git log --graph

SHA값, 커밋한 사용자, 시각, 메세지등을 확인하실 수 있습니다. 브랜치가 생성되고, 분기되고 merge까지 되는것을 시각적으로 보실 수 도 있습니다.



> git log --stat

각 커밋에서 수정된 파일의 통계정보를 보여줍니다.

+ Recent posts