
내 작업 폴더의 디렉터리에서 모든 파일을 삭제했지만 디렉터리 자체는 여전히 존재합니다. 변경 사항을 원격 저장소에 푸시한 후(GitHub) 내 프로젝트를 확인한 결과 디렉토리가 사라진 것을 발견했습니다. Git이 빈 폴더를 삭제할 수 있습니까?
답변1
디렉토리가 표시되지 않는 이유는 무엇입니까?
Git은 디렉토리를 추적하지 않습니다. 파일만 추적합니다.
디렉터리에 파일이 없으면 파일을 추가하거나 제거할 때 해당 디렉터리는 Git에 "존재"하지 않습니다. 특히 디렉터리에서 모든 파일을 삭제하고 해당 변경 사항을 인덱스에 추가하면 Git의 인덱스에서 디렉터리가 사라집니다. 반대로, 디렉토리가 git add
비어 있으면 디렉토리가 추가되지 않습니다.
즉, 파일 브라우저에서 로컬로 디렉터리를 볼 수 있지만 GitHub에서는 사라진 경우 디렉터리에서 모든 파일을 제거하고 해당 변경 사항을 인덱스에 추가하고 커밋하고 푸시했을 가능성이 높습니다.
그러면 빈 디렉토리를 어떻게 추적합니까?
빈 디렉터리를 명시적으로 추적하려면 해당 디렉터리에 파일을 만들어야 합니다. Git은 빈 디렉터리를 추적하지 않으므로 디렉터리에 있는 파일을 Git의 인덱스에 추가하여 추적하도록 속여야 합니다.
일반적으로 사람들은 추적하려는 디렉토리에 파일을 저장 .gitkeep
하지만 디렉토리는 당분간 비어 있어야 합니다. 파일을 주시면 됩니다어느물론 다른 이름도 있지만 이름 .gitkeep
은 관례입니다. .gitkeep
로 시작하는 파일은 대부분 .
의 시스템에서 파일 목록에 표시되지 않습니다.
대신에 .gitkeep
일부 사용자는 파일을 거기에 넣는 것을 좋아합니다 README
. 이상적으로는 처음에 디렉토리가 존재해야 하는 이유에 대한 간단한 설명이 포함되어 있습니다.
예
$ mkdir foo
$ git init
$ git add .
$ git ls-files # which files does Git know about?
# apparently, none
$ touch foo/bar # create a file in the directory
$ git add .
$ git ls-files # does Git know about it now?
foo/bar # yep!
여기서 foo
디렉토리는 파일이 디렉토리에 있는 경우에만 색인에 추가됩니다.
만약 내가정말빈 디렉토리를 추적하고 싶나요?
즉, 원칙적으로 기본 데이터 구조에서는 Git이 빈 "트리"로 표시되므로 빈 디렉터리를 저장할 수 있습니다. 추가 읽기여기그리고여기.
답변2
.gitignore
저장소에 포함하려는 폴더에 다음 파일을 추가합니다 .
# Ignore everything in this directory
*
# Except this file
!.gitignore
추가가 .gitkeep
작동하지만 공식적인 솔루션은 아닙니다. 보다https://stackoverflow.com/questions/7229885/what-are-the-differences-between-gitignore-and-gitkeep
답변3
git clean
Git을 실행 하면 폴더가 삭제될 수 있습니다 -dffx
(해당 옵션의 하위 집합을 사용해도 가능).
@TRiG가 주석에서 언급했듯이, 커밋할 때 디렉터리가 비어 있으면 GitHub 등에는 표시되지 않습니다. git은 디렉터리를 추적하지 않기 때문입니다(파일을 추적합니다). 해당 파일이 있던 트리는 없습니다. 파일이 없으므로 더 이상 관련성이 있으므로 트리가 없습니다.
자세한 내용 없이는 귀하의 기본 질문에 적절하게 답변하는 것이 사실상 불가능합니다(무슨 일이에요?).
답변4
Linux/MAC OSX의 경우 다음 한 줄을 사용하여 빈 자리 표시자 파일을 폴더에 반복적으로 생성/넣어 git에서 해당 파일이 무시되는 것을 방지합니다.
find . -type d -empty -not -path "./.git/*" -exec touch {}/.gitkeep \;
이것이 누군가에게 도움이 되기를 바랍니다.