[Git 스터디] 01: 시작하기

5381 단어 gitgit

Git-book을 읽고 목차별 내용 정리를 통한 학습을 10주간 스터디를 시작한당 !_! 😺

개발자 협업에서 git은 필수라고 생각한다.

지금도 코드를 올리는 데는 사용은 하고 있지만, git에 대한 자세한 내용과 사용법은 모르고 있었다.

협업 시에도 무리없이 잘 사용할 수 있도록 빠삭하게 습득해 보고자 한다 ~!~!


버전 관리

  • 파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템.
  • 거의 모든 컴퓨터 파일의 버전을 관리할 수 있다.

로컬 버전 관리

버전 관리를 위해 디렉토리로 파일을 복사하는 방법은 실수로 지워버리거나 잘못고치거나... 하는 실수가 발생할 수 있다.
-> 프로그래머는 오래전에 VCS를 만들어 데이터베이스를 사용해서 파일 변경 정보를 관리했다.

VCS 도구 중, RCS(Revision Control System)는 많은 회사가 쓰고 있고, Patch Set(파일에서 변경되는 부분)을 관리한다.
Patch Set은 특별한 형식의 파일로 저장하고, 일련의 Patch Set을 적용해서 모든 파일을 특정 시점으로 되돌리는 것이 가능하다.

CVCS (중앙집중식 버전 관리)

다른 개발자와 함께 작업해야 하는 경우에 생기는 문제를 해결하기 위해 CVCS(중앙집중식 VCS)가 개발됐다.

CVCS 환경은 관리자가 누가 무엇을 할지 꼼꼼히 관리할 수 있다는 점, 모든 클라이언트의 로컬 데이터베이스를 관리하는 것 보다 VCS 하나를 관리하기가 훨씬 쉽다는 점에서 로컬VCS에 비해 장점이 많다.

하지만, 단점도 존재한다.
대표적인 것으로, 중앙 서버에 발생한 문제가 있다.
만약, 서버가 일정 시간동안 다운이 된다면, 그동안은 아무도 다른사람과 협업할 수 없고, 백업할 방법도 없다.

또한, 중앙 데이터베이스가 있는 하드디스크에 문제가 생기면 프로젝트의 모든 히스토리를 잃게된다.
-> 사람마다 하나씩 다긴 스냅샷은 괜찮다!

로컬 VCS시스템도 비슷한 결점이 있고, 위와 같은 상황이 생기면 모든 것을 잃는다.

DVCS (분산 버전 관리 시스템)

Git, Mecurial, Bazaar, Darcs 같은 DVCS에서의 클라이언트는 단순히 파일 마지막 스냅샷을 Checkout하지 않고, 그냥 저장소를 히스토리와 더불어 전부 복제한다. 그래서 서버에 문제가 생기면 이 복제물로 다시 작업을 할 수 있다.
클라이언트 중 아무거나 골라도 서버를 복원할 수 있고, clone은 모든 데이터를 가진 진정한 백업이다.

대부분의 DVCS환경에서는 리모트 저장소가 존재한다.
리모트 저장소가 많을수도 있어서, 사람들은 동시에 다양한 그룹가 다양한 방법으로 협업할 수 있다.

Git 기초

스냅샷


Git은 데이터를 스냅샷의 스트림처럼 취급한다.

Git은 데이터를 파일 시스템 스냅샷의 연속으로 취급하며, 크기가 아주 작다. 또한, commit하거나 프로젝트의 상태를 저장할 때마다 파일이 존재하는 그 순간을 중요하게 여긴다.

파일이 달라지지 않았으면 성능을 위해서 파일을 새로 저장하지 않고, 이전 상태의 파일에 대한 링크만 저장한다.

명령

Git은 거의 모든 명령이 로컬 파일과 데이터만 사용하기 때문에 네트워크에 있는 다른 컴퓨터는 필요 없다. 프로젝트의 모든 히스토리가 로컬 디스크에 있으므로 모든 명령이 순식간에 실행된다. (즉, 오프라인 상태이거나 VPN에 연결하지 못해도 업무가 가능하다.)

Git의 무결성

Git은 데이터를 저장하기 전에 항상 체크섬을 구하고 그 체크섬으로 데이터를 관리한다.
-> 체크섬을 이해하는 Git 없이는 어떠한 파일이나 디렉토리도 변경할 수 없다

체크섬(checksum)은 중복 검사의 한 형태로, 
오류 정정을 통해, 공간(전자 통신)이나 시간(기억 장치) 속에서 송신된 자료의 무결성을 보호하는 단순한 방법이다.

통신에서 순환 중복 검사(CRC)를 체크섬이라고 말하기도 한다.

출처 : 체크섬 - 위키백과

데이터 추가

Git 데이터베이스에 데이터가 추가 되면, 되돌리거나 데이터를 삭제할 방법 x

다른 VCS처럼 Gitcommit하지 않으면 변경사항을 잃어버릴 수 있다.
-> 변경 후에는 commit하기!!

세 가지 상태

Git은 파일을 Committed, Modified, Staged 상태로 관리한다.

  • Committed : 데이터가 로컬 데이터베이스에 안전하게 저장된 것.

  • Modified : 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않은 것.

  • Staged : 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태.

  • Git directory : Git이 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳.
    다른 컴퓨터에 있는 저장소를 Clone 할 때 Git 디렉토리가 만들어짐.

  • 워킹 트리 : 는 프로젝트의 특정 버전을 Checkout 한 것.
    Git directory는 현재 작업하는 디스크에 있고, 그 directory 안에 압축된 데이터베이스에서 파일을 가져와서 워킹 트리를 만든다.

  • Staging Area : `Git directory에 있다.
    단순한 파일이고 곧 commit할 파일에 대한 정보를 저장.
    Git에서 기술용어로 “Index”라고 하지만, “Staging Area” 라는 용어를 써도 상관 x

Git으로 하는 일
1) 워킹 트리에서 파일을 수정한다.
2) Staging Area에 파일을 Stage 해서 commit할 스냅샷을 만든다.
( 모든 파일을 추가할 수도, 선택하여 추가할 수도 있음)
3) Staging Area에 있는 파일들을 commit해서 Git directory에 영구적인 스냅샷으로 저장한다.

  • Git directory에 있는 파일들 = Committed 상태.
  • 파일을 수정하고 Staging Area에 추가 = Staged
  • Checkout 하고 나서 수정했지만, 아직 Staging Area에 추가하지 않음 = Modified

학습 : Git-book

좋은 웹페이지 즐겨찾기