[정보] Git을 이용한 형상관리 #2 - Git 저장소, 생성, 수정, 커밋

안녕하세요 남산돈가스입니다. 지난 시간에 이어 Git를 이용한 형상관리 포스팅을 이어서 진행하겠습니다.


1. Git 저장소 만들기

Git 저장소를 만든느 방법은 두 가지가 있습니다. 첫번째로는 기존 프로젝트를 Git저장소로 만드는 방법이 있고, 두번째는 다른 서버 저장소에 있는 Git을 Clone하는 방법이 있습니다.

1) 기존 디렉토리를 Git저장소로 만들기
기존 프로젝트를 Git으로 관리하고 싶을 때, 해당 프로젝트의 경로로 이동합니다.

$ git init

git init 명령어를 실행하면 해당 프로젝트 경로에 .git 이라는 디렉토리가 생성됩니다. 이 .git 디렉토리는 저장소에 필요한 뼈대 파일이 들어있습니다. 이 명령만으로는 아직 프로젝트의 어떤 파일도 관리하지 않은 상태입니다. Git이 파일을 관리하게 하려면 저장소에 파일을 추가하고 커밋을 해야합니다.

$ git add ./*
$ git commit -m 'my first commit!!'

해당 디렉토리 하위의 있는 모든 파일을 Git 저장소에 add한 뒤 commit 명령어를 이용해 저장소에 추가한 파일을 commit 하였습니다.

2) 기존 저장소를 Clone 하기

Git 저장소를 복사하고 싶을 땐 git clone 명령을 사용합니다.

$ git clone [url]

url 안에 복사할 저장소의 url를 입력하면 됩니다. 지원하는 프로토콜은 https, git, ssh 등이 있습니다.

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

git init이나 clone을 이용하여 저장소를 생성해보았습니다. 이제 실제 파일을 수정하고 파일의 스냅샷을 커밋해보겠습니다.
 워킹 디렉토리의 모든 파일은 크게 Tracked(관리대상인) 파일과 Untracked(아닌) 파일로 나뉜다. Tracked파일은 이미 스냅샷에 포함되어 있던 파일을 말합니다. 또 Tracked파일은 Unmodified(수정되지 않은) 와 Modified(수정 된) , 그리고 Staged(커밋으로 저장소에 기록 할) 로 나뉩니다. 그리고 그 이외의 파일들은 모두 Untracked파일로 분류됩니다. Untracked파일은 워킹 디렉토리에 있는 파일 중 스냅샷에도 Staging Area에도 포함되지 않은 파일을 얘기합니다. 처음 저장소를 Clone 하면 모든 파일은 Tracked이면서 Unmodified 상태입니다. 마지막 커밋 이후 아무것도 수정하지 않은 상태에서 어떤 파일을 수정하게 되면 Git에선 그 파일을 Modified 상태로 인식합니다. 이제 이 파일을 실제로 커밋하기 위해서는 파일을 Staged 상태로 만들고, Staged 상태의 파일을 커밋하면 됩니다. 이렇게 장황하게 설명한 내용은 아래 그림을 통해 쉽게 이해할 수 있습니다.

3. 파일의 상태 확인하기

git 프로젝트의 상태를 확인하려면 git status 명령을 사용해 확인할 수 있습니다.

$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

 dev-ndp-api/npm-debug.log

nothing added to commit but untracked files present (use "git add" to track)

제 프로젝트에서 git status 명령을 실행해보니 위와 같은 결과가 출력되었습니다.
npm-debug.log라는 파일이 Untracked files 에 속해 있는 것을 확인하실 수 있는데 부가 설명으로 untracked되어있는 파일을 git add명령어를 통해 추가하고 committed을 진행하라는 말도 확인 할 수 있습니다. 그럼 설명대로 add하여 commit을 해보겠습니다.

4. 파일을 새로 추적하기
$ git add dev-ndp-api/npm-debug.log
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

 new file:   dev-ndp-api/npm-debug.log

untracked 파일을 add 한 후 다시 status 명령어를 실행한 결과입니다. Changes to be committed에 속해있는 파일은 Staged 상태라는 것을 의미합니다.

5. Modified 상태의 파일을 Stage 하기
 새로운 파일을 add 해보았는데 그렇다면 이번엔 이미 Tracked 상태인 파일을 수정해보겠습니다. app.js라는 파일을 수정하고 git status 명령을 다시 실행해보겠습니다.

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

 new file:   npm-debug.log

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

 modified:   app.js

Changes not staged for commit 에 app.js가 속해있는 것을 확인할 수 있습니다. tracked상태였던 파일을 수정하였더니 modified 상태가 되었습니다. 그러면 이 워킹디렉토리에 있는 수정 된 app.js파일을 다시 staged로 만드려면 add를 해주면 됩니다.

6. 변경사항 커밋하기
새로운 파일을 만들어서 git add를 이용해 staged 상태로 만들었습니다. 그리고 기존의 tracked 상태인 파일 또한 수정하고 add를 이용해 staged 상태로 만들어보았습니다. 이제 실제 git 저장소에 커밋하기 위하여 git commit 명령을 실행합니다.

$ git commit

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
#       modified:   dev-ndp-api/app.js
#       new file:   dev-ndp-api/npm-debug.log
#

git commit 명령을 실행하면 vim 편집기가 실행되면서 커밋 될 파일을 확인합니다. 저장하면 커밋이 진행됩니다.

오늘은 Git 저장소를 생성하고, 파일을 생성하고 변경하여 추가하고 Commit까지 해보았습니다. 감사합니다.

댓글

주간 인기글

[정보] 인스타그램은 당신의 소리를 '듣고' 있을 수도 있습니다

남산 케이블카 이야기

[Angular] 모델, 값이 바뀌었는데 화면 template 이 업데이트 되지 않을 때 조치 팁

안드로이드에서 당겨서 새로고침(SwipeRefreshLayout) 쉽게 구현하기

Java8 Stream 가이드