Program Tip

현재 준비되었거나 커밋 된 git에서 무시한 파일을 나열하는 방법은 무엇입니까?

programtip 2020. 12. 1. 19:38
반응형

현재 준비되었거나 커밋 된 git에서 무시한 파일을 나열하는 방법은 무엇입니까?


.gitignore 파일의 규칙과 일치하지만 과거에 준비되거나 커밋 된 파일 목록을 어떻게 얻습니까?


에 대한 문서 ls-files는 정확하게 작성되지 않았지만 다음과 같은 간단한 별칭이 작업을 수행하는 것으로 보입니다.

git config --global alias.showtrackedignored "ls-files -i --exclude-standard"

위의 명령은라는 별칭을 만듭니다 showtrackedignored. 사용하려면 다음을 실행하십시오.

git showtrackedignored

현재 디렉터리와 추적되는 하위 디렉터리에있는 모든 파일을 나열하지만 추적되지 않으면 무시됩니다.

버그 git ls-files

불행히도 이것은 100 % 안정적으로 작동하지 않습니다. 분명히 힘내해야하는 파일 찾는 좋은 직장 수행 하지 무시,하지만 파일을 검색 할 때 하는 무시합니다 ( -i에 옵션 git ls-files)는이 규칙을 무시 일치하는 디렉토리의 경우,이 디렉토리에 있지 목록 무시 파일을 수행합니다.

이 버그를 해결하려면 무시 규칙을 변환하여 디렉토리가 아닌 파일 만 일치 시키십시오 (항상 가능한 것은 아닙니다).

( 이 버그를 발견 하고 Git 메일 링리스트에보고 해 주신 Christoph 에게 감사드립니다 ! 편집 : 현재 패치가 진행 중이며 git 1.7.11.2 이상으로 만들 것입니다)

대체 접근법

여기에 다른 접근 방식이 있습니다. 훨씬 더 복잡하고 코너 케이스가 손상되었을 수 있습니다.

git config --global alias.showtrackedignored '!
cd "${GIT_PREFIX}" &&
untracked_list=$(git rev-parse --git-dir)/ignored-untracked.txt &&
git ls-files -o -i --exclude-standard >"${untracked_list}" &&
GIT_INDEX_FILE="" git ls-files -o -i --exclude-standard | grep -Fvxf "${untracked_list}" &&
rm -rf "${untracked_list}"'

별칭은 다음을 수행합니다.

  • cd다시 디렉토리 git showtrackedignored에서 실행 된 (힘내는 최상위 디렉토리가 아닌 현재 디렉토리에서 쉘 기반 별칭을 실행;에 절을 참조하십시오 alias.*에서 git help config)
  • 라는 변수를 정의하십시오 untracked_list. 이 변수는 현재 무시 된 파일 목록을 포함 할 임시 파일의 경로를 보유합니다. 이 임시 파일은 .git디렉토리에 있습니다.
  • 무시 된 파일 목록을 ${untracked_list}.
  • Git에게 인덱스가 비어있는 것처럼 작동하도록 지시하고 무시 된 모든 파일을 나열합니다.
  • 해당 출력을로 파이프 grep하여에 기록 된 파일을 필터링합니다 ${untracked_list}.
  • 임시 파일을 삭제하십시오 ${untracked_list}.

이 접근 방식의 단점 :

  • .git디렉토리에 임시 파일을 생성합니다 .
  • POSIX 호환 쉘이 있다고 가정합니다.
  • POSIX 호환 구현이 있다고 가정합니다 grep.

또한 이전 별칭과 동일한 버그가 있습니다.


Richard의 대답에 따라 여기에 남겨 두겠습니다.

git ls-files -i --exclude-standard | xargs git rm --cached

에서 무시되는 모든 추적 파일이 삭제됩니다 .gitignore.


이 질문은 https://stackoverflow.com/a/467053에 의해 잘 답변되었습니다 . 기본적으로 git clean -ndX는 안전하게 무시할 수있는 것을 알려줍니다.

참고 URL : https://stackoverflow.com/questions/9320218/how-to-list-files-ignored-by-git-that-are-currently-staged-or-committed

반응형