본문 바로가기

STUDY/GIT

2. Git 기초1 - 레포지토리, 라이프사이클

레포지토리 시작하기

 

Git는 레포지토리 단위로 버젼관리를 한다. 레포지토리는 2가지 방법으로 쓰기 시작할 수 있다. 첫번째는 로컬 디렉토리 하나를 Git 레포지토리로 설정하여 시작는 것이다. 두번째는 다른곳에 있는 Git 레포지토리를 가져와서 사용하는 것이다.

 

> mkdir my_project
> cd my_project
> git init

my_project라는 폴더를 만들고 해당 폴더로 이동한 후 git init 명령어를 사용하여 해당 폴더를 Git 레포지토리로 만들었다.

 

> git clone https://github.com/libgit2/libgit2
> ls

libgit2라는 외부 레포지토리를 가져오는 명령어이다. git clone 이후 libgit2 폴더가 생성된것을 확인할 수 있다.

 

 


레포지토리 파일의 라이프 사이클

 

레포지토리에 포함된 모든 파일은 각각의 파일 상태를 가지고 있다. Git를 올바르게 사용하기 위해서는 각각 상태에 대한 이해가 필요하다.

  • Untracked: 레포지토리에 존재하는 파일이지만 Git 관리 대상이 아닌 파일
  • Unmodified: Git 관리대상 파일 중 수정사항이 없는 파일
  • Modified: Git 관리대상 파일 중 수정사항이 있는 파일
  • Staged: Git 관리대상 파일 중 수정사항이 기록될 파일

 

> git status
현재 브랜치 master

아직 커밋이 없습니다

커밋할 사항 없음 (파일을 만들거나 복사하고 "git add"를 사용하면 추적합니다)

git status 명령어로 각 파일들의 상태를 확인할 수 있다. 방금 만들어진 my_project 레포지토리로 이동한 이후 git status 명령어를 입력하면 아직 아무 파일도 없기 때문에 아무런 내용도 나오지 않는다.

 

> echo "newfile" > newfile
> git status
현재 브랜치 master

아직 커밋이 없습니다

추적하지 않는 파일:
  (커밋할 사항에 포함하려면 "git add <파일>..."을 사용하십시오)
	newfile

echo 명령어를 사용하여 newfile을 생성한 이후 git status 명령어를 실행해보면 untracked 상태인 newfile이 있다는 것을 볼 수 있다.

 

> git add newfile
> git status
현재 브랜치 master

아직 커밋이 없습니다

커밋할 변경 사항:
  (스테이지 해제하려면 "git rm --cached <파일>..."을 사용하십시오)
	새 파일:       newfile

git add 명령어로 newfile을 git의 커밋대상에 포함시 킬 수 있다. 이후 git status를 보면 staged 상태인 newfile이 있는 것을 볼 수 있다.

 

> echo "" > newfile
> git status
현재 브랜치 master
커밋하도록 정하지 않은 변경 사항:
  (무엇을 커밋할지 바꾸려면 "git add <파일>..."을 사용하십시오)
  (작업 디렉토리의 변경을 무시하려면 "git restore <file>..."을 사용하시오)
	수정함:        newfile

echo 명령어로 newfile을 수정했다. 이후 git status를 보면 modified 상태인 newfile이 있는 것을 볼 수 있다.

 

 


파일 무시하기

 

> mkdir dir
> echo "" > dir/newfile2
> mkdir dir/dir
> echo "" > dir/dir/newfile3
> git status
현재 브랜치 master
추적하지 않는 파일:
  (커밋할 사항에 포함하려면 "git add <파일>..."을 사용하십시오)
	dir/

레포지토리에 파일을 추가하면 언제든 관리대상에 들어갈 수 있다. 하지만 어떤 파일은 git에 관리대상 포함될 필요가 없을 수 있다. 이때 git에서 아예 해당 파일을 무시하도록 설정 할 수 있다.

 

> vim .gitignore
dir/
> git status
현재 브랜치 master
추적하지 않는 파일:
  (커밋할 사항에 포함하려면 "git add <파일>..."을 사용하십시오)
	.gitignore

.gitignore에 무시할 파일을 설정해줄 수 있다. dir/ 폴더에 파일들을 무시한다고 설정했기 때문에 git status에 dir/이 사라졌다.

 

.gitignore 규칙
- 아무것도 없는 라인이나, `#`로 시작하는 라인은 무시한다.
- 표준 Glob 패턴을 사용한다. 이는 프로젝트 전체에 적용된다.
- 슬래시(/)로 시작하면 하위 디렉토리에 적용되지(Recursivity) 않는다.
- 디렉토리는 슬래시(/)를 끝에 사용하는 것으로 표현한다.
- 느낌표(!)로 시작하는 패턴의 파일은 무시하지 않는다.

 

 


변경내용 보기

 

> git status
현재 브랜치 master
커밋하도록 정하지 않은 변경 사항:
  (무엇을 커밋할지 바꾸려면 "git add <파일>..."을 사용하십시오)
  (작업 디렉토리의 변경을 무시하려면 "git restore <file>..."을 사용하시오)
	수정함:        newfile
> git diff

git diff 명령어를 사용하면 modified 상태인 변경사항을 볼 수 있다.

 

> git add newfile
> git status
현재 브랜치 master
커밋할 변경 사항:
  (스테이지에서 제외하려면 "git restore --staged <file>..."을 사용하시오)
	수정함:        newfile
> git diff --staged

--staged 옵션을 추가하면 staged 상태인 변경사항을 볼 수 있다.

 

 


변경사항 커밋하기

 

> git status
> git commit -m "message"
> git status

stage 상태까지 올라간 수정사항들은 커밋을 해야 비로소 하나의 버전으로서 레포지토리에 기록된다. git commit 전후로 git status 결과를 보면 staged 상태인 파일들이 unmodified 상태로 변경되고 사라진것을 볼 수 있다.

 

 


파일 삭제하기

 

> rm newfile
> git status
현재 브랜치 master
커밋하도록 정하지 않은 변경 사항:
  (무엇을 커밋할지 바꾸려면 "git add/rm <파일>..."을 사용하십시오)
  (작업 디렉토리의 변경을 무시하려면 "git restore <file>..."을 사용하시오)
	삭제함:        newfile
> git restore newfile
> git rm newfile
> git status
현재 브랜치 master
커밋할 변경 사항:
  (스테이지에서 제외하려면 "git restore --staged <file>..."을 사용하시오)
	삭제함:        newfile

레포지토리의 파일을 삭제하면 기본적으로 modified 상태가 된다. git add 명령어를 통해 삭제된 내용을 staged까지 올려야한다. 하지만 git rm 명령어를 사용하면 파일이 삭제된 내용이 바로 staged까지 올라간다. 이와 유사하게 파일 명을 변경할 때 mv 대신 git mv 를 사용하는 것이 좋다.

 

728x90