Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

12.고급 기능.md #6

Open
iyoungman opened this issue Dec 20, 2021 · 0 comments
Open

12.고급 기능.md #6

iyoungman opened this issue Dec 20, 2021 · 0 comments

Comments

@iyoungman
Copy link

iyoungman commented Dec 20, 2021

12.1 refs

  • 커밋은 고유의 SHA1 해시 값을 가지고 있으며
  • 깃에서는 여러 기능에서 참조하는 해시 값을 refs 목록으로 가지고 있는다.

12.1.2 해시

  • 커밋 로그 확인

git show 해시값

12.1.4 참조 목록

  • 깃에서는 생성된 해시 값을 쉽게 참조할 수 있도록 refs 목록을 생성한다.
  • .git/refs 폴더 안에 저장된다.
  • head 기능을 예로 들면 브랜치별로 head에 해당하는 hash가 생성된다.
    image

12.2 reflog

  • 깃은 참조된 모든 refs를 기록한다.
  • 한 번이라도 사용했던 HEAD와 브랜치를 기록

git reflog

  • reflog는 시스템에서 정의한 며칠 간의 기록만 보관하고 그 이전의 작업들은 모두 삭제한다.

12.3 파일 애너테이션

12.3.1 blame

  • 커밋의 메타 정보를 코드 라인별로 출력
  • 코드 수정자가 누구인지 파악하기 위한 기능

12.4 replace

  • 커밋이 참조하는 해시 값을 속여서 다른 커밋으로 변경한다.
  • 기존 커밋을 다른 커밋인 것처럼 변경하는 기능

12.5 가비지 콜렉트

12.5.1 가비지

  • 동적인 언어에서 메모리를 관리하려고 생성한 개념
  • 이력을 추적할때 객체의 생성과 변경을 반복합니다. 여러 번 처리 동작을 반복하면서 시간이 지남에 따라 연결 고리가 없는 고립된 객체들이 생김.
  • 대표적으로 리셋(reset) 또는 리베이스(rebase) 등을 자주 할 때 발생

12.5.2 압축 관리

  • 연결 고리가 없는 객체가 수없이 생성.
  • 깃 내부에 이러한 객체가 많아지면 저장소 용량도 커지고, 객체도 빠르게 관리하기 어렵다.
  • 깃은 이러한 연결 고리가 없는 객체들을 pack 파일 형태로 압축하여 저장.

12.5.3 실행

  • 깃에서 내부적으로 가비지 정리가 필요하다고 생각할 때, gc 명령어를 자동으로 실행
  • gc 명령어가 실행되면 객체를 압축하고 pack 파일 형태로 저장하거나 제거
  • 자동 실행

git gc –auto

12.5.4 refs 압축

  • gc 명령어는 객체의 압축과 refs를 같이 처리
  • .git/packed-refs 에 refs에 대한 압축 파일이 생긴다.
  • refs 를 먼저 찾고 이후에 packed-refs 검색

12.6 prune

  • gc 명령어는 몇 가지 명령어와 함께 사용.
  • prune 명령어는 고립된 객체를 정리하는 내부 유틸리티.

실습

  1. 커밋
    image

2.두번째 커밋 강제 제거

git reset –hard ea57d7f
image

  • 리셋을 통해 객체 연결 고리를 해제하여 끊긴 상태. 이 커밋은 깃 내부 저장소에 고립된 객체.
  1. prune 명령어를 이용해서 고립 객체 삭제

git prune –dry-run –verbose

  • 삭제가 안된다. 리셋으로 연결고리는 해제되었지만 reflog 에서 참조하고 있기 때문이다. prune 으로 정리를 위해서는 어떤 명령어로도 해당 객체에 접근할 수 없어야한다.
  1. 실습을 위해 reflog 정리

git reflog expire –expire=now –expire-unreachable=now –all


12.7 rerere (reuse recorded resolution)

  • 깃은 협업 작업을 할 때 발생한 문제들을 충돌이라는 형태로 알려준다.
  • rerere 기능을 활성화하면, 깃은 충돌을 해결할 때마다 해결한 문제의 유형을 기록하며 비슷한 유형의 문제가 향후 다시 발생한다면, 미리 기록한 해결 정보를 바탕으로 자동으로 적용

12.7.2 활성화

git config rerere.enabled true

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant