본문으로 바로가기

개인) Git 수정하고 저장하기

category PROGRAM/공부자료 2019. 7. 5. 14:49
728x90
반응형

1. 파일의 상태 확인하기

파일의 상태를 확인하려면 보통 $ 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로 나온다.

 

2. README 파일을 만들어보자

 

$ echo 'My Project' > README

$ git status

On branch master

Your branch is up-to-date with 'origin/master'.

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

    README

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

 

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

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

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

파일이 Tracked 상태가 되기 전까지 Git은 절대 그파일을 커밋하지 않는다. 그래서 일하면서 생성하는 바이너리 파일 같은 것을 커밋하는 실수는 하지 않게 된다.

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

 

3. 파일을 새로 추적하기

git add 명령으로 파일을 새로 추적할 수 있다. 아래 명령을 실행하면 Git은 README파일을 추적한다.

 

$ git add README

git satus 명령을 다시 실행하면 README 파일이 Tracked 상태이면서 커밋에 추가될 Staged 상태라는것을 확인할 수 있다.

 

$ git status On branch master

Your branch is up-to-date with 'origin/master'.

Changes to be committed: (use "git reset HEAD <file>..." to unstage)

new file: README

 

Changes to be committed 에 들어있는 파일은 Staged 상태라는 것을 의미

커밋하면 git add를 실행한 시점의 파일이 커밋되어 저장소 히스토리에 남는다. 앞으로 git init 명령을 실행한 수 git add(files) 명령을 실행했던걸 기억할 것이다. 이 명령을 통해 디렉토리에 있는 파일을 추적하고 관리하도록 한다.

git add 명령은 파일 또는 디렉토리의 경로를 아규먼트로 받는다. 디렉토리면 아래에 있는 모든 파일까지 재귀적으로 추가한다.

 

4. Modified 상태의 파일을 Staged 하기

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

 

파일을 하나 더 추가하해서 git add 한다음 수정 후 git status 확인

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: CONT

 

이 CONT 파일은 Changes not staged for commit에 있다. 이것은 수정한 파일이 Tracked 상태이지만 아직 Staged 상태는 아니라는 것이다. Staged 상태로 만들려면 git add 명령을 싱해야 한다. 

git add 명령은 파일을 새로 추적할 때도 사용하고 수정한 파일을 Staged 상태로 만들때도 사용한다

Merge 할 때 충돌난 상태의 파일을 Resolve 상태로 만들때도 사용한다. add의 의미는 프로젝트에 파일을 추가한다기 보다 다음 커밋에 추가한다고 받아들이는게 좋다 git add 명령을 실행하여 CONT 파일을 Staged 상태로 만들고 git status 명령으로 결과를 확인해보자.

 

두 파일 모두 Staged 상태이므로 다음 커밋에 포함된다.

여기에서 추가로 CONT파일을 수정한 뒤 git status로 확인

 

$ git status

On branch master

Your branch is up-to-date with 'origin/master'.

Changes to be committed: (use "git reset HEAD <file>..." to unstage)

new file: README

modified: CONT

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: CONT

 

CONT 파일이 Staged 상태이면서 동시에 Unstaged 상태로 나온다. 이렇게 나오는 이유는 git add명령을 실행하면 git은 파일을 바로 staged 상태로 만든다. 지금 이 시점에 커밋을 하면 git commit 명령을 실행하는 시점의 버전이 커밋되는 것이 아니라 마지막으로 git add 명령을 실행했을 때의 버전이 커밋된다. 그러므로 git add 명령을 실행한 후에 또 파일을 수정하면 git add 명령을 다시 실행해서 최신을 staged 상태로 만들어야 한다.

 

$ git add CONT

$ git status On branch master

Your branch is up-to-date with 'origin/master'.

Changes to be committed:

(use "git reset HEAD <file>..." to unstage)

new file: README

modified: CONT

 

5. 파일 상태를 짤막하게 확인하기

git status 명령을 확인할 수 있는 내용이 많아 보일 수 있다.

이럴 때 간단하게 표기 하는방법은 git status -s 또는 git status --short 처럼 옵션을 주면 현재 변경한 상태를 짤막하게 보여준다.

추적하지 않은 새파일은 앞에 ??

staged 상태로 추가한 파일 중 새로 생성한 파일 앞에는 A

수정한 파일 앞에는 M 

표시가 붙는다.

 

6. 파일 무시하기

어떤 파일은 git이 관리할 필요가 없다. 보통 로그 파일이나 빌드 시스템이 자동으로 생성한 파일은 그렇다. 그런 파일을 무시하려면 .gitignore 파일을 만들고 그 안에 무시할 파일 패턴을 적는다.

예시)

$ cat .gitignore

*.[oa]

*~

 

첫번째 라인은 확장자가 ".o"나 ".a"인 파일을 git이 무시하라는 것이고

둘째 라인은 ~로 끝나는 모든 파일을 무시하라는 것이다

 

보통 대부분의 텍스트 편집기에서 임시파일로 사용하는 파일 이름이기 때문에 o와 a는 각각 오브젝트와 아카이브 파일이고 ~로 끝나는 파일을 Emacs나 VI같은 텍스트 편집기가 임시로 만들어내는 파일이다. 또 log, tmp, pid 같은 디렉토리나, 자동으로 생성하는 문서 같은것들도 추가할 수 있다.

.gitignore 파일은 보통 처음에 만들어 두는 것이 편리하다. 그래서 git저장소에 커밋하고 싶지 않은 파일을 실수로 커밋하는 일을 방지할 수 있다.

 

.gitignore 패턴은 아래 규칙을 따른다.

- 아무것도 없는 라인이나, '#'로 시작하는 라인은 무시

- 표준 Glob 패턴을 사용. 이는 프로젝트 전체에 적용

- 슬래시(/)로 시작하면 하위 디렉토리에 적용되지 않는다.

- 디렉토리는 슬래시(/)를 끝에 사용하는 것으로 표현

- 느낌표(!)로 시작하는 패턴의 파일은 무시하지 않는다.

 

예시)

# 확장자가.a인 파일 무시

*.a

 

# 윗 라인에서 확장자가 .a인 파일은 무시하게 했지만 lib.a는 무시하지 않음

!lib.a

 

# 현재 디렉토리에 있는 TODO파일은 무시하고 subdir/TODO처럼 하위디렉토리에 있는 파일은 무시하지 않음

/TODO

 

# build/ 디렉토리에 있는 모든 파일은 무시

build/

 

# doc/notes.txt 파일은 무시하고 doc/server/arch.txt 파일은 무시하지 않음

doc/*.txt

 

# doc 디렉토리 아래의 모든 .pdf 파일을 무시

doc/**/*.pdf

728x90
반응형

'PROGRAM > 공부자료' 카테고리의 다른 글

Git 오류 메세지 모음  (0) 2019.07.05
개인) Git 세가지 단계, 파일 라이프 사이클  (0) 2019.07.04
개인) Git / GitHub  (0) 2019.07.04