버전 관리 시스템 (형상 관리 도구, configuration management tool) 중 하나이다.
소스코드를 효과적으로 관리할 수 있게 해주는 무료 공개 소프트웨어이다.
git init
: 명령으로 .git
이라는 이름으로 생성된다.git clone
: 원격 저장소를 복사해서 가져올 때, 생성된 폴더 안에 .git
디렉토리를 만들고, 원격 저장소의 모든 데이터를 복사해서 가져온다.checkout
해온 것이며, 이곳에서 프로젝트 작업을 진행하게 된다.git clone
DIR
: 저장소를 로컬에 복제할 위치이며 생략가능하다. 폴더이름을 입력하면 새폴더가 생성되고 그 안에 코드가 다운로드된다. 생략하면 깃허브 프로젝트 이름으로 폴더가 자동으로 생기고 그 안에 코드가 다운로드된다.git clone (복사한주소) (DIR)
git clone
vs git pull
git clone
: 로컬 저장소의 내용이 원격 저장소의 내용과 일치해진다.git pull
: 원격 저장소의 내용을 가져와서 현재 브랜치와 병합 (merge)까지 진행한다.git status
git add
후 수정파일이 Staged 상태에도 있고 Modified 상태에도 있는 것을 확인할 수 있다.
Staging Area에 있는 파일은 워킹 디렉토리의 파일이 옮겨지는 것이 아니라 복사되는 것이다. 그렇기 때문에 `git add`를 한 후 그 파일을 수정하게 되면 Staging Area에 있는 파일에는 수정내용이 반영되지 않는다. 따라서 하나의 파일이 위와 같은 두 개의 상태를 가질 수 있다.
또한 이대로 commit하게 된다면 수정사항은 반영되지 않고 리포지토리로 올라간다.
git checkout — 파일이름
워킹 디렉토리의 modified 특정 파일을 가장 최근 커밋 버전으로 되돌릴 수 있다. 즉, 워킹 디렉토리에서의 수정 사항을 제거한다. 하지만 이 기능은 되돌릴 수 없으니 주의해야 한다.
git rm —cached 파일이름
한 번 `git add` 를 해주시면 직접 `git rm --cached 파일이름` 명령어를 이용하지 않는 이상 Untracked 상태가 되지 않는다.
참고 : https://github.com/yeoseon/tip-archive/issues/85
https://seonkyukim.github.io/git-tutorial/git-status/
git add
git add
: 작업 디렉토리(working directory) 상의 변경 내용을 스테이징 영역(staging area)에 추가하기 위해서 사용하는 Git 명령어입니다.git add .
: 현재 디렉토리의 추적되는 파일 모두 addgit add 파일명 파일명 ... 파일명
: 파일 여러개 addgit add -A
: 저장소 내 모든 파일 addgit add -p
: 변경 사항을 터미널으로 확인하면서 스테이징으로 넘기거나 제외시킴y - stage this hunk
n - do not stage this hunk
q - quit; do not stage this hunk or any of the remaining ones
a - stage this hunk and all later hunks in the file
d - do not stage this hunk or any of the later hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk
s - split the current hunk into smaller hunks
e - manually edit the current hunk
? - print help
자주 사용되는 명령어는 y, n, q, s, e입니다.git add —update
: 현재 git이 추적하고 있는 파일만 add (새로 만든 파일은 올라가지 ㅇ낳음)git rm —cached
: add 된 파일 취소하나씩 git repository에 넣는 것은 번거로워 보통 git add . 를 이용해 변경된 전체 파일을 추가하고 커밋한다.
그러나
.iml
, .idea/
등등등은 git add에 포함시키지 않는다.
이때 .gitignore 파일을 만들고 그 안에 무시할 파일 패턴을 적는다.
$ cat .gitignore
*.[oa]
*~
첫번째 라인은 확장자가 “.o” 나 “.a” 인 파일을 Git이 무시하라는 것이고 둘째 라인은 ~
로 끝나는 모든 파일을 무시하라는 것이다. 보통 대부분의 텍스트 편집기에서 임시파일로 사용하는 파일 이름이기 때문이다. “.o” 와 “.a” 는 각각 빌드 시스템이 만들어내는 오브젝트와 아카이브 파일이고 ~
로 끝나는 파일은 Emacs나 VI 같은 텍스트 편집기가 임시로 만들어내는 파일이다. 또 log, tmp, pid 같은 디렉토리나, 자동으로 생성하는 문서 같은 것들도 추가할 수 있다..gitignore
파일은 보통 처음에 만들어 두는 것이 편리하다. 그래서 Git 저장소에 커밋하고 싶지 않은 파일을 실수로 커밋하는 일을 방지할 수 있다.
.gitignore
파일에 입력하는 패턴은 아래 규칙을 따른다.
#
로 시작하는 라인은 무시한다./
)로 시작하면 하위 디렉토리에 적용되지(Recursivity) 않는다./
)를 끝에 사용하는 것으로 표현한다.!
)로 시작하는 패턴의 파일은 무시하지 않는다.Glob 패턴은 정규표현식을 단순하게 만든 것으로 생각하면 되고 보통 쉘에서 많이 사용한다. 애스터리스크(*
)는 문자가 하나도 없거나 하나 이상을 의미하고, [abc]
는 중괄호 안에 있는 문자 중 하나를 의미한다(그러니까 이 경우에는 a, b, c). 물음표(?
)는 문자 하나를 말하고, [0-9]
처럼 중괄호 안의 캐릭터 사이에 하이픈(-
)을 사용하면 그 캐릭터 사이에 있는 문자 하나를 말한다. 애스터리스크 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
# 수업 중 작성
*.iml
java-project/.idea
java-project/out
gitignore 파일 수정 후 이미 원격 저장소에 올라간 파일들을 삭제하는 방법
git rm -r --cached . (현재 레포지토리의 캐시를 모두 삭제한다.)
git add .
git status
git commit -m "커밋메세지"
참고:https://devlog-wjdrbs96.tistory.com/237
https://github.com/github/gitignore
www.toptal.com/developers/gitignore