Dev Ops/Git Git 사용법 I (저장소 생성/Clone/Status/Stage/.gitignore
  • 728x90
    반응형



    Git 사용법




    Git 저장소 만들기



    기존 디렉토리를 Git 저장소로 만들기


    $ git init 


    이 명령은  .git  이라는 하위 디렉토리를 만든다.  .git  디렉토리에서는 저장소에 필요한 뼈대 파일(Skeleton)이 들어 있다.


    Git가 파일을 관리하게 하려면 저장소에 파일을 추가하고 커밋해야 한다.  git add  명령으로 파일을 추가 하고  git commit  명령으로 커밋한다.


    $ git add *.c

    $ git add LICENSE

    $ git commit -m 'initial project version'



    기존 저장소를 Clone 하기



    다른 프로젝트에 참여하거나(Contribute) Git 저장소를 복사하고 싶을 때   git clone  명령을 사용한다.


      git clone  을 실행하면 프로젝트 히스토리를 전부 받아온다.


     git clone [url]  명령으로 저장소를 Clone 한다. libgit2 라이브러리 소스코드를 Clone 하려면 아래와 같이 실행한다.


    $ git clone https://github.com/libgit2/libgit2 


    이 명령은 libgit2 라는 디렉토리를 만들고 그 안에  .git  디렉토리를 만든다. 


    그리고 저장소의 데이터를 모두 가져와서 자동으로 가장 최신버전을 Checkout 해 놓는다. 


    아래와 같은 명령을 사용하여 저장소를 Clone 하면 libgit2 가 아니라 다른 디렉토리 이름으로 Clone 할 수 있다.


    $ git clone https://github.com/libgit2/libgit2 mylibgit 


    Git는 다양한 프로토콜을 지원한다. 이제까지는  https://  프로토콜을 사용했지만  git://  를 사용할 수도 있고,


     user@Server:path/to/repo.git  처럼 SSH 프로토콜을 사용할 수도 있다.



    수정하고 저장소에 저장하기



    워킹 디렉토리의 모든 파일은 크게 Tracked(관리대상)와 Untracked(관리대상 아님)로 나눈다.


    Tracked 파일은 Unmodified(수정하지 않음)와 Modified(수정함) 그리고 Staged(커밋으로 저장소에 기록할) 상태중 하나이다.


    처음 저장소를 Clone 하면 모든 파일은 Tracked 이면서 Unmodified 상태이다.


    마지막 커밋 이후 수정하지 않은 상태에서 어떤 파일을 수정하면 Git은 그파일을 Modified 상태로 인식한다.


    실제로 커밋을 하기 위해서는 이 수정한 파일을 Staged 상태로 만들고, Staged 상태의 파일을 커밋한다. 


    이런 라이프사이클을 계속 반복한다.




    파일의 상태 확인하기



    파일의 상태를 확인하려면 보통  git status  명령을 사용한다. 


    프로젝트에  README  파일을 만들어보자. 


     README  파일은 새로 만든 파일이기 때문에  git status  를 실행하면 'Untracked files' 에 들어 있다.



    Git는 Untracked 파일을 아직 스냅샷(커밋)에 넣어지지 않은 파일이라고 본다.


    파일이 Tracked 상태가 되기 전까지는 Git는 절대 그 파일을 커밋하지 않는다.



    파일을 새로 추적하기



     git add  명령으로 파일을 새로 추적할 수 있다.


    아래 명령을 실행하면 Git는 README 파일을 추적한다.


    $ git add README.txt 


     git status  명령을 다시 실행하면 README 파일이 Tracked 상태이변서 커밋에 추가될 Staged 상태라는 것을 확인할 수 있다.



    "Changes to be committed" 에 들어 있는 파일은 Staged 상태라는 것을 의미한다. 


    커밋하면  git add  를 실행한 시점의 파일이 커밋되어 저장소 히스토리에 남는다. 



    Modified 상태의 파일을 Stage 하기



    README.txt 파일을 수정하고 나서  git status  명령을 다시 실행하면 결과는 아래와 같다.



    'Changes not staged for commit' 은 수정한 파일이 Tracked 상태이지만 아직 Staged 상태는 아니라는 것이다.


    Staged 상태로 만들려면  git add  명령을 실행해야 한다.


     git add  명령은 파일을 새로 추적할 때도 사용하고 수정한 파일을 Staged 상태로 만들 때도 사용한다.


    Merge 할 때 충돌난 상태의 파일을 Resolve 상태로 만들때도 사용한다.


     git add  명령을 실행하여 README.txt 파일을 Staged 상태로 만들고  git status  명령으로 결과를 확인해 보자.




    파일 상태를 짤막하게 확인하기



     git status  명령으로 확인할 수 있는 내용을 좀더 간단하게 변경 내용을 보여주는 옵션은 아래와 같다.


    $ git status -s

    or

    $ git status --short 


    아직 추적하지 않는 새 파일 앞에는  ??  표시가 붙는다.


    Staged 상태로 추가한 파일 중 새로 생성한 파일 앞에는  표시가, 수정한 파일 앞에는  M  표시가 붙는다.



    파일 무시하기



    Git로 관리가 불필요한 파일을 무시하려면  .gitignore  파일을 만들고 그 안에 무시할 파일 패턴을 적는다.


     .gitignore  파일의 예이다.


    $ cat .gitignore

    *.[oa]

    *~


    # 파일이름을 넣으면 모든 디렉토리에서 해당 파일 무시

    ignore-file.txt


    # /로 끝나면 해당 디렉토리 전체를 무시

    ignore-dir/


    # 와일드 카드도 사용가능
    ignore-file*

    *.log 


    첫 번째 라인은 확장자가 ".o" 나 ".a" 인 파일을 Git가 무시하라는 것이고 둘째 라인은  로 끝나는 모든 파일을 무시하라는 것이다.


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


    - 아무것도 없는 라인이나 '#'로 시작하는 라인은 무시한다.

    - 표준 Glob 패턴을 사용한다.

    - 슬래시(/)로 시작하면 하위 디렉토리에 적용되지(Recursivity) 않는다.

    - 디렉토리는 슬래시(/)를 끝에 사용하는 것으로 표현한다.

    - 느낌표(!)로 시작하는 패턴의 파일은 무시하지 않는다.

     

    Glob 패턴은 정규표현식을 단순하게 만든 것으로 생각하면 되고 보통 쉘에서 많이 사용한다.


    애스터리스크(*)는 문자가 하나도 없거나 하나 이상을 의미하고, [abc]는 중괄호 안에 있는 문자 중 하나를 의미한다.


    물음표(?)는 문자 하나를 말하고, [0-9] 처럼 중괄호 안의 캐릭터 사이에 하이픈(-)을 사용하면 그 캐릭터 사이에 있는 


    문자 하나를 말하고, [0-9] 처럼 중괄호 안의 캐릭터 사이에 하이픈(-)을 사용하면 그 캐릭터 사이에 있는 문자 하나를 말한다.


    애스터리스크 2개를 사용하여 디렉토리 안의 디렉토리 까지 지정할 수 있다. a/**/z 패턴은 a/z, a/b/z, a/b/c/z 디렉토리에


    사용할 수 있다.


    # 확장자가 .a 인 파일 무시

    *.a


    # 윗 라인에서 확장자가 .a인 파일은 무시하게 했지만 lib.a 는 무시하지 않음

    !lib.a


    # 현재 디렉토리에 있는 TODO 파일은 무시하고 subdir/TODO 처럼 하위 디렉토리에 있는

    파일은 무시하지 않음

    /TODO


    # build/ 디렉토리에 있는 모든 파일은 무시

    build/


    # doc/notes/txt 파일은 무시하고 doc/server/arch.txt 파일은 무시하지 않음

    doc/*.txt


    # doc 디렉토리 아래의 모든 .pdf 파일을 무시

    doc/**/*.pdf







    728x90
    반응형

    'Dev Ops > Git' 카테고리의 다른 글

    Git 사용법 V  (0) 2018.06.22
    Git 사용법 IV  (0) 2018.06.20
    Git 사용법 III (되돌리기/수정 파일 되돌리기/Pull/Fetch/tag)  (0) 2018.06.19
    Git 사용법 II  (0) 2018.06.19
    git 설치 및 설정  (0) 2018.06.18
상단으로