Git

업데이트:

Git

  • 버전 관리 시스템(VCS - Version Control System) 중 하나이다.
  • GNU GPL(General Public License)v2 하에 배포되는 무료 소프트웨어이다.
  • 서로 완전히 독립적 일 수있는 여러 개의 로컬 브랜치를 허용하고 권장한다.
  • CSV, Sebversion, Perforce 같은 시스템은 중앙 집중식 버전 관리(CVCS - Centralized VCS)이며, Git은 분산 버전 관리 시스템(DVCS - Distributed VCS)이다.
    • CVCS : Client-Sever Model로 하나의 중앙 서버가 존재하며, 중앙 서버에서 각자 맡은 부분의 작업을 수행 후 중앙 서버로 통합을 수행한다.
    • DVCS : Distributed Model로 하나의 중앙 서버와 각자의 컴퓨터 저장소에 사본을 관리하여 장애와 복원에 유리한 이점을 가지고 있으며, 각자 독립적으로 작업한 이후 변경사항의 통합을 수행한다.

SVN과 차이점

  • Git은 분산 버전 관리 시스템으로 로컬에서 사본을 관리하기 때문에 서버와 지속적으로 통신이 필요한 중앙 집중식 시스템(SVN)보다 속도가 빠르다.
  • Git은 각자의 컴퓨터 저장소에 사본을 관리하여 중앙 서버에만 저장되는 중앙 집중식 버전 관리 시스템인 SVN보다 장애와 복원에 유리하다.
  • Git은 저장소에 사본을 관리하며 버전을 관리하므로 인터넷이 연결되지 않아도 작업이 가능하고, 속도 또한 빠르다. 하지만 SVN은 중앙 서버에 지속적으로 접속해야 하므로 인터넷이 필요하며, 속도 또한 느리다.

특징1

비선형 개발을 위한 강력한 지원

  • 신속한 분기 및 병합을 지원하며 비선형 개발 기록을 시각화 및 탐색하기 위한 특정 도구를 포함한다.
  • 변경사항이 다양한 검토자에게 전달되기 때문에 작성된 것보다 더 자주 병합된다.
  • 분기는 매우 가볍고 하나의 커밋에 대한 참조이며, 부모의 커밋으로 전체 분기 구조를 구성할 수 있습니다.

분산 개발

  • 각 개발자에게 전체 개발 기록의 로컬 사본을 제공하고 변경 사항은 이러한 저장소에서 다른 저장소로 복사된다.

기존 시스템 및 프로토콜과의 호환성

  • 저장소는 Hypertext Transfer Protocol(HTTP), File Transfer Protocol(FTP) 또는 일반 소켓이나 Secure Shell(SSH)를 통해 공유할 수 있다.
  • CVS 클라이언트와 연결 할 수 있는 CVS 서버 에뮬레이션을 제공하며, Subversion 저장소는 git-svn으로 연결 가능하다.

대규모 프로젝트의 효율적인 처리

  • 로컬에 저장된 저장소에서 버전의 기록을 가져오는 것은 원격 서버에서 가져오는 것보다 100배 더 빠를 수 있다.2

이력의 암호화 인증

  • Git 이력는 특정 버전의 Commit ID가 해당 Commit에 이르는 전체 개발 이력에 따라 달라지는 방식으로 저장된다.
  • 한 번 공유되면 알림없이 이전 버전을 변경할 수 없습니다.

플러그 형 병합 전략

  • 툴킷 설계의 일부로, Git은 불완전한 병합의 잘 정의된 모델을 가지고 있으며, 병합을 완료하기 위한 다중 알고리즘을 가지고 있어 사용자에게 병합을 자동으로 완료할 수 없으며 수동 편집이 필요하다는 것을 알려준다.

쓰레기는 수거될 때까지 축적된다.

  • 작업을 중단하거나 변경 내용을 백업하면 데이터베이스에 쓸모없는 매달려 있는 개체가 남게 된다.
  • Git은 리포지토리에 느슨한 개체가 충분히 생성되면 가비지 수집을 자동으로 수행한다.
  • 가비지 컬렉션은 Git gc를 사용하여 명시적으로 호출할 수 있다.

GitHub

버전 관리 도구의 웹호스팅 서비스이다.

용어

Repository

저장소를 의미하며, 저장소는 히스토리, 태그, 브랜치에 따라 버전을 저장한다. 저장소를 통해 작업자가 변경한 모든 이력를 확인 할 수 있다.

Working Tree

Repository의 어느 한 시점을 바라보는 작업자의 시점이다.

Staging Area

Repository에 저장하기 전에 커밋을 준비하는 위치이다.

Commit

현재 변경 된 작업 상태를 점검을 마치면 확정하고, Repository에 저장하는 작업이다.

현재 작업 중인 Branch이다.

Branch

가지 또는 분기점을 의미하며, 작업을 할 때 현재 상태를 복사하여 Branch에서 작업을 한 후에 Merge를 한다.

Merge

다른 Branch의 내용을 현재 Branch로 가져와 합치는 작업을 의미한다. 이력을 볼 때 뿌리가 여러개로 나눠져 있어서 보기가 어렵다.

Rebase

Merge와 합치는 작업은 비슷하지만, 베이스를 다시 정의함으로써 커밋 라인을 새롭게 정리하여 이력을 깔끔하게 볼 수 있게 해준다.

Index

변경 내역이 포함된 파일들의 모음이다.

Fetch

Remote Repository에서 Head의 정보를 가져와서 확인만 수행하는 것을 말한다.

명령어

git init

버전 관리를 수행하고자 하는 폴더에서 Git 로컬 저장소를 초기화한다.

git help

Git 관련 명령어의 도움말을 출력한다.

git status

Git 저장소의 상태(변경사항, 작업상태 등)를 출력한다.

git clone

Remote Repository를 Local Repository로 복사한다.

git add

파일을 추가하면, Git의 Repository Snapshot에 포함된다.

git commit

Git의 의미있는 수정 작업이 끝났을 때 완료를 알리는 작업이다.

git push

Commit된 작업에 대해서 Remote Repository에 반영하는 작업이다.

git pull

Remote Repository에 반영된 내용을 Local Repository에 반영하는 작업이다.

git log

Commit 내역을 확인할 때 사용하는 명령어이다.

git branch

새로운 Branch를 생성하여 독립적인 공간을 생성한다.

git checkout

독립된 작업 공간인 Branch를 자유롭게 이동할 수 있다.

git merge

Branch에서 작업을 끝내고, 모든 협업 개발자가 볼 수 있는 Master와 병합을 수행한다.

Reference

댓글남기기