Git 시작하기

git config

OS에 맞게 Git을 설치한 후 사용환경을 설정할 때 git config를 이용한다. 먼저 사용자 이름과 이메일 주소를 설정한다. 이 정보는 Git을 커밋할 때마다 사용되며 한 번 커밋한 후에는 변경할 수 없다.

$ git config --global user.name John Doe
$ git config --global user.email johndoe@example.com

--global 옵션을 설정하는 것은 한 번만 하면 된다. 만약 프로젝트마다 다른 이름과 이메일 주소를 사용하고 싶을 때는 이 옵션을 빼고 실행하면 된다.

Git에서 사용할 편집기도 설정할 수 있다. 보통 Vi나 Vim으로 되어 있고 emacs나 notepad 등 원하는 것으로 설정할 수 있다.

$ git config --global core.editor emacs
$ git config --global core.editor 

명령어를 실행한 후 fatal: not in a git directory 에러가 뜨면 git init 명령어를 실행한 후 다시 실행하면 된다. 마지막으로 git의 설정들을 확인할 수 있다. 앞에서 설정한 사용자 이름과 이메일 외에도 여러 설정들을 볼 수 있다. 설정을 확인한 후 다시 bash로 돌아갈 때는 :q를 입력한다.

$ git config --list

git init & git clone

Git 저장소를 만들 때는 기존 프로젝트를 git 저장소를 만들거나 서버의 저장소를 clone하는 두 가지 경우가 있다. myproject라는 디렉토리를 git 저장소로 만들고 그 안에 있는 파일을 추가하고 싶다고 가정할 때 아래와 같이 진행할 수 있다. git init 명령어로 .git 폴더를 생성하고 git add . 명령어로 폴더 내의 모든 파일을 추가한다. 그 후 git commit -m 명령어로 커밋 메세지를 함께 입력하며 커밋한다. git remote add 명령어로 remote 이름과 리모트 저장소 주소를 추가한다. remote 이름은 origin이 아닌 본인이 원하는 것으로 지정할 수 있다. 마지막으로 git push origin master 명령어로 커밋한 것을 리모트 저장소에 추가한다.

$ git init
$ git add .
$ git commit -m'first commit'
$ git remote add origin https://github.com/username/project.git
$ git push origin master

clone하는 경우 좀 더 간단하다. git clone 뒤에 리모트 저장소 주소를 써서 추가한다. 두번째 명령어를 보면 주소 뒤에 myproject가 하나 더 있는데 이런 식으로 디렉토리 이름을 설정할 수 있다.

$ git clone https://github.com/username/project2.git
$ git clone https://github.com/username/project2.git myproject

git status

git status 명령어를 사용하면 파일의 상태를 확인할 수 있다. 파일의 상태에 따라 나오는 메세지가 달라진다.

$ git status
On branch master
nothing to commit, working directory clean

현재 수정했거나 추가한 파일이 없을 때 나타나는 메세지다. 이런 상황에서 새로운 파일을 추가했을 경우 아래의 메세지가 나타난다.

$ git status
On branch master
Untracked files:
	(use "git add <file>..." to include in what will be committed)
	
	new.txt
	
nothing added to commit but untracked files present (use "git add" to track)

git status로 파일 상태를 확인은 하였지만 어떻게 할 지 모를 때 git은 친절하게 무엇을 해야할지 알려준다. 아직 추적되지 않은(untracked) 파일이 있으니 git add 로 추가하라는 뜻이다. git add new.txt 또는 git add .로 파일을 추가한 후 상태를 확인하면 아래와 같이 나타난다.

$ git status
On branch master
Changes to be commited:
	(use "git reset HEAD <file>..." to unstage)
	
	new file:	new.txt

아까는 추적되지 않았던 파일이 추가되었고 git add를 취소하고 싶다면 git reset HEAD new.txt를 사용할 수 있다는 메세지를 확인할 수 있다. 기존에 추적되고 있던 파일 old.txt가 있다고 했을 때, old.txt를 수정하면 아래와 같은 메세지가 뜨게 된다.

$ git status
On branch master
Changes to be commited:
	(use "git reset HEAD <file>..." to unstage)
	
	new file:	new.txt

Changes not staged for commit:
	(use "git add <file>..." to update in what will be committed)
	(use "git checkout -- <file> ..." to discard changes in working directory)
	
	modified:	old.txt

아직 커밋하지 않았기 때문에 new.txt에 대한 메세지도 뜨고 기존에 추적되고 있었지만 변경 사항이 추가되지 않은 old.txt에 대한 메세지도 뜨고 있다. git add old.txt로 변경 상황을 추가할 수도 있고, git checkout -- old.txt로 변경하기 이전 상황으로 돌릴 수도 있다. git checkout -- 명령어를 사용할 경우, old.txt에서 수정한 상황은 수정하기 전으로 돌아가며 git status를 할 경우 new.txt에 대한 메세지만 보게 된다. git add로 변경상황을 추가한 후의 메세지는 아래와 같다.

$ git status
On branch master
Changes to be commited:
	(use "git reset HEAD <file>..." to unstage)
	
	new file:	new.txt
	modified:	old.txt

git commit

변경 사항을 모두 추가했으니 이제 커밋할 차례이다. git commit 명령어를 입력하고 나면 Vim 편집기가 나타나는데 기본적으로 알아야 할 단축키와 명령어는 3가지 이다.

  • i: 편집 모드 변경
  • esc: 편집 모드 종료
  • :wq: 저장 후 편집기 종료

또는 git commit -m 명령어와 함께 바로 커밋 메세지를 작성할 수 있다. 여기에 -a 옵션을 추가하면 git add하지 않고 변경 사항을 추가하면서 바로 커밋할 수 있다. git commit -am <commit messge> 형태로 사용하면 된다.