Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

codingfarm

Git으로 파일 관리하기 본문

버전관리/git

Git으로 파일 관리하기

scarecrow1992 2020. 10. 31. 17:30

 

  • Git은 파일을 Untracked와 Tracked(Unmodified, Modified, Staged)상태로 분류한다.
    • Untracked : Git에 의해 관리받지 않는 상태
    • Tracked : Gitd에 의해 관리받는 상태
      • Unmodified : 마지막 커밋 이후 수정이 이루어지지 않음
      • Modified : 마지막 커밋 이후 수정이 일어남
      • Staged : 커밋을 하기위해 사전에 거치게 되는 상태

 

 

파일의 상태 확인하기

  • git status를 통해 파일의 상태를 확인할 수 있다.

  • 현재 작업중인 branch, 파일 상태를 보여준다.
  • 프로젝트에 README 파일을 새로 만들고 git status를 실행하면 Untracked files에 들어있음을 확인 가능하다.
  •  

  • README파일이 Untracked files에 속해 있음을 알 수 있다.

 

파일을 새로 추적하기

  • git add 명령으로 새로 추적 가능하다.
git add file_name

  • git add 명령을 실행한 시점의 파일이 커밋되어 저장소 히스토리에 남는다.
  • 이 명령을 통해 디렉토리에 있는 파일을 추적하고 관리하도록 한다.
  • 디렉토리를 argument로 넣으면 경로에 있는 모든 파일들 까지 재귀적으로 추가한다.
  • 와일드 카드 기능을 통해 한번에 여러개의 파일을 새로 추적 가능하다.

 

Modified 상태의 파일을 Stage 하기

  • Tracked 상태인 파일을 수정하는 방법을 알아본다.
  • CONTRIBUTING.md 라는 파일을 수정하고 git status 명령으로 상태를 확인한다.

  • git add 명령으로 CONTRIBUTING.md 파일을 git에 등록한다.

  • 이제 CONTRIBUTING.md 파일을 열어서 수정하고 상태를 확인해본다.

  • CONTRIBUTING.md 파일이 Staged 상태이면서 Unstaged 상태로 나온다.
  • git add 명령을 실행하면 Git은 파일을 바로 Staged 상태로 만든다.
  • git commit 명령을 실행하는 시점의 버전이 커밋되는게 아니라 마지막으로 git add 명령을 실행했을 때의 버전이 커밋된다.
  • 즉, git add 명령을 실행한 후 에 또 파일을 수정하면 git add 명령을 다시 실행해서 최신버전을 Staged 상태로 만들어야 한다.

 

파일 상태를 짧게 확인하기

  • git status 명령으로는 확인 가능한 내용이 많아 보인다.
  • -s 또는 --short 옵션으로 변경상태를 짤막하게 확인 할 수 있다.

  • ?? : 아직 추적하지 않는 새 파일
  • A : Staged 상태로 추가한 파일 중 새로 생성한 파일
  • M : 수정한 파일
  • 왼쪽 : Staging Area에서의 상태
  • 오른쪽 : Working Tree 에서의 상태
  • 가령 Modified_File의 경우 Git에 마지막으로 add 된 후 수정이 이루어 젔음을 나타낸다.

 

 

파일 무시하기

  • Git이 관리 할 필요가 없는 파일은 무시 할 수 있다.
  • .gitignore 파일을 만들고 그 안에 무시할 파일 패턴을 적는다.

  • text로 시작하는 파일명은 무시하도록 .gitignore 파일에 작성하였으며 이로 인해 git add 명령이 무시됨을 확인 할 수 있다.

  • 가령 위 처럼 작성할 경우 확장자가 ".o"나 ".a"인 파일을 Git이 무시하라는 것이고 둘째 라인은 "~"로 끝나는 모든 파일을 무시하라는 것이다.

 

  • .gitignore 파일에 입력하는 패턴은 아래 규칙을 따른다.
    • 아무것도 없는 라인이나, `#`로 시작하는 라인은 무시한다.
    • 표준 Glob 패턴을 사용한다.
    • 슬래스(/)로 시작하면 하위 디렉토리에 적용되지(Recursivity)않는다.
    • 디렉토리는 슬래시(/)를 끝에 사용하는 것으로 표현한다.
    • 느낌표(!)로 시작하는 패턴의 파일은 무시하지 않는다.
  • Glob 패턴은 정규 표현식을 단순하게 만든것이며 보통 쉘에서 많이 사용한다.
    • * : 문자가 하나도 없거나 하나 이상일 경우
    • [abc] : 중괄호 안에 있는 문자 중 하나
    • ? : 문자 하나
    • [0-0] : 캐릭터 사이에 하이픈(-)을 쓰면 그 캐릭터 사이에 있는 문자 하나를 의미
    • 애스터 리스크(*)을 2개 사용하여 디렉토리 안의 디렉토리 까지 지정 가능하다.
      • a/**/z : a/z, a/b/z, a/b/c/z 디렉토리에 사용 가능하다.
  • 아래는 .gitignore 파일의 예이다.
