5. Git 보다 깊이 알기

최준영·2022년 2월 12일
0

Git & GitHub

목록 보기
6/13
post-custom-banner

1. Git을 특별하게 만드는 것

1) 버전 관리

로컬 버전 관리

  • 많은 사람들은 버전을 관리하기 위해 디렉토리로 파일을 복사하는 방법을 쓴다.
  • 직접 복사하는 방식은 실수를 하기 쉬우므로 이를 보조해주는 로컬 VCS 도구가 존재한다.

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

  • 다른 개발자와 함께 작업을 하기 위해 만들어졌다.
  • 파일을 관리하는 서버가 따로 있고, 클라이언트가 중앙 서버에서 파일을 받아서 사용(Checkout)한다.
  • 중앙 서버에서 문제가 발생하는 경우 그동안 아무도 다른 사람들과 협업할 수 없고 사람들이 하는 일을 백업할 방법도 없다.
  • 중앙 데이터 베이스가 있는 하드디스크에 문제가 생기면 프로젝트의 모든 히스토리를 잃는다. 물론 사람마나 하나씩 가진 스냅샷은 괜찮다.

분산 버전 관리 시스템

  • 클라이언트는 단순희 파일의 마지막 스냅샷을 Checkout하지 않는다. 저장소를 히스토리와 더불어 전부 복제한다.
  • 서버에 문제가 생기면 이 복제물로 다시 작업을 시작할 수 있다.
  • 클라이언트 중에서 아무거나 골라도 서버를 복원할 수 있다.

2) 데이터를 다루는 방식

출처 : pro git책

델타 방식

  • 각 파일이 생겨난 시점에 전체 파일이 저장이 되고, 수정이 가해질 때는 그 변경점들이 저장된다.
  • 커밋이 많아질수록 느려질수가 있다.

스냅샷 방식

  • git에서 사용하는 방식이다.
  • 각 버전마다 전체 파일이 저장되어 있다. 새로운 버전이 만들어 질 경우 변화가 없는 파일은 그대로 연결해서 가져오고, 변화가 있는 파일은 최종 파일 내용이 저장되어 있다.
  • 용량을 크게 차지하지 않는 효율적인 방식으로 관리를 한다.

2. Git의 3가지 공간

1) Git의 3가지 공간

(1) Working directory

  • untracked : Add된 적 없는 파일, ignore 된 파일
  • tracked : Add된 적 있고 변경내역이 있는 파일
  • git add 명령어로 Staging area로 이동

(2) Staging area

  • 커밋을 위한 준비 단계
  • git commit 명령어로 repository로 이동

(3) Repository

  • .git directory라고도 불림
  • 커밋된 상태

2) 파일의 삭제와 이동

(1) git rm

  • 단순히 파일을 삭제할 경우 파일 삭제 내역이 working directory에 있다.
  • git rm 파일명로 파일 삭제하면 파일 삭제 내역이 Staging area에 있다.

(2) git mv

  • git mv 기존파일명 변경할파일명을 사용하면 파일 이름 변경 내역이 Staging area에 올라간다.

3) 파일을 staging area에서 working directory로 이동시키기

  • git restore --staged 파일명
  • git restore 파일명 : working directory에서도 제거

4) reset의 세 가지 옵션

  • --soft : repository에서 staging area로 이동
  • --mixted(default) : repository에서 working directory로 이동
  • --hard : 수정사항 완전히 삭제

3. Git의 HEAD

  • HEAD : 현재 작업하고 있는 로컬 브랜치를 가리킨다.
  • git checkout HEAD^ : 한 커밋 이전으로 이동한다.
  • git checkout HEAD~5 : 5커밋 이전으로 이동한다.
    • ^또는 ~ 갯수만큼 이전으로 이동
  • git checkout 커밋해시 : 해당 커밋으로 이동한다.
  • git checkout - : 이동을 한 단계 되돌리기
  • checkout으로 이동하면 해당 위치에 익명의 브랜치가 생성되고 그곳에 위치한 상태이다.
  • 임의의 위치에서 브랜치를 만들 수 있다.
  • git reset --hard HEAD~ : 한 커밋 전으로 이동하고 그 부분을 날린다. 이런 방식으로도 사용할 수 있다.

4. fetch vs pull

1) fetch와 pull의 차이

  • fetch : 원격 저장소의 최신 커밋을 로컬로 가져오기만 한다.
  • pull : 원격 저장소의 최신 커밋을 로컬로 가져와 merge 또는 rebase 한다.

2) fetch한 내역을 적용하기 전 확인해보기

  • 원격의 main브랜치에 커밋을 추가한 경우
    1. git fetch 입력
    2. git checkout origin/main로 원격의 브랜치로 이동하여 확인 가능
    3. main으로 이동 후 pull
  • 새로원 원격 브랜치를 생성한 경우
    1. git fetch 입력
    2. git checkout origin/브랜치명로 원격의 브랜치로 이동하여 확인 가능
    3. main으로 이동 후 git switch -t origin/브랜치명
    • 원격 브랜치와 동일한 이름의 로컬 브랜치 생성 후 해당 브랜치로 이동
profile
do for me
post-custom-banner

0개의 댓글