Posts Git 기초 명령어와 구조
Post
Cancel

Git 기초 명령어와 구조

Git?

Git은 리누스 토르발스(리눅스 만든 사람)가 만든 분산형 버전 관리 시스템(VCS : Version Control System)이다.

특징

  • 스냅샷(Snap Shot) 기반 버전 관리 시스템

    스냅샷은 특정 시점에서 파일, 폴더 또는 워크스페이스의 상태를 의미한다. Git에서는 새로운 버전을 기록하기 위한 명령인 커밋을 하면 스냅샷이 저장된다.

    즉, 커밋을 할 때마다 그 당시의 워크스페이스 또는 폴더나 파일이 그대로 저장되며 커밋한 내용을 불러오면 그대로 바로 사용 가능하다.

    Git은 시간순으로 프로젝트 전체의 스냅샷을 저장하며, 이 때 성능을 위해 달라지지 않은 파일은 새로 저장하지 않고 이전 파일의 링크를 저장한다.

  • 거의 모든 명령이 로컬에서 실행

    Git Hub나 Git Lab 같은 원격 저장소에 저장하지 않는 이상 Git에 의해 저장되는 프로젝트의 모든 히스토리들이 로컬 디스크에 존재하고, Git의 거의 모든 명령들이 로컬 파일과 데이터만 사용하기 때문에 오프라인 작업이 가능할 뿐만 아니라 네트워크의 상태와 상관없이 모든 명령이 순식간에 실행된다.

Git Hub?

Git Hub은 가장 큰 Git 저장소이며 전세계의 수많은 개발자들이 오픈 소스 프로젝트를 호스팅하고 협업을 진행한다.

특징

  • 협업

    각각의 repository에 대해 여러명의 협력자(Collaborator)를 등록하여 공동작업으로 프로젝트를 진행할 수 있다.

  • GitHub Pages

    Git Hub에서 제공하는 웹호스팅 서비스로 Jekyll을 사용하거나 HTML/CSS/JS를 이용한 웹페이지를 repository에 호스팅하여 개인 홈페이지로 활용 가능하다.

왜 사용할까?

  • 버전관리를 위해

    개발자들이 개발을 할 때는 기능을 추가하거나 삭제하는 등의 수많은 수정이 일어난다. 이 때 수정 도중에 오류가 발생하여 이전 버전으로 돌아가야 하거나 이전에 삭제한 기능을 다시 불러와야 할 때를 대비하여 각 버전에 대한 저장은 필수적이다.

    이 때 만약 git이 없다면 매번 프로젝트 전체를 복사해서 관리파일에 붙여넣기를 해야할 것이다. 이는 매우 번거로울 뿐만 아니라 많은 용량을 차지하게 된다.

    따라서 git을 통해 많은 개발자들이 프로젝트를 저장하고 버전을 관리한다.

  • 협업을 위해

    개발은 주로 여러 사람들이 함께 프로젝트를 진행하기 때문에 프로젝트에 포함되는 소스코드를 여러명이 작성하는 경우가 많이 발생한다. 이 때 Git hub와 git을 이용하여 원격 저장소에 있는 프로젝트를 여러명이 공유하면서 개발을 진행할 수 있고, 결과물을 합칠 수 있다.

    또한 합치는 과정에서 각각 다른 사람들이 작성한 소스 코드가 충돌하는 경우가 발생하면 어느 부분에서 충돌이 발생했는지 경고해주기도 한다.

Git 설치

Git을 설치하기 위해 git-scm.com/downloads로 이동하여 각 운영체제에 맞는 것을 설치한다.

또는 쉘에서 각 운영체제에 맞는 명령어를 통해 설치가 가능하다.(git - book/download)

원격 Repository 생성

Git Hub에서 회원가입 후에 Your repositories 페이지의 New버튼을 눌러 원격 저장소를 생성한다.

옵션으로 공개, 비공개 설정을 할 수도 있고, 라이센스 파일이나 README.md파일을 자동으로 생성시킬 수 있다.

Git 기초 명령어

  • git init

    현재 디렉토리에 로컬 깃 저장소를 생성한다. 이 때 해당 디렉토리에는 .git디렉토리가 생성된다.

  • git config --[범위] [이름] [값]

    git 저장소에 대한 설정을 수정할 수 있는 명령어로 설정을 적용시킬 범위를 옵션을 통해 정할 수 있다.

  • git clone [원격 저장소 주소] [로컬 디렉토리 경로]

    명령어에 입력된 주소에 해당하는 원격 저장소의 복사본을 만들어 현재 디렉토리 로컬 깃 저장소를 생성한다. 이 때 생성된 로컬 저장소는 원격 저장소와 자동으로 연결된다.

  • git status

    현재 디렉토리에 있는 파일들의 상태를 확인한다.

    작업이 이루어지는 디렉토리와 로컬 깃 저장소를 비교하여 파일의 수정여부나 커밋상태가 표시된다.

  • git add [파일 경로]

    로컬 깃 저장소에 포함된 파일들의 현재 상태를 추적하여 인덱스에 저장한다. 이 때 -A옵션이나 파일경로로 .을 입력하면 현재 디렉토리의 모든 파일에 대해 add명령을 실행할 수 있다.

    구조적으로 보자면 현재 깃 저장소의 스냅샷을 stage area로 업로드하는 과정이다.

  • git commit

    현재 인덱스에 추가된 변경사항들을 로컬 저장소의 변경이력에 추가한다

    -m옵션을 통해 해당 커밋에 대한 메시지를 간결하게 남기기도 한다.

  • git push

    원격 저장소에 로컬 저장소의 변경 이력을 업로드한다.

    -f옵션을 통해 conflict상태에서 강제로 push를 실행할 수 있다.

    push를 통해 업로드된 파일은 github에서 열람 가능하다.

  • git pull

    원격 저장소의 내용을 로컬저장소로 불러온다.

    기존의 로컬저장소의 내용이 변경된 원격 저장소의 내용과 병합된다.

    --ff옵션을 통해 conflict상태에서 강제로 pull을 실행할 수 있다.

  • git revert [커밋넘버]

    파라미터에 해당하는 커밋의 이전 상태로 작업 내용을 되돌린다.

    이 때 로그를 보면 되돌린 시점의 커밋으로 이동하지 않고 revert에 대한 커밋이 새로 생기는 것을 볼 수 있다.

  • git log

    현재 깃 저장소의 변경 이력들을 모두 표시한다. --all --decorate --oneline --graph옵션을 통해 시각적으로 예쁜(?)그래프로 로그를 확인할 수 있다.

push에서의 -f옵션과 pull에서의 --ff옵션은 변경 전 문서의 내용이나 데이터가 손상, 유실될 위험이 있다.

자세한 내용은 git명령어 또는 -h옵션을 통해 확인 가능하다.


참고자료 :

https://git-scm.com

https://www.inflearn.com/course

https://pages.github.com

https://docs.aws.amazon.com/ko_kr/codecommit

https://subicura.com

This post is licensed under CC BY 4.0 by the author.