# 확장자가 .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

https://github.com/github/gitignore 사이트에서 gitignore를 활용 할 수 있는 적당한 예제를 찾을 수 있다.

 

 

 

Staged와 Unstaged 상태의 변경 내용을 보기

  • 단순히 파일의 변경 여부가 아닌 변경된 내용을 보려면 git status가 아닌 git diff 명령을 써야 한다.
  • 가령 Modified_File 파일에 "qzdz"문자를 제거하고  "added contents" 문자를 추가하면

  • 수정된 내용을 확인 할 수 있다.
  • git diff는 마지막으로 커밋한 후 수정된것들이 아닌, Unstaged 상태인 것들을 보여준다.
  • 가령 git add명령으로 수정한 파일을 Staging Area에 넣을경우 git diff 명령은 아무것도 출력하지 않는다.

 

 

변경사항 커밋하기

  • Unstaged 상태의 파일은 커밋되지 않으므로 git add 명령으로 Staging Area에 파일을 정리해야한다.
  • Git은 생성하거나 수정하고나서 git add 명령으로 추가하지 않은 파일을 커밋하지 않는다. 그 파일은 여전히 Modified 상태로 남아있다.
  • 커밋하기 전에 git status 명령으로 staged 상태인지 확인 가능하다. 그 후에 git commit 을 실행하여 커밋한다.
git commit
  • 그러면 git에 지정된 편집기가 실행된다.
  • 편집기는 쉘의 $EDITOR 환경 변수에 등록된 편집기이고 보통은 VIM이나 EMACS를 사용한다.
  • git config --global core.editor 명령으로 어떤 편집기를 쓸지 설정 가능하다.

  • 맨 첫줄은 비워저있고, 둘째줄부터 git status 명령의 결과가 채워진다.
  • 커밋한 내용을 쉽게 기억하도록 메시지를 전부 포함할 수 있고 전부 지운후 새로 작성도 할 수 있다.
  • 위 내용을 저장하면 커밋이 완료된다.

 

Staging Area 생략하기

  • Staging Area는 커밋할 파일을 정리한다는 점에서 유용하지만 복잡하고 불필요할때도 있다.
  • 그러므로 Staging Area를 생략할 방법이 존재한다.
  • git commit 명령을 실행할때 -a 옵션을 추가하면 Git은 Tracked 상태의 파일을 자동으로 Staging Area에 넣는다.
  • 그러므로 Git add 명령을 실행하는 수고를 덜 수 있다.

 

 

파일 삭제하기

  • 실제 파일을 삭제하더라도 git에 의해 관리받는 리스트에서는 지워지지 않는다.
  • GIT에서 파일을 제거하려면 git rm명령으로 Tracked 상태의 파일을 삭제한 후에 커밋해야한다.
  • 이 명령을 워킹 디렉토리에 있는 파일도 삭제하므로 실제 파일도 지워진다.

  • 위는 LICENSE.txt 파일을 삭제하는 과정이다.

 

staging area 에서만 제거할 경우

  • staging area에서만 제거하고 워킹 디렉토리에 있는 파일은 지우지 않을 경우
  • 즉, 하드디스크에 있는 파일은 그대로 두고 Git만 추적하지 않게 하고 싶을 경우
  • --cached 옵션을 사용하여 명령을 실행한다
git rm --cached README
  • git rm 명령에 file-glob 패턴을 사용하여 여러개의 파일이나 디렉터리를 한번에 삭제 가능하다.
git rm log/\*.log
  • 위 명령은 log/ 디렉토리에 있는 .log 파일을 모두 삭제한다.
git rm \*~
  • ~로 끝나는 파일을 모두 삭제한다.

 

'버전관리 > git' 카테고리의 다른 글

Git 저장소 만들기  (0) 2020.10.20
Git 설치 및 설정  (0) 2020.10.20
Git 기초  (0) 2020.10.18
버전 관리 시스템(VCS; Version Control System)  (0) 2020.10.18
Comments