일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Hash
- Stored Procedure
- SQL
- two pointer
- 이진탐색
- Dijkstra
- Brute Force
- 그래프
- 다익스트라
- Trie
- String
- binary search
- 스토어드 프로시저
- union find
- DP
- MYSQL
- Two Points
Archives
- Today
- Total
codingfarm
Git으로 파일 관리하기 본문
- 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