2019년 8월 10일 토요일

[GIT] Git 저장소 (1)

   참고
아래의 글은 위의 포스터를 참조하여 정리, 재가공한 글입니다.

   Git 저장소 만들기

기존 디렉토리를 Git 저장소로 만들기
Git으로 관리하고 싶은 프로젝트의 디렉토리로 이동 한 후, 다음 명령어를 실행(.git 디렉토리가 생성. .git 디렉토리는 뼈대 파일임.).

$ git init

Git이 파일을 관리하게 하려면 저장소에 파일을 추가하고 커밋해야 함.

$ git add *.c
$ git add LICENSE
$ git commit -m 'initial project version'

기존 저장소를 Clone하기
프로젝트의 히스토리를 전부 받아옴.

$ git clone <url>
$ git clone <url> newname

   저장소 수정하고 저장하기

워킹 디렉토리에서 파일의 상태
Tracked(관리대상임)
스냅샷에 포함되어 Git의 관리 대상이 되는 파일.
  • Unmodified(수정하지 않음) 
  • Modified(수정함)
  • Staged(커밋으로 저장소에 기록할 예정)

Untracked(관리대상이 아님)
스냅샷에도 Staging Area에도 포함되지 않는 파일. Git의 관리 대상이 아니기 때문에 버전관리를 할 수 없음.


실제로 커밋을 하기 위해서는 수정이나 추가한 파일을 Staged 상태로 만들고 Staged 상태의 파일을 커밋해야 한다. 파일은 아래의 라이프사이클을 계속 반복한다.



파일의 상태 확인하기

$ git status
$ git status -s

clone을 한 후 Git의 상태

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

위의 내용은
'현재 작업중인 브런치는 master 이며, Tracked(관리하고 있는) 파일은 수정되지 않았고, Untracked 파일은 나타나지 않았다. 그리고 현서버의 같은 브랜치로부터 진행된 작업이 없다.'
는 것을 나타낸다.

* Git의 기본 브랜치의 이름은 master.

README 파일을 새로 만든 후 Git의 상태

$ echo 'My Project' > README
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
  (use "git add <file>..." to include in what will be committed)

   README

nothing added to commit but untracked files present (use "git add" to track)

위의 내용은
'현재 작업중인 브랜치는 master이며, commit할 것은 추가되지 않았지만  Untracked(관리하고 있지 않은) 파일이 있으므로 "git add <file> ..."로 untracked 파일을 추가하라'
는 것을 나타낸다.

파일을 새로 추적하기
$ git add README

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   README

Modified 상태의 파일을 Stage 하기
Tracked 파일을 수정하면 modified file로 나온다.

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   README

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

    modified:   CONTRIBUTING.md

"Changes not staged for commit"은 수정한 파일이 Tracked 상태이지만 아직 Staged 상태는 아니라는 뜻이다. Staged 상태로 만드려면 git add 해야 한다.
git add 명령어는 프로젝트에 파일을 추가한다는 개념보다 다음 커밋에 추가한다고 이해하는 게 좋다.


$ git add CONTRIBUTING.md
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   README
    modified:   CONTRIBUTING.md

다음 커밋내용에 추가되었다. 하지만 커밋하지 않고 같은 파일을 수정하면 Git은 그 파일을 Staged하고 동시에 Unstaged한 파일로 생각한다.


$ vim CONTRIBUTING.md
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   README
    modified:   CONTRIBUTING.md

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

    modified:   CONTRIBUTING.md

이전의 커밋버전에 이전의 수정만 입력되었으므로 이번에 수정한 내용을 커밋하려면 git add를 다시 실행해야 한다.


$ git add CONTRIBUTING.md
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   README
    modified:   CONTRIBUTING.md

Staged와 Unstaged 상태의 변경 내용 보기
Unstaged(add도 하지 않은)상태의 파일과 Staged(add만 하고 commit하지 않은)상태의 파일의 변경 내용 보기

$ git diff

commit한 파일과 Staging Area(add하고 commit하지 않은)에 넣은 파일의 변경 내용 보기

$ git diff --staged
$ git diff --cached

파일 무시하기
Git의 관리가 필요하지 않은 파일을 설정. .gitignore 파일을 다음 규칙에 따라 생성한 후, add, commit 함
  • 아무것도 없는 라인이나, '#'로 시작하는 라인은 무시함
  • 표준 Glob 패턴을 사용한다. 이는 프로젝트 전체에 적용됨
  • 슬래시(/)로 시작하면 하위 디렉토리에 적용되지(Recursivity) 않음
  • 디렉토리는 슬래시(/)를 끝에 사용하는 것으로 표시함
  • 느낌표(!)로 시작하는 패턴의 파일은 무시하지 않음
$ nano .gitignore
$ git add .gitignore
$ git commit -m ".gitignore file"

mv, rm
Git은 다른 VCS와 달리 파일 이름의 변경이나 파일의 이동을 관리하지 않으므로 Git이 파일의 이름이 변경되거나 이동된 것을 알 수 있도록 해야 한다.
(아래의 명령어들은 그저 몇가지 명령어를 차례로 수행한 것과 같은 기능을 한다. 그냥 이동하거나 제거하고 ADD했다는 것이다.)


$ git mv file_from file_to
$ git rm file

Origin, Remote and Branch

댓글 없음:

댓글 쓰기