Git가 빈 디렉토리를 무시하는 이유는 무엇입니까?

2904 단어 Gitgitignore
LAPRAS advent 달력 2021 17일째 글이다.
개요
Git에서는 빈 디렉토리를 창고에 직접 추가할 수 없습니다.
이 문제는 제작.gitkeep 등을 통해 해결됐지만, 그 방법을 알게 됐을 때 "왜 보통 문서처럼 추가하면 안 될까?"많은 사람들이 이런 의문을 가지고 있겠지.
이 때문에 본 보도는 빈 목록을 추가할 수 없는 원인을 조사했다.
Giit 는 파일 컨텐츠 관리
"왜 add 디렉토리를 비울 수 없습니까?"이 질문에 대한 대답으로.
먼저'원래 어떤 목록도 할 수 없기 때문에add'라고 열거할 수 있다.
물론 git add directory/와 지령을 입력할 수 있습니다.
그러나 이때 실제 색인에 추가된 것은 그것directory 자체가 아니라 그 안에 포함된 파일(내용에 대응하는bloob 대상) 군이다.
색인에서 디렉토리는 해당 파일의 경로 이름으로만 나타납니다.
따라서 디렉터리에 추적 가능한 파일git add이 없으면 아무 일도 일어나지 않는다.
참고 자료
그러나 상술한 '대답' 은 단지 현재의 상황을 말하는 방법이 이렇다.
실제로 빈 디렉터리만 바꿔도 추가 규격이 가능하다면 빈 디렉터리가 대량으로 있는 상황에서 편리할 것이다.
왜 이런 기능은 아직 실현되지 않았습니까?
이 의문의 답은Git 개발자의 메일 리스트에 있다.
디렉터리 관리의 어려움
"왜 빈 디렉터리를 추가할 수 없습니까?"이런 의문에 대해 2007년 7월 18일 게시물 리너스 타벌즈는 다양한 이유를 스스로 들었다.
그 중에서 가장 믿을 만한 설명은 다음과 같다.
<빈 디렉토리를 관리하는 동안 발생한 문제의 예>
먼저 빈 디렉터리에 적당한 파일을 만들어서 기록해 두세요.

안에 있는 파일은 ignore이기 때문에 빈 디렉터리와 동작이 똑같습니다.
또한 이 '빈 디렉터리' 가 Giit 관리를 할 수 있다고 가정하고 제출했습니다.

그러면 이 '빈 디렉터리' 를 제출하기 전의 지점으로 이동하면 어떻게 될까요?
이 디렉터리는 Giit에서 관리하고 있으니 당연히 삭제되겠지.

하지만 그중의 파일은Git 관리에서 삭제된 것이기 때문에 Git의 상태가 어떻든 존재해야 합니다!

삭제할 디렉토리에 저장할 파일이 있다는 점에서 모순된다는 것이다.
문제의 원인
왜 이런 일이 일어났을까?
Linus아래와 같이 설명하다.
추적 디렉터리와 추적 파일은 완전히 다르다는 것을 지적해야 한다.
어의가 완전히 다르다.추궁하면 파일을 추적하는 상황에서 모든 내용을 처리하지만 디렉터리의 경우 이 부분의 집합을 처리한다는 사실에 귀착된다.
디렉터리에 '내용' 의 일부분만 untracked이기 때문에 파일에서 발생하지 않은 문제가 발생할 수 있습니다.
총결산
위의 예 이외에 여러 가지 상황에서 특별한 고려가 필요하고 많은 수정이 필요하다고 지적했다.
그리고 Linus는 이 문제에 대해 별로 관심이 없기 때문에 빈 디렉터리를 관리할 필요가 있으면 패치를 작성하거나 .gitignore의 설정으로 해결하는 것을 권장합니다.
한 마디로 하면 빈 디렉터리를 계속 무시하는 것은
- 파일 내용 추적을 위한 기존 Giit의 설계와 일치하지 않아 다양한 사양상의 문제가 발생할 수 있음
-.gitkeep.gitignore에서 해결된 문제로 인해 대규모 수정의 동력은 매우 낮다
그런 이유 때문이라고 할 수 있죠.

좋은 웹페이지 즐겨찾기