Git

2 minute read

Git

Git은 프로그램 등의 소스 코드 관리를 위한 분산 버전 관리 시스템이다.

분산 버전 관리 시스템이란 여러명의 사용자가 특정 프로젝트를 자신의 컴퓨터로 협업하여 개발하면서 버전을 관리할 수 있는 시스템이다.

Git은 중앙 서버 컴퓨터와 여러개의 컴퓨터들이 연결되어 모두 같은 버전의 데이터베이스를 유지한다.

이 버전은 업데이트가 될 때마다 자동으로 갱신된다.

따라서 이 파일들은 최신 버전으로 모든 컴퓨터에서 유지 될 수 있다.

위에서 설명한 Git의 Working Flow를 살펴보게 되면 아래 그림과 같다.

  1. Working Directory: 실제 파일들로 구성된 저장 공간
  2. Index: 준비 영역(Staging Area)
  3. HEAD: 최종 확정본(Commit)

그림 참조: webclub 블로그

Git을 사용하기 위해서는 아래 링크를 참조하면 된다.
코딩팩토리-Git 설치하기

Git을 사용하는 방법은 크게 2가지 이다.

  1. CLI(Command Line Interface, 명령 줄 인터페이스)란 Windows운영체제에서의 CMD, Linux 에서의 Terminal 등에서 명령어를 통해 제공되는 여러가지 기능을 담은 SoftWare이다.
  2. GUI(Graphic User Interface, 그래픽 사용자 인터페이스)란 CLI의 명령어를 간단한 클릭으로서 프로그램을 작동시키를 컴퓨터 환경이다.
    사용자가 사용하기 편하다는 장점이 존재하나, CLI에 비해 제한된 기능만을 제공한다는 단점이 존재한다.

Git 기본명령어

명령어 의미
git init
  • 원하는 폴더(Working Dir)에서 Git 초기화
  • .git이라는 숨겨진 폴더(로컬 저장소)가 만들어진다.
git add
  • Index(Staging 영역)에 저장
  • Working Dir에서 원하는 특정 파일만 Index에 추가 가능
git commit -m '프로젝트 변경 사항'
  • Index의 파일을 HEAD로 이동
git log
  • Commit History 살펴보기
git remote add
  • 새로운 원격 저장소 추가하기
git push [리모트 저장소 이름] [브랜치 이름]
  • Commit 사항을 원격 저장소에 올림
git clone [url]
  • 서버에 있는 모든 데이터를 복사
git pull [리모트 저장소 이름] [브랜치 이름]
  • 업데이트 된 내용을 가져올 수 있다.


브랜치(branch)

브랜치란 독립적으로 어떤 작업을 진행하기 위한 개념이다. 필요에 의해 만들어지는 각각의 브랜치는 다른 브랜치의 영향을 받지 않기 때문에, 여러 작업을 동시에 진행할 수 있다.
또한 이렇게 만들어진 브랜치는 다른 브랜치와 병합(Merge)함으로써,작업한 내용을 다시 새로운 하나의 브랜치로 모을 수 있다.
저장소를 처음만들면 ‘master’라는 이름의 브랜치(branch)가 생성된다.

명령어 의미
git branch
  • 브랜치목록 전체를 확인 가능
git branch [브랜치 이름]
  • 브랜치를 만들어라
git checkout [브랜치 이름]
  • 브랜치로 이동해라
git merge [commit]
  • 병합할 커밋 이름을 넣어 실행
git branch -d [branch name]
  • 브랜치 삭제


컨플릭트(Conflict)란 병합할때 충돌하는 경우이다.
기존 내용과 같은 부분을 서로 다른 branch에서 수정한 경우 어떻게 merge를 해야할 지 모르는 경우에 발생한다고 생각할 수 있다. 이러한 컨플릭트(Conflict)의 경우 Merge할 때 두 버전이 같은 곳을 이를 수동으로 고쳐야 한다.

포크(fork)

fork란 다른 원격 저장소에 있는 히스토리를 그대로 나의 github 원격 저장소에 복하하는 것을 의미한다.
다른 사람의 프로젝트에 바로 push 할 수 없기 때문에 나만의 프로젝트 버전을 관리하기 위해 다른 사람의 원격 저장소에서 프로젝트를 가져오는 것이다.

포크(fork) vs 브랜치(branch)

종류 의의 편리한 점 불편한 점
포크 여러 원격장소를 만들어 분기를 나눈다. 원격저장소에 영향을 미치지 않으므로 마음껏 코드수정이 가능하다. 원본저장소의 이력을 보려면 따로 주소를 추가해줘야 한다.
브랜치 하나의 원본저장소에서 분기를 나눈다. 하나의 원본저장소에서 코드 커밋 이력을 편하게 볼 수 있다. 다수의 사용자가 다수의 브랜치를 만들면 관리하기 힘들다.

포크(fork) vs 클론(clone)

  1. fork
    • fork한 저장소는 원본과 연결되어있다.
    • original repository에 어떤 변화가 생기면 forked된 repositry로 반영 가능하다.
    • 위의 경우는 fetch나 rebase의 과정이 필요하다.
  2. clone
    • 특정 repository를 local machine에 복사하는 것이다.
    • 권한이 없는 경우 해당 저장소로push하지 못한다.
    • original repository와 연결되지 못한다.
    • 저장소의commit, 등의 로그를 보지 못한다.

fork의 경우 다른 사람의 프로젝트에 바로 push 할 수 없다라는 특징이 있다는 것을 알 수 있었다.
이러한 특징으로 인하여 fork한 내용을 프로젝트에 Merge를 요청 하는 것은 Pull request이다.
Pull request를 사용하게 되면, 직접 Merge하는 것은 아니고 요청하는 것이기 때문에 다른사람이 보고 댓글을 달아 수정사항을 요청하거나 수정사항이 없을시 Merge를 할 수 있다.


참조: joongwon 블로그
참초: imacoolgirlyo 블로그
코드에 문제가 있거나 궁금한 점이 있으면 wjddyd66@naver.com으로 Mail을 남겨주세요.

Categories:

Updated:

Leave a comment