문제의 두 가지 예는 실제로 데이터 손실로 이어질 수있는 매우 나쁜 예입니다!
내 충고 : /*
정당한 이유가 없다면 .gitignore 파일의 디렉토리에 절대 추가하지 마십시오 !
예를 들어 Jefromi가 다음과 같이 기록한 것이 그만한 이유 일 것입니다. "이후에 디렉토리에서 무언가를 무시하지 않으려면" .
그렇지 않으면 /*
디렉토리에 추가하는 것이 디렉토리의 모든 내용을 올바르게 무시하는 방식으로 작동하지만 다른 한편으로는 위험한 부작용이 있기 때문입니다.
를 실행하면 git stash -u
(임시 추적 추적되지 숨겨 놓은 파일) 또는 git clean -df
(비 추적 삭제되지만 무시 파일을 보관) 저장소에 추가 된로 무시되고 모든 디렉토리가 /*
될 것이다 비가 역적 삭제 !
일부 배경
나는 이것을 어려운 방법으로 배워야했다. 우리 팀의 누군가가 /*
.gitignore의 일부 디렉토리에 추가 하고있었습니다. 시간이 지남에 따라 특정 디렉토리가 갑자기 사라지는 경우가있었습니다. 응용 프로그램에 필요한 기가 바이트의 로컬 데이터가있는 디렉토리 아무도 그것을 설명 할 수 없었고 항상 모든 데이터를 다시 다운로드하는 것을 싫어합니다. 잠시 후 나는 그것과 관련이있을 수있는 개념을 얻었다 git stash
. 어느 날 나는 (무시 된 파일을 유지하면서) 내 로컬 저장소를 정리하고 싶었고 git clean -df
데이터를 다시 사용 하고있었습니다. 이번에는 문제를 충분히 조사하고 조사했습니다. 나는 그 이유가 추가 된 것이라고 마침내 생각했다 /*
.
나는 그것이 directory/*
디렉토리 자체가 아니라 디렉토리의 모든 내용을 무시 한다는 사실에 의해 어떻게 든 설명 될 수 있다고 가정합니다 . 따라서 항목이 삭제 될 때 추적되거나 무시되지 않습니다. 그럼에도 불구 git status
하고 git status --ignored
약간 다른 그림을 제공하십시오.
재현하는 방법
다음은 동작을 재현하는 방법입니다. 현재 Git 2.8.4를 사용하고 있습니다.
라는 디렉토리 localdata/
거기에 더미 파일 (와는 important.dat
) 로컬 자식 저장소에 작성되고 내용은 퍼팅에 의해 무시됩니다 /localdata/*
로 .gitignore
파일. 언급 된 두 가지 git 명령 중 하나가 지금 실행되면 디렉토리가 (예기치 않게) 손실됩니다.
mkdir test
cd test
git init
echo "/localdata/*" >.gitignore
git add .gitignore
git commit -m "Add .gitignore."
mkdir localdata
echo "Important data" >localdata/important.dat
touch untracked-file
당신이 할 경우 git status --ignored
여기, 당신은 얻을 것이다 :
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
untracked-file
Ignored files:
(use "git add -f <file>..." to include in what will be committed)
localdata/
이제 어느 쪽이든
git stash -u
git stash pop
또는
git clean -df
두 경우 모두 무시 된 것으로 의심되는 디렉토리 localdata
는 사라집니다!
이것이 버그로 간주 될 수 있는지 확실하지 않지만 적어도 아무도 필요없는 기능이라고 생각합니다.
나는 그것을 자식 개발리스트에보고하고 그들이 어떻게 생각하는지 볼 것이다.
.gitignore
파일은 무시 디렉토리 구분을? 예를 들어,data
vsdata/
는 다른 것을 의미합니까?