본문 바로가기

Git 기초 사용법

Git Repository 만들기

1. 디렉토리를 git 저장소로 만들기 

특정 프로젝트(버전관리를 하지 않은)를 git으로 관리하고 싶은 경우 프로젝트의 디렉토리로 이동한다. 프로젝트의 디렉토리로 이동한 다음 다음 명령을 실행한다

git init
 

이 명령은 .git이라는 하위 디렉토리를 만든다.
.git 디렉토리에는 저장소에 필요한 뼈대파일이 들어있다.
하지만 아직 이 명령만으로는 프로젝트의 어떤 파일도 관리하지 않는다.
git이 파일을 관리하게 하려면 저장소에 파일을 추가하고 커밋해야 한다.

이후 github 또는 gitlab에 push 할려면 리모트 저장소를 지정해 줘야한다. 쉽게말해 어디다 올려야 할지 정해야 한다.
` git romte add origin `

git remote add origin https://gitlab.com/kimjaehyeon/jhkim
 
  • gitlab에 kimjaehyeon이라는 유저의 jhkim 프로젝트를 타겟으로 하겠다
  • 해당 프로젝트가 존재해야 한다.

2. 기존 저장소를 허브에서 clone 하기 

다른 프로젝트에 참여하거나, git 저장소를 복하사고 싶을 때 git clone 을 사용한다.
git 이 다른 vcs 와 가장 큰 차이점은 서버에 있는 거의 모든 데이터를 복사하는 것이다.
실제로 서버의 디스크가 망가져도 클라이언트 저장소 중 아무데서나 하나 가져와서 복구하면 된다.

git clone https://github.com/{user}/jhkim2
 

이 명령은 현재 디렉토리에 jhkim2라는 디렉토리를 만들고 그 안에 .git 디렉토리를 만들고, 저장소의 데이터를 모두 가져와 가장 최신 버전을 checkout 한다.

명령 뒤에 파라미터로 생성될 디렉토리의 이름을 부여할 수 있다.
다음과 같이 사용하면 동일한 파일이 jhkim3이라는 디렉토리로 생성된다.

git clone https://github.com/jhkim/jhkim2 jhkim3
 

파일의 상태 확인하기 

파일의 상태는

git status
 

명령을 사용한다.

Clone한 후 바로 이 명령어를 사용하면 

다음과 같은 결과를 볼 수 있다. 위 내용은 파일을 하나도 수정하지 않았음을 알려준다.
Untracked파일은 아직 없어서 목록에 나타나지 않는다.
여기서 파일을 하나 만들게 되면, Untracked files에 들어가게 된다.

 Git은 Untracked 파일을 아직 스냅샷에 넣어지지 않은 파일이라 보고 Tracked되기 전까지 그 파일을 절대 커밋하지 않는다. 고로 작업중 생성하게 되는 바이너리 파일 등을 커밋하는 실수를 하지 않게 된다.

Untracked 파일을

git add
 

명령어를 통해 tracked상태로 바꾼다.
이후

git status
 

명령어로 상태를 확인하면 다음과 같다는걸 알 수 있다. 

Changes to be committed에 있는 파일은 Staged 상태라는것을 의미한다. git add 라는 명령어를 통해 파일을 추적하고 관리(Tracked)하게 한다.
만약 Tracked된 객체가 디렉토리면 디렉토리하위의 모든 파일들까지 추가(추적)한다.

Modified상태의 파일 Stage하기(수정후 커밋) 

위에서 Tracked일떄는 Modified, Staged, Unmodified 세가지 상태라고 기술했다. 
Modified상태는 파일이 수정된 후 아직 Stage하지 않은 상태를 의미하고 실제로 해보면 다음과 같다.


‘Changes not staged for commit’는 수정한 상태이지만 아직 Staged상태는 아니라는 것이다.
이때

git add
 

명령어로 Stage상태로 만들어 준다.


이제 저 파일은 다음 커밋에 포함된다.
만약 이상태에서 02-42.txt파일을 수정하면 어떻게 될까? 
정답은 다음과 같이 Staged, unStaged 두가지 상태가 된다.


이때는 다시

git add
 

명령으로 다시 Staged상태로 만들어 줘야 한다.

파일의 상태 확인하기 

git status -s
git status --short    //간단하게 변경 내용을 보여주는 옵션
 

상태정보 컬럼에는 두가지를 보여준다.
플래그

  • 왼쪽 : Staging Area 에서 상태
  • 오른쪽 : Working Tree 에서 상태

