본문 바로가기
[개발] 형상관리/Git

Git&Git-Flow - (1) 형상관리시스템 Git

by Devsong26 2018. 5. 20.

Git이란?

- 개발 산출물을 관리해주는 형상관리시스템

- 중앙 집중형 버전 관리 시스템인 Subversion(SVN)과는 다르게 분산 버전 관리 시스템이며 version database가 Git 서버와 로컬 서버 양 쪽에서 가지고 있기 때문에 서버 database의 문제가 생길시에 local database를 이용해서 복원시킬 수 있다. 

 

 

Git의 특징

세가지의 상태를 가진다.

1. Staged : git의 최신버전과 내용이 달라진 파일들이 위치하는 영역

2. Modified : 수정된 파일

 

Staged와 Modified의 차이는 

둘 다 수정된 파일이지만 git add "파일명"의 명령어를 입력해야 Modified 상태의 파일이 Staged 영역으로 진입한다. 

 

3. Commited : Staged에 위치한 파일들을 .git 저장소에 새로운 버전으로 저장하는 것을 의미하며, 각각의 Commit은 메세지와 HashCode를 지닌다. 

HashCode는 reference이므로 그 값을 알고 있다면 Head를 이용하여 특정 HashCode값을 가지는 Commit의 위치로 이동가능하다.

 

 

Git의 저장방식

(그림 참고: KOSTA Git & Git-Flow)

먼저 버전관리 대상이되려면 파일이 Untracked에서 Tracked 상태로 변경되어야 하며 

파일을 추가 후 Stage 영역으로 올린 후 Commit하여 Track상태인 UnModified 상태로 변경시킨다. 

 

이 후, 파일을 수정하게 된다면 Modifed 상태가 되고 Staged 상태로 변경 후 Commit을 해야 최신버전 Commit에 이력이 포함된다. 

 

만약 더 이상 파일을 관리하고 싶지 않을 경우에는 파일을 삭제하면 된다. 

대신 이전 Commit들에는 해당 파일의 이력이 존재한다. 

 

 

Git 명령어

1. git 사용자 등록

Local PC의 git 사용자를 등록한다. 이 작업은 반드시 해주는 것이 좋다고 생각한다. 이유는 원격서버에 PUSH를 하게 되면 로컬 PC 사용자의 이름과 이메일이 남게되는데 사용자 설정을 하지 않으면 이전 PC 주인의 이름과 이메일이 표시가 되기 때문이다. 

 

git config --global user.name 사용자이름

git config --global user.email 사용자이메일

 

 

2. git 저장소

원격서버의 git repository를 clone을 통하여 로컬에 가져오거나 새로운 폴더를 git 저장소로 사용할 수 있다.

 

1) git 저장소 만들기 

원하는 폴더로 집입 후 아래의 명령어를 입력한다.

 

git init

 

2) 원격 서버 clone하기

 

git clone 주소

 

 

3. git 상태보기

Unmodied 상태 혹은 Staged 상태의 파일들을 확인할 수 있다.

 

git status

 

 

4. staged 영역에 수정한 파일 올리기

Mofidied 상태의 파일을 Staged 상태로 변경시킨다. 

 

git add 명령어를 이용하며 아래와 같다.

 

git add *.java

git add test.txt

 

 

5. Commit 

Staged 상태의 파일을 Commit한다. 이 때 어떤 이유로 파일을 수정했는지 알리기 위해 커밋 메세지는 반드시 써줘야 한다. 

 

git commit -m "커밋 메세지"

 

 

6. branch 생성하기

기본 branch는 master이며 그 외의 branch를 생성하고 싶을 경우에는 아래와 같이 명령어를 입력한다.

 

git branch 브랜치명

 

 

7. Head가 가리키는 Commit 변경하기

특정 위치의 Commit의 파일을 checkout해야할 경우에 사용하며

commit 노드 혹은 branch에 할 수 있다. 명령어를 입력 후에는 Head 위치가 지정한 commit Hashcode로 이동한다.

 

git checkout 브랜치명

git checkout Hashcode

 

 

8. branch간의 commit 이력을 merge하기

fast-forward merge와 3-way merge가 있다.

 

fast-forward merge는 hotFix가 master commit 라인에 있을 때 Upstream이라고 불리는데 이 때는 master가 merge를 하면 master가 가리키는 commit이 hotFix가 가리키는 commit으로 옮겨가면서 빠르게 merge가 되는 것을 말한다. 

 

3-way merge는 branch가 여러개일 경우, branch끼리 merge하는 경우에 이루어지는 merge를 말한다. hotFix와 Issue를 merge할 때는 공통 조상인 Master의 commit을 포함한 hotFix, Issue가 가리키는 각각의 commit을 합쳐서 새로운 Commit인 C4를 만들어 낸다. 

 

merge를 하기에 앞서 현재 git branch를 명령어를 통해서 HEAD가 가리키는 branch가 어딘지 확인한다. 그 후에 아래와 같이 merge하면 된다.

 

git merge 브랜치명

 

'[개발] 형상관리 > Git' 카테고리의 다른 글

특정 사용자가 작성한 커밋만 확인하는 방법  (0) 2024.08.06
Git Rebase  (0) 2023.12.06
Git Revert  (1) 2023.11.09