2. Git 으로 버전 관리하기
1. mkdir 로 diretory를 하나 생성한 다음 ' $ git init ' 명령어로 git를 사용할 수 있게 diretory를 초기화한다. 초기화가 완료되면 "Initialized empty Git repository..."라는 메시지를 띄운다.
.git 디렉토리는 윈도우 탐색기에서는 감추어져 있다. 숨김항목 보기를 체크하여 directory를 확인할 수 있다.
2. git의 버전관리 방식은 파일을 여러개 만들어서 수정 내용을 저장하는게 아니라 하나의 파일에 어떤 내용을 수정하였는지 저장한다. git의 working tree는 파일의 수정, 저장을 하는 directory로 hello-git directory가 working directory이다. stage는 버전으로 만들 파일이 대기하는 곳으로 working tree에서 10개의 파일을 수정하고 4개의 파일만 버전으로 만드려면 4개만 stage로 넘겨준다. repository는 stage에 대기하던 파일을 버전으로 만들어 저장하는 곳이다. stage와 repository는 .git directory에 숨김 파일 형태로 존재한다.
Working Tree에서 문서를 수정하고 >> 수정한 파일 중 버전으로 만들 파일을 Stage에 저장하고 >> repository로 commit하여 버전을 생성한다.
$ git status
$vim hello.text에 하나의 파일을 저장하자. :wq로 만든 파일 저장
다시 $ git status를 하면 untracked file이 있다고 한다. 한번도 버전 관리가 되지 않은 파일이 있음을 뜻한다.
이 과정이 working tree에서 문서 파일을 만들었다.
수정한 파일을 stage에 추가하는 것을 staging / stage에 올린다고 한다.
$ git add hello.txt >> Error가 생기더라도 무시하자. eol(개행 문자, 줄바꿈 문자)는 줄이 바뀔 때 삽입되는 문자로 윈도우에서는 CR/LF 문자가 삽입되고 리눅스나 맥에서는 LF문자만 사용되기 때문에 경고 메시지가 뜨는 것이다.
$ git commit -m "message 1" : 함께 저장할 메시지와 함께 커밋한다.
다시 $ git status에서는 nothing to commit 과 working tree clean이 나타난다.
이 과정이 repository에 최종적으로 파일을 커밋한다.
$ git log는 저장소에서 버전을 확인할 때 사용한다. 만든 사람 / 만든 시간 / 메시지가 나타난다.
$ git mv 파일이름 새파일이름 : 파일 이름을 변경할 수 있다.
3. staging 과 commit을 한번에 해보자
$ vim hello.txt를 열어 파일을 수정하자 (a > 내용 추가 > Esc > :wq)
$ git commit -am "message2" : 한번 커밋한 파일을 staging & commit 을 동시에 한다.
4. 커밋 내용 확인하기 COMMIT LOG
commit 뒤에 commit hash / git hash는 커밋을 구별하는 해쉬이다. (HEAD > master)는 최신 버전임을 표시하며 Author Date 는 당연히 만든이, 버전 날짜, 그리고 메시지가 출력된다.
$ git deff는 working tree에 있는 파일과 stage에 있는 파일 / stage와 repository에 있는 파일을 비교하여 수정한 파일을 커밋 전에 검토할 수 있다.
5.
working tree에 있는 파일은 tracked 와 untracked로 나누어진다. git은 한번이라도 커밋한 파일을 계속 추정하기 때문에 tracked 파일로 표시하고 한번도 버전 관리가 안된 파일을 untracked filed로 표시한다. tracked 상태의 파일은 status 명령을 통해 working tree가 비어있을 경우에 unmodified / 파일을 수정하고 stage에 올리기 전을 modified / git add 로 커밋 직전을 staged 상태로 구분한다.
$ git log -stat : 커밋 관련된 파일을 함께 볼 수 있다. 로그 메시지가 길면 화면을 나누어서 보여주며 enter 키로 화면을 넘길 수 있다. Q를 눌러 로그 화면을 종료한다.
.gitignore 파일은 그 안에 버전관리를 하지 않을 파일이나 directory, 파일 확장자를 입력할 수 있다. 주로 개인적인 파일이나 자동으로 생성되는 swp파일, 백업 파일이 포함된다.
$ git commit --ammed : 가장 최근의 커밋 메시지를 수정한다.
6.
$ git checkout -- hello.txt : 작업트리에서 수정한 내용을 취소하는데 사용한다.
$ git reset HEAD hello.txt : staging 된 파일을 취소하는데 사용한다.
$ git reset HEAD^ : 가장 마지막의 커밋을 취소하는 방법
$ git reset 커밋해쉬 : 특정 버전으로 되돌린 다음 이후 버전 삭제
$ git revert : 커밋을 삭제하지 않고 되돌리기