2.1 Git 저장소 만들기
- Git 저장소를 만드는 방법에는 2가지가 있다.
- 기존 directory를 Git 저장소로 만들기
- 기존 repository를 clone 하기
2.1.1 기존 directory를 Git 저장소로 만들기
git init
git add
git commit -m ‘message’
- 기존 project를 Git으로 관리하고 싶을 때,
프로젝트의 directory 경로
로 이동해서 아래 명령을 실행한다.
|
|
git init
은.git
이라는 하위 directory를 만든다..git
directory 안에는 저장소에 필요한 뼈대 파일이 존재한다.- 하지만
.git
이 있다고 프로젝트의 파일이 관리되는 게 아니고, 저장소에 파일을 추가하고, 커밋해야 Git이 프로젝트를 관리한다.
❗❗ 주의사항: .git
폴더를 지우면 Git 관리내역이 삭제되어 과거의 내역으로 돌아갈 수 없다. (현 파일들은 유지)
2.1.2 기존 저장소를 clone 하기
git clone [url].git
- 언제 clone하는가?
- 다른 project에 참여하려거나 (contribute)
- Git 저장소를 복사하고 싶을 때
git clone
은 project history를 전부 복사한다.- 그래서, 서버의 디스크가 망가져도 client 저장소 중에서 아무거나 하나 가져와 복구하면 된다.
- (서버에만 적용하는 설정은 복구 불가능)
git-practice
코드를 복사하려는 상황이라면
|
|
- 이 명령으로
git-practice
라는 directory를 만들고, 그 안에.git
directory를 만든다. - 그리고, 저장소의 데이터를 모두 가져와서 최신 버전으로 checkout 해놓는다.
2.2 수정하고 저장소에 저장하기
‘2.1 저장소 만들기’ 를 통해서
- Git 저장소를 하나 만들었다.
- 만든 Git 저장소를 Working directory에 checkout 했다.
Chapter 2.2 내용을 들어가기에 앞서 한 가지 내용을 정리하겠다.
Working directory 의 모든 파일은
Tracked
와Untracked
로 나눠진다.Tracked
파일은Unmodified
,Modified
그리고,Staged
로 나눠진다.- 나머지 파일은 다
Untracked
상태다. Untracked
상태는snapshot
에도,staging area
에도 포함되지 않은 파일이다.
처음 저장소를 clone 하면 이 저장소 안에 있는 파일은 아무것도 수정하지 않았기 때문에,
Tracked
상태이면서Unmodified
상태다.
- 다음으로 ‘2.2.1 파일의 상태 확인하기’ ~ ‘2.2.3 Modified 상태의 파일을 Stage 하기’ 내용을 정리하겠다.
- ‘2.2.1 파일의 상태 확인하기’ 에서는
git status
명령어를 배운다. - ‘2.2.2 파일을 새로 추적하기’ 와 ‘2.2.3 Modified 상태의 파일을 Stage 하기’ 에서는
git add
명령어를 배운다.
2.2.1 git status
git status
는 현재 파일의 상태를 확인하기 위해 사용되는 명령어다.
git status
명령어로 파일의 상태를 먼저 확인하자.1 2 3
> git status On branch master nothing to commit, working directory clean
위 코드의 의미는 다음과 같다.
- 현재 branch는 기본 branch인 master다.
- 현재
Tracked
이지만,Modified
상태인 파일이 없다.
만약
.git
을 삭제한 후,git status
를 입력하면, 다음과 같은 안내문이 뜬다.1
> fatal: not a git repository (or any of the parent directories): .git
git이 관리하지 않는다는 의미다. 그래서
.git
을 삭제하면 안된다.
2.2.2 git add
git add
명령어는
- 새로운 파일을 추적할 때 사용되는 명령어로서,
Untracked
상태에서Tracked
상태로 이동된다.- 새로운 파일을 추적할 때 뿐만 아니라, 수정한 파일을
Staged
상태로 만들 때에도 사용된다.- 파일을
프로젝트에
추가하는 명령어라기 보다는다음 커밋에
추가하는 명령어로 생각하자.
Untracked
|
|
echo 'My project' > README.md
명령어는 ‘My project’라는 내용을 가진README.md
파일을 만들라는 명령어다.- 파일을 만든 후,
git status
실행하면Untracked files
안에 새로 만든 파일이 있다는 걸 확인할 수 있다. - 이는
README.md
파일이Untracked
상태임을 말한다. - Git은
Untracked
상태의 파일을아직 snapshot에 존재하지 않는 파일
로 인식한다.
Untracked -> Tracked
|
|
- 새로 생긴 파일의 상태가
Changes to be committed
안으로 들어왔다. - 이는
Staged
상태임을 의미한다. 위에 개념에서 언급했듯이Staged
는Tracked
상태에 포함되므로,Tracked
상태이면서Staged
상태다. - 이 상태에서 커밋을 하면
git add
를 실행한 시점의 파일이 커밋되어, snapshot이 저장되어 저장소 히스토리에 남는다.
Tracked: Unmodified -> Modified
Tracked
상태인README.md
파일을 수정한 후,git status
를 입력해보자.
|
|
README.md
파일은Changes to be committed:
에 있다가Changes not staged for commit:
으로 옮겨졌다.- 이는 수정한 파일이
Tracked
상태이지만,Staged
상태는 아니라는 것이다. 즉, 수정된 파일이므로Modified
상태임을 말한다.
Tracked: Modified -> Staged
Modified
상태에서Staged
상태로 바꿔보자.
|
|
Changes to be committed:
로 옮겨졌다.Tracked
상태이면서Staged
상태로 되었다. 이는 커밋을 실행할 때 이 파일이 포함된다는 걸 의미한다.
Tacked: Staged & Unstaged
- 하지만, 더 수정할 게 있어 바로 커밋하지 못하는 상황이라고 생각해보자.
- 수정하고 나서
git status
를 입력했다.
|
|
Staged
상태이면서Unstaged
상태로 동시에 나온다.- 이게 가능한 이유는
git add
명령을 실행하면 바로Staged
상태로 만든다는 걸 위 예시를 통해 알았다. git add
했을 때의 시점에서의 파일이Staged
에 오른다.git add
후에 다시 수정을 했고, 수정한 후git add
를 하지 않았기 때문에unstaged
상태로도 나온다.- 즉,
git add
명령을 실행한 후에 또 파일을 수정하면git add
명령을 다시 실행해서 최신 버전을Staged
상태로 만들어야 한다.
Tracked: Unstaged -> Staged
|
|
Changes not staged for commit:
에서Changes to be committed:
로 옮겨졌다.- 최신 상태가
Staged
에 올랐다는 걸 확인할 수 있다.