Git 저장소 만들기
1. 기존 프로젝트를 Git 저장소로 만드는 방법
$ git init
이 명령은 .git
이라는 하위 디렉토리를 만든다. .git
디렉토리에는 저장소에 필요한 뼈대 파일(Skeleton)이 들어 있다.
2. 다른 서버에 있는 저장소를 Clone하는 방법
- 다른 프로젝트에 참여하거나
- Git 저장소를 복사하고 싶을때
git clone
명령을 사용한다. - 서버에 있는 모든 데이터를 복사하고, 프로젝트 히스토리 전부를 받아온다.
git clone [url]
명령어로 저장소를 복사한다.
$ git clone git://github.com/schacon/grit.git
이 명령은 grit
이라는 디렉토리를 만들고 그 안에 .git
디렉토리를 만든다.
저장소의 데이터를 모두 가져와서 자동으로 가장 최신 버전을 Checkout해 놓는다.
grit
디렉토리로 이동하면 Checkout으로 생성한 파일을 볼 수 있고 당장 하고자 하는 일을 시작할 수 있다.
# /grit/이 아니라 다른 디렉토리 이름 /mygrit/으로 Clone할 수 있다.
$ git clone git://github.com/schacon/grit.git mygrit
3. Git은 다양한 프로토콜을 지원한다.
git://
git 프로토콜https://
HTTP 프로토콜user@server:/path.git
과 같은 SSH프로토콜도 가능
Git의 기초 - 수정하고 저장소에 저장하기
-
프로젝트를 진행하는 워킹 디렉토리의 모든 파일은 크게
Tracked(관리대상임)
와Untracked(관리대상이 아님)
로 나눈다. -
Tracked
파일은 이미 스냅샷에 포함돼 있던 파일이다. -
Tracked
파일은 또Unmodified(수정하지 않음)
와Modified(수정함)
그리고Staged(커밋으로 저장소에 기록할)
상태 중 하나이다. -
나머지 파일은 모두
Untracked
파일이다. -
Untracked
파일은 워킹 디렉토리에 있는 파일 중 스냅샷에도Staging Area
에도 포함되지 않은 파일이다.
1. git status
- 파일의 상태 확인하기
git status
명령어를 사용한다.
Clone 한 후에 바로 이 명령을 실행하면 아래와 같은 메세지를 볼 수 있다.
$ git status
on branch is up-to-data with 'orgin/master'.
nothing to commit, working directory clean
- 파일을 하나도 수정하지 않았다
Tracked
나Modified
상태인 파일이 없다- 작업중인 기본 브랜치가
master
이다. 라는 것을 알 수 있다.
2. git add
- 파일을 새로 추적하기
git add
명령으로 파일을 추적한다.
# Git 은 README 파일을 추적한다
$ git add README
git status
명령을 실행하면 README
파일이 Tracked
상태이면서 Staged
상태라는 것을 확인할 수 있다
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: README
Changes to be committed
에 들어 있는 파일은Staged
상태라는 것을 의미한다.- 이후에 커밋을 하게되면
git add
를 실행한 시점의 파일이 커밋되어 저장소 히스토리에 남는다.
3. .gitignore
- 특정 파일 무시하기
- 어떤 파일은 Git에 자동으로 추가되거나 Untracked파일이라고 보여줄 필요가 없다.
- 이럴때는
.gitignore
파일을 만들고 그안에 무시할 파일 패턴을 적는다.
$ touch .gitignore
$ vi .gitignore
# [i] 입력 후 무시할 파일을 작성해 준다.
# [:wq] -> 저장 후 닫기
.gitignore
파일에 입력하는 패턴의 예
$ cat .gitignore
# Custom -> 이 줄은 무시한다. 부연설명 같은 기능
.idea/ # .idea/ 디렉토리 아래의 모든 파일 무시
.config_secret/
secrets.tar
c.sh
.media/
.static_root/
!lib.a # lib.a는 무시하지 않는다.
# Front code
/front/
# Created by https://www.gitignore.io/api/linux,macos,python,django,pycharm
### Django ###
*.log # 확장자가 .log인 파일은 무시한다.
*.pot
*.pyc
__pycache__/ # __pycache__/ 디렉토리에 있는 모든 파일은 무시한다.
local_settings.py
db.sqlite3
media
doc/*.txt # `doc/notes.txt`같은 파일은 무시하고 doc/server/arch.txt같은 파일은 무시하지 않는다.
doc/**/*.txt # `doc` 디렉토리 아래의 모든 .txt 파일을 무시한다.
-
.gitignore
파일은 보통 처음에 만들어 두는 것이 좋다. 그래서 Git 저장소에 커밋하고 싶지 않은 파일을 실수로 커밋하는 일을 방지 할 수 있다. -
.gitignore
파일을 수정할 때는 주의해야 할 점이 실수로 파일명을 고치거나 삭제 했을때 민감한 정보가 담긴 파일이 순식간에 저장소에 커밋되어 올라 갈수 있다. -
(해당 커밋을 삭제해도 히스토리는 남아서 시크릿키가 오픈되면 온갖 나라에 흩어져 있는 해커들의 밥이 될 수 있다. 잇힝 ㅠㅠ 경험담이다. )
4. git diff
- 상태변경 내용 보기
-
git diff
, 이 명령어는 워킹 디렉토리에 있는 것과 Staging Area에 있는 것을 비교한다. 그래서 수정하고 아직 Stage하지 않은 것을 보여 준다. -
git diff --staged
, 이 명령어는 저장소에 커밋한 것과 Staging Area에 있는 것을 비교한다.
5. git commit
- 변경사항 커밋하기
git commit
- 이 명령어를 실행하면 지정된 편집기가 실행되고 아래와 같은 내용을 표시한다.
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
# new file: README
# modified: benchmarks.rb
#
~
~
~
".git/COMMIT_EDITMSG" 10L, 283C
-
git commit -v
옵션을 추가하면 편집기에 diff 메세지도 추가된다. -
git commit -m "------"
이 명령어로 커밋 메세지를 첨부할 수 있다.
$ git commit -m "Story 182: Fix benchmarks for speed"
[master 463dc4f] Story 182: Fix benchmarks for speed
2 files changed, 3 insertions(+)
create mode 100644 README
- master 브랜치에서 커밋했고, 체크섬은
463dc4f
이다. - 수정한 파일과 삭제됐거나 추가된 줄이 몇 줄인지 알려준다.
6. git commit -a -m "00000"
- Staging Area 생략하기
git commit
명령을 실행할 때-a
옵션을 추가하면 Git은 Tracked 상태의 파일을 자동으로 Staging Area에 넣는다.git add
명령을 대신한다.
7. git mv file_from file_to
- 파일 이름 변경하기
$ git mv '파일이름1' '파일이름2'
# '파일이름1' -> '파일이름2' 로 바꿔준다
$ git mv README.txt README
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.txt -> README