ML/Git

Git의 기초

KAU 2020. 7. 26. 19:42

 

Git의 기초

저장소를 만들고 설정하는 방법

파일을 추적하거나(Track) 추적을 그만두는 방법

변경 내용을 Stage 하고 커밋하는 방법

파일이나 파일 패턴을 무시하도록 Git을 설정하는 방법

실수를 쉽고 빠르게 만회하는 방법

프로젝트 히스토리를 조회하고 커밋을 비교하는 방법

리모트 저장소에 Push하고 Pull 하는 방법을 살펴보자

 

Git 저장소 만들기

Git 저장소를 만드는 방법은 두 가지다.

기존 프로젝트나 디렉토리를 Git 저장소로 만드는 방법

다른 서버에 있는 저장소를 Clone 하는 방법

 

기존 디렉토리를 Git 저장소로 만들기

기존 프로젝트를 Git으로 관리하고 싶을 때, 프로젝트의 디렉토리로 이동한다.

운영체제에 따라서 명령코드가 다르다.

Linux: $ cd /home/user/your_repository
Mac: $ cd /Users/user/your_repository
Windows: $ cd /c/user/your_repository

그리고 아래와 같은 명령을 실행한다:

$ git init

이 명령은 .git 이라는 하위 디텍토리를 만든다.

.git 디렉토리에는 저장소에 필요한 뼈대 파일(Skeleton)이 들어있다.

이 명령만으로는 아직 프로젝트의 어떤 파일도 관리하지 않는다.

(.git 디렉토리가 막 만들어진 직후에 정확히 어떤 파일이 있는지에 대한 내용은 다음에 다루도록 하자)

 

Git이 파일을 관리하게 하려면 저장소에 파일을 추가하고 커밋해야 한다.

git add 명령으로 파일을 추가하고 git commit 명령으로 커밋한다.

 

$ git add *.c
$ git add LICENSE
$ git commit -m 'initial project version'

위의 명령어를 통해서 Git 저장소를 만들고 파일 버전 관리를 시작한다.

 

기존 저장소를 Clone 하기

다른 프로젝트에 참여하려하거나(Contribute) Git 저장소를 복사라고 싶을 때

git clone 명령을 사용한다.

Git이 Subversion과 다른 가장 큰 차이점은 서버에 있는 거의 모든 데이터를 복사한다는 것이다.

git clone을 사용하면 실행하면 프로젝트 히스토리를 전부 받아온다.

실제로 서버의 디스크가 망가져도 클라이언트 저장소 중에서 아무거나 하나 가져다가 복구하면 된다.

 

git clone [url] 명령으로 저장소를 Clone 한다. 

$ git clone https://github.com/libgit2/libgit2
 

libgit2/libgit2

A cross-platform, linkable library implementation of Git that you can use in your application. - libgit2/libgit2

github.com

이 명령은 'libgit2'이라는 디렉토리를 만들고 그 안에 .git 디렉토리를 만든다. 

그리고 저장소의 데이터를 모두 가져와서 자동으로 최신 버전을 Checkout해 놓는다.

libgit2 디렉토리로 이동하면 Checkout으로 생성한 파일을 볼 수 있고 당장 하고자하는 일을 시작할 수 있다.

 

$ git clone https://github.com/libgit2/libgit2 mylibgit

위와 같은 명령어를 사용하면 다른 디엑토리 이름으로 Clone 할 수 있다.

 

Git은 다양한 프로토콜을 지원한다.

 

https:// 

git://

user@server:path/to/repo.git  (SSH 프로토콜)

 

각 프로토콜은 장단점이 있으며 Git 저장소에 접근하는 방법이 다르다.

 

수정하고 저장소에 저장하기

Git 저장소를 만들었고 워킹 디렉토리에 Checkout도 했다.

이제는 파일을 수정하고 파일의 스냅샷을 커밋해보자. 

파일을 수정하다가 저장하고 싶으면 스냅샷을 커밋한다.

 

워킹 디렉토리의 모든 파일은 크게

Tracked(관리대상)와 Untracked(관리대상이 아님)으로 나눈다.

Tracked 파일은 이미 스냅샷에 포함돼 있던 파일이다.

 