파일 무시하기 

특정 파일을 Git 이 관리할 필요가 없을때 .gitignore 파일을 만들고 그 안에 무시할 파일 패턴을 적는다.
파일 이름이 .gitignore 이고 “.” 으로 시작하는 파일은 시스템 파일로 보이지 않는다.

.gitignore 파일에 입력하는 패턴은 다음 규칙을 따른다.

  • 아무것도 없는 라인이나, #로 시작하는 라인은 무시한다.
  • 표준 Glob 패턴을 사용한다. 이는 프로젝트 전체에 적용된다. //정규 표현식을 단순하게 만든 것, 보통 쉘에서 많이 사용함
  • 슬래시(/)로 시작하면 하위 디렉토리에 적용되지(Recursivity) 않는다.
  • 디렉토리는 슬래시(/)를 끝에 사용하는 것으로 표현한다.
  • 느낌표(!)로 시작하는 패턴의 파일은 무시하지 않는다.

.gitignore 를 사용하는 간단한 방식은 하나의 .gitignore파일을 최상위 디렉토리에 두고 모든 하위 디렉토리에까지 적용시키는 방식이다. 
물론 하위 디렉토리에도 .gitignore를 둘 수 있다.

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

단순히 변경되었다는 사실이 아니라 어떤 내용이 변경되었는지 보려면

git diff
 

명령을 사용해야한다.

사용하면 결과는 다음과 같다. 이 명령을 사용하면 아직 staged 상태가 아닌 파일을 비교해 볼 수 있다.
이 명령은 working directory Staging area 에 있는 파일을 비교한다.

수정 이전의 aa.txt 파일

수정 이후의 aa.txt 파일

만약 커밋한 것과 Staging area의 파일의 변경 부분을 비교하려면 --staged, --cached 옵션을 사용하면 된다.

변경사항 커밋하기 

커밋시 Modified 상태 파일은 커밋하지 않는다.
오로지 Staged 상태 파일만 커밋한다.
git status 로 확인하고 할 것

git commit
 

명령어로 커밋하면 다음과 같이 vi 편집기로 다음과 같은 내용이 켜진다 만약 vi 에디터가 켜지지 않고 다른 에디터가 켜지게 된다면

git config —global core.editor "vi"
 

명령어를 사용한다 

 자동생성되는 커밋 메시지의 첫 메시지는 비어있고, 두번째 라인부터

git status
 

명령의 결과로 채워진다. (만약 -v 옵션을 추가하면 diff 메시지도 추가된다.) 추가하려는 메시지를 작성하고 (원한다면 기존 내용을 지워도 됨) 저장 후 종료 :wq 하면 새로운 커밋 하나가 완성된다.

git commit -m
 

을 사용하면 바로 커밋이 가능하다. 

Staging Area 생략하기 

stage는 커밋할 데이터를 정리한다는 측면에서 편리하지만 이 과정을 거치는게 귀찮다면 -a 옵션을 추가하자.
이 옵션을 추가하면 모든 Tracked 상태 파일을 커밋한다.

commit내용 push 하기 

local에서 커밋을 했으면 그 내용을 git repository로 올려야 한다.
` git push ` 명령으로 현재 가장 최근의 commit을 git repository로 올린다.

파일 삭제하기 

git 에서 파일을 삭제하려면

git rm
 

명령으로 Tracked 상태의 파일을 삭제한 후 커밋해야 한다.
git 명령을 사용하지 않고 단순히 워킹 디렉터리(로컬 파일편집기)에서 삭제하면 git은 “Changes not staged for commit” 상태(즉 **Unstaged)로 표시한다.
그에 반해

git rm
 

으로 삭제한 파일은 staged 상태이다.

이제 커밋하면 git은 bb.txt 파일(git rm 으로 삭제한 파일)을 더는 추적하지 않는다.

만약 Staging area에서만 제거하고 working directory에는 남겨두고 싶을때는 (하드디스크에는 있지만 git은 추적하지 않는다) —cached옵션을 사용한다.

git rm --cached aa.txt
 

파일 이름 변경하기 

git mv aa.txt bb.txt
 

이 명령을 실행하고 git의 상태를 보면 git은 이름이 바뀐 사실을 알고있다. 

 사실 이 명령은 다음 명령어를 수행한것과 같다

mv aa.txt bb.txt
git rm aa.txt
git add bb.txt