source

repo를 새 .gitignore 파일과 다시 동기화합니다.

lovecheck 2023. 6. 26. 21:26
반응형

repo를 새 .gitignore 파일과 다시 동기화합니다.

gitignore 파일을 업데이트한 후 git 저장소를 "새로 고침"할 수 있습니까?

방금 gitignore에 ignore(?)를 추가했으며 새 파일과 일치하는 repo에 이미 있는 항목을 제거하고 싶습니다.

".gitignore file not ignore"에 언급된 솔루션은 약간 극단적이지만 다음과 같이 작동해야 합니다.

# rm all files
git rm -r --cached .
# add all files as per new .gitignore
git add .
# now, commit for new .gitignore to apply
git commit -m ".gitignore is now working"

jball037아래와 같이 문제가 발생하지 않도록 유지할 변경사항을 먼저 커밋해야 합니다.
--cached하지만 옵션을 선택하면 파일이 디스크에 그대로 남아 있습니다.)

또한 블로그 게시물 "이미 추적된 파일을 Git이 무시하도록 만들기"에서 보다 세분화된 솔루션을 제공합니다.

git rm --cached `git ls-files -i --exclude-standard`

바심그의 편집에서 다음과 같이 제안합니다.

경로에 공백이 있는 파일

다음과 같은 오류 메시지가 표시되는 경우fatal: path spec '...' did not match any files경로에 공백이 있는 파일이 있을 수 있습니다.

옵션을 사용하여 다른 모든 파일을 제거할 수 있습니다.--ignore-unmatch:

git rm --cached --ignore-unmatch `git ls-files -i --exclude-standard`

그러나 일치하지 않는 파일은 저장소에 남아 있으므로 경로를 큰따옴표로 묶어서 명시적으로 제거해야 합니다.

git rm --cached "<path.to.remaining.file>"

제가 오해할 수도 있지만, 새로 무시된 파일을 삭제하려는 것입니까, 아니면 이러한 파일에 대한 새로운 수정 사항을 무시하려는 것입니까?이 경우에는 효과가 있습니다.

이전에 커밋된 무시된 파일을 삭제하려면 다음을 사용합니다.

git rm –cached `git ls-files -i –exclude-standard`
git commit -m 'clean up'

오래된 질문인 것은 알지만 파일 이름에 공백이 있으면 Gracchus의 솔루션이 작동하지 않습니다.공백이 있는 파일 이름에 대한 VonC의 해결책은 다음을 사용하여 파일 이름을 제거하지 않는 것입니다.--ignore-unmatch그런 다음 수동으로 제거하지만 많이 있으면 제대로 작동하지 않습니다.

다음은 bash 어레이를 사용하여 모든 파일을 캡처하는 솔루션입니다.

# Build bash array of the file names
while read -r file; do 
    rmlist+=( "$file" )
done < <(git ls-files -i --exclude-standard)

git rm --cached "${rmlist[@]}"

git commit -m 'ignore update'

언급URL : https://stackoverflow.com/questions/7075923/resync-git-repo-with-new-gitignore-file

반응형