Tracked 파일은

Unmodified(수정하지 않음)

Modified(수정함) 

Staged(커밋으로 저장소에 기록할)

상태 중 하나다.

 

나머지 파일은 모두 Untracked 파일이다.

Untracked 파일은 워킹 디렉토리에 있는

파일 중 스냅샷에도 

Staging Area에도 포함되지 않은 파일이다. 

 

처음 저장소를 Clone 하면 모든 파일은 Tracked이면서 Unmodified 상태이다.

파일을 Checkout 하고 나서 아무것도 수정하지 않았기 때문이다.

 

마지막 커밋 이후 아직 아무것도 수정하지 않은 상태에서 어떤 파일을 수정하면 

Git은 그 파일을 Modified 상태로 인식한다.

 

실제로 커밋을 하기 위해서는 이 수정한 파일을 Staged 상태로 만들고, Staged 상태의 파일을 커밋한다.

이런 라이프사이클을 계속 반복한다.

 

파일의 상태 확인하기

파일의 상태를 확인하려면 git status 명령을 사용한다.

Clone 한 후에 바로 이 명령을 실행하면 아래와 같은 메시지를 볼 수 있다.

 

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

위의 내용은 파일을 하나도 수정하지 않았다는 것을 말해준다.

Tracked 파일은 하나도 수정하지 않았다는 의미다.

Untracked 파일은 아직 없어서 목록에 나타나지 않는다.

그리고 현재 작업 중인 브랜치를 알려주며 서버의 같은 브랜치로부터 

진행된 작업이 없다는 것을 나타낸다.

기본 브랜치가 master이기 때문에 현재 브랜치 이름이 'master'로 나온다.

브랜치에 대한 내용은 다음에 자세하게 다루도록 하자.

 

프로젝트에 README 파일을 만들어보자. README 파일은 새로 만든 파일이기 때문에 

git status 를 실행하면 'Untracked files'에 들어있다.

 

$ echo 'My Project' > README
$ git status
On branch master Your branch is up-to-date with 'origin/master'.
Untracked files:  
    (use "git add ..." to include in what will be committed)  
   
      README
nothing added to commit but untracked files present (use "git add" to track)

README 파일은 Untracked files 부분에 속해 있는데 이것은 README 파일이 Untracked 상태라는 것을 말한다.

Git은 Untracked files 파일을 아직 스냅샷(커밋)에 넣어지지 않은 파일이라고 본다.

파일이 Tracked 상태가 되기 전까지는 Git은 절대 그 파일을 커밋하지 않는다.

README 파일을 추가해서 직접 Tracked 상태로 만들어 보자

 

파일을 새로 추적하기

git add 명령으로 파일을 새로 추적할 수 있다.

$ git add README

 위 명령어를 실행하면 Git은 README 파일을 추적한다.

 

git status 명령을 다시 실행하면 README 파일이 Tracked 상태이면서

커밋에 추가될 Staged 상태라는것을 확인할 수 있다.

 

Changes to be commited에 들어있는 파일은 Staged 상태라는 것을 의미한다. 커밋하면 git add를 실행한 시점의 파일이 커밋되어 저장소 히스토리에 남는다. 앞에서 git init 명령을 실행한 후,git add (files) 명령을 실행했던 걸 기억할것이다. 이 명령을 통해 디렉토리에 있는 파일을 추적하고 관리하도록 한다. git add 명령은 파일 또는 디렉토리의 경로를 아규먼트로 받는다. 디렉토리면 아래에 있는 모든 파일들까지 재귀적으로 추가한다.

 

Modified 상태의 파일을 Stage 하기

(=To position at a designated location, as in preparation for)

이미 Tracked 상태인 파일을 수정하는 법을 알아보자.

CONTRIBUTING.md

 

커밋 히스토리 조회하기

되돌리기

 

'ML > Git' 카테고리의 다른 글

git 을 간단하게 알아보자!  (0) 2020.09.23
Git 브랜치 기초  (0) 2020.07.27
Git의 기초 (2) 리모트 저장소  (0) 2020.07.27
Git 시작하기  (0) 2020.07.26