gitignore를 사용하여 파일 무시 (삭제는 아님) .gitignore했지만 git status여전히

내 자식 저장소에 tmp 디렉토리가 있지만 여전히 존재하고 싶지만 무시됩니다. 에 추가 .gitignore했지만 git status여전히 해당 디렉토리의 파일 변경 사항에 대해 알려줍니다. 시도 git rm -r --cached했지만 원격 저장소에서 제거됩니다. 이 디렉터리에 대한 변경 내용 추적을 중지하지만 여전히 존재하도록 허용하려면 어떻게해야합니까? 또한 1 개의 파일에 대해이 작업을 수행해야하지만 변경 사항은 파일을 실행 git status한 후에도 표시됩니다 .gitignore. 어떻게해야합니까?



답변

대신 .gitignore다음 명령을 실행하여 로컬 git 저장소를 업데이트 할 수 있습니다.

git update-index --assume-unchanged <file>

이 경우 원본 저장소에서 파일을 추적하고 있습니다. 로컬 저장소에서 수정할 수 있으며 git은 변경된 것으로 표시하지 않습니다. 자세한 내용은 다음을 참조하십시오.


답변

파일이 존재하도록 허용하면서 파일에 대한 변경 사항을 무시하는 것이의 정확한 목적입니다 .gitignore. 따라서 파일 (또는 디렉토리)을 추가하는 .gitignore것만으로도 충분합니다.

그러나 문제는 git이 이미 무시하려는 .gitignore파일을 추적하고 추적 된 파일에 적용되지 않는다는 것입니다. 이 추적을 중지하는 유일한 방법은 git에게 제거하도록 지시하는 것입니다. 를 사용 git rm --cached하면 git이 로컬 파일을 삭제하는 것을 방지 할 수 있지만 변경 사항을받는 다른 저장소는 제거를 적용합니다. 자신의 저장소에서 그것을 피할 방법이 없다고 생각합니다. 다른 저장소에서 작업을 수행해야합니다. 그렇지 않으면 파일이 제거됩니다.

서로의 저장소에서 제거를 방지하려면 다음을 수행하십시오.

  • (분명히) 파일을 어딘가에 백업하고 변경 사항을 가져와 파일을 복원합니다.
  • 또는 변경 사항을 가져 오기 전에git rm --cached 파일을 커밋 하십시오. Git은 이미 추적되지 않은 파일을 건드리지 않고 두 제거를 멋지게 병합합니다.

답변

파일 /의 디렉토리 이름 끝에 a 를 넣으십시오..gitignore

tmp/

해당 디렉토리 내에서 파일을 추적 한 경우 먼저 git에게 파일을 잊어 버리도록 지시해야합니다 (디렉토리를 무시 목록에 추가하기 전에). 거기에 중요한 것이 없다고 가정합니다 (즉, 긁을 수 있음).

git rm -rf ./tmp/
git commit -m "untrack tmp dir"
mkdir tmp
echo tmp/ >> .gitignore
git add .gitignore ; git commit -m "add tmp/ to ignore list"

해당 디렉토리의 새 파일은 추적되지 않습니다.

--cached에 옵션 git rm인덱스에서만 작업 (다소 변경 보류). 작업 트리 또는 추적 된 항목의 상태에 영향을주지 않습니다.


답변

.gitignore는 추적 된 파일에 영향을주지 않습니다.

원하는 것은 tmp / 디렉토리의 파일에 변경되지 않은 가정 비트를 설정하는 것입니다. 이를 수행하는 방법에 대한 좋은 설명이 있습니다. Git : 로컬 저장소에서만 파일 추적을 해제하고 원격 저장소에 보관합니다.

또한 디렉토리의 모든 파일에 대해 변경되지 않은 가정을 설정하는 한 줄짜리 -git update-index –assume-unchanged on directory .


답변

파일을 추적하고 (예 index.php🙂 원격 저장소에 추가 한 다음 추적을 중지하고 파일을 원격에 유지하는 것처럼 들립니다 (예 : index.php로컬로 변경하는 동안 원격 저장소에 변경되지 않은 상태로 유지).

내가 이해하는 바에 따르면 git은 이것을 할 수 없습니다. 파일을 추적하거나 추적하지 않을 수 있습니다. 파일을 추적하면 원격 저장소에 존재하며 변경 사항을 커밋 할 때 변경됩니다. 파일을 추적하지 않으면 원격 저장소에 존재하지 않습니다.

git으로 원하는 것을 정확히 할 수 없기 때문에 정확한 상황에 따라 잠재적으로 다른 솔루션이 있습니다. 예를 들어, index.php로컬로 변경할 때 원격에서 변경 하지 않는 이유는 무엇입니까? 파일에 사용자 별 설정이 있습니까? 이 경우 다음을 수행 할 수 있습니다.

cp index.php index_template.php
git rm --cached index.php

이제 index_template.php를 원격 저장소에 표시하려는대로 편집합니다. README에 무언가를 추가하여 저장소를 사용하는 사람들에게 일단 복제하면 index_template.php를 index.php에 복사하고 필요에 맞게 편집해야한다고 알려줍니다.

git add index_template.php
git add README
git commit -m 'added template index.php file'
git push

누군가 리포지토리를 복제 할 때 자신의 index.php. 당신은 그들을 위해 쉽게 만들었습니다 : 단순히 복사 index_template.phpindex.php컴퓨터 별 설정과이를 조정한다.