.gitignore에서 무시하는 특정 파일을 표시하는 Git 명령
Git에 발을 담그고 있으며 다음과 같은 문제가 있습니다.
내 프로젝트 원본 트리:
/
|
+--src/
+----refs/
+----...
|
+--vendor/
+----...
MEF, 이 를 벤더브현에코드가 (치재 MEF)으있이로 합니다./src/refs
프로젝트가 그들을 픽업하는 곳입니다.
내 문제는 내가 내 것을 가지고 있다는 것입니다..gitignore
무시하도록 설정된*.dll
그리고.*.pdb
할 수 있어요git add -f bar.dll
무시된 파일을 강제로 추가하는 것은 괜찮지만, 문제는 무시된 파일이 존재하는 것을 나열할 수 없다는 것입니다.
무시된 파일을 나열하여 추가하는 것을 잊지 않도록 하고 싶습니다.
나는 에 대한 man 페이지를 읽었습니다.git ls-files
그리고 그것을 작동시킬 수 없습니다.내가 보기엔git ls-files --exclude-standard -i
내가 원하는 것을 해야 합니다.제가 무엇을 빠뜨리고 있나요?
주의:
- 샤오바이의 대답은 더 간단합니다(git1.7.6+).
(자세한 내용은 "git-status를 통해 파일의 영향을 무시할 수 있는 방법이 있습니까?") - Matt DiPasquale의 답변(업로드 예정)은 오래된 깃에서 작동하며 (아무것도 제거하지 않고) 무시된 파일을 제거할 수 있는 미리 보기를 표시합니다.
또한 흥미롭지만(qwertymk의 답변에서 언급됨) 적어도 유닉스에서는 명령을 사용할 수 있습니다(CMD 윈도우즈 세션에서는 작동하지 않음).
git check-ignore *
git check-ignore -v *
는 두번는실표다니의 ..gitignore
Gitrepo에서 파일을 무시하도록 만듭니다.
Unix에서 "재귀적으로 현재 디렉터리의 모든 파일로 확장되는 항목?" 및 bash4+:
git check-ignore **/*
(는또a)find -exec
명령)
참고: https://stackoverflow.com/users/351947/Rafi B.는 댓글에서 (비공식적인) 글로벌 스타를 피하기 위해 다음과 같이 제안합니다.
git check-ignore -v $(find . -type f -print)
에서 ..git/
하위 폴더입니다.
CervEd는 댓글에서 피하라고 제안합니다..git/
:
find . -not -path './.git/*' | git check-ignore --stdin
원답 42009)
git ls-files -i
소스 코드가 다음을 나타내는 경우를 제외하고 작동해야 합니다.
if (show_ignored && !exc_given) {
fprintf(stderr, "%s: --ignored needs some exclude pattern\n",
argv[0]);
exc_given
?
다음 단계 이후에 하나의 매개 변수가 더 필요한 것으로 나타났습니다.-i
목록을 작성합니다.
시도:
git ls-files -i --exclude-from=[Path_To_Your_Global].gitignore
(그러나 캐시된(비캐시된) 개체만 필터와 함께 나열되므로 원하는 개체가 아닙니다.)
예:
$ cat .git/ignore
# ignore objects and archives, anywhere in the tree.
*.[oa]
$ cat Documentation/.gitignore
# ignore generated html files,
*.html
# except foo.html which is maintained by hand
!foo.html
$ git ls-files --ignored \
--exclude='Documentation/*.[0-9]' \
--exclude-from=.git/ignore \
--exclude-per-directory=.gitignore
실제로 'gitignore' 파일('exclude'라고 함)에서 다음과 같은 도움이 될 수 있는 명령줄을 발견했습니다.
F:\prog\git\test\.git\info>type exclude
# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
그래서..
git ls-files --ignored --exclude-from=.git/info/exclude
git ls-files -i --exclude-from=.git/info/exclude
git ls-files --others --ignored --exclude-standard
git ls-files -o -i --exclude-standard
그 묘기를 부려야 합니다.
(댓글에서 지적한 Honzajde 덕분에.git ls-files -o -i --exclude-from...
캐시된 파일을 포함하지 않음: 오직git ls-files -i --exclude-from...
(미포함 -o
(합니다.)
ls-files man 페이지에서 언급했듯이,--others
이 중요한 부분은 비저장, 비저장, 일반 저장 파일을 표시하기 위한 것입니다.
--exclude_standard
는 단순한 바로 가기가 아니라 모든 표준 "패턴" 설정을 포함하는 방법입니다.
exclude-standard
합니다: 표준제외항목추가다니합을다▁add니추..git/info/exclude
,.gitignore
각디토리서에고, 그리렉.user's global exclusion file
.
훨씬 간단한 방법이 있습니다(git 1.7.6+).
git status --ignored
git-status에 .gitignore 파일의 영향을 무시하는 방법이 있습니까?를 참조하십시오.
매우 깨끗한 또 다른 옵션(장난 의도 없음):
git clean -ndX
설명:
$ git help clean
git-clean - Remove untracked files from the working tree
-n, --dry-run - Don't actually remove anything, just show what would be done.
-d - Remove untracked directories in addition to untracked files.
-X - Remove only files ignored by Git.
참고: 이 솔루션은 이미 제거된 무시된 파일을 표시하지 않습니다.
일반적으로 올바른 솔루션이라고 해서 모든 상황에서 효과가 있는 것은 아닙니다.다음과 같은 보고자를 가정합니다.
# ls **/*
doc/index.html README.txt tmp/dir0/file0 tmp/file1 tmp/file2
doc:
index.html
tmp:
dir0 file1 file2
tmp/dir0:
file0
그리고 다음과 같은 .gitignore:
# cat .gitignore
doc
tmp/*
이는 다음을 무시합니다.doc
및 tmp
Git는 예상대로 작동하지만 무시된 파일을 나열하는 지정된 명령은 작동하지 않습니다.Git의 설명을 살펴보겠습니다.
# git ls-files --others --ignored --exclude-standard
tmp/file1
tmp/file2
:doc
목록에 없습니다.다음을 통해 얻을 수 있습니다.
# git ls-files --others --ignored --exclude-standard --directory
doc/
추가 사항에 유의하십시오.--directory
선택.
제가 알기로는 한 번에 모든 무시된 파일을 나열하는 명령어는 없습니다.하지만 왜인지는 모르겠다.tmp/dir0
전혀 나타나지 않습니다.
Git에는 이제 이 기능이 내장되어 있습니다.
git check-ignore *
물론 당신은 지구본을 다음과 같은 것으로 바꿀 수 있습니다.**/*.dll
당신의 경우에는
과 일치하는 파일 GNU의 여러 Gitignore 소스를 ).find
):
$ cd {your project directory}
$ find . -path ./.git -prune -o -print \
| git check-ignore --no-index --stdin --verbose
로컬로 삭제하지 않은 경우 리포지토리의 현재 분기에 있는 모든 파일을 검사합니다.
또한 특정 gitignore 소스 라인도 식별합니다.
Git는 단순히 해당 파일이 이미 추가되었기 때문에 Gitignore 패턴과 일치하는 일부 파일의 변경 사항을 계속 추적합니다.위의 명령은 이러한 파일도 표시합니다.
부정적인 gitignore 패턴도 일치합니다.할 수 , 그 는 그것들이 나은목, 서쉽게구록수로 하기 때문입니다. 왜냐하면 그것들은 다음으로 시작하기 때문입니다.!
.
Windows를 사용하는 경우 Git Bash에는 GNU가 포함되어 있습니다.find
(에 의해 밝혀진 바와 같이)find --version
).
목록이 긴 경우(그리고 당신이 가지고 있는 경우)rev
), 할 수
$ cd {your project directory}
$ find . -path ./.git -prune -o -print \
| git check-ignore --no-index --stdin --verbose \
| rev | sort | rev
자세한 내용은 을 참조하십시오.man find
,man git-check-ignore
,man rev
,그리고.man sort
.
이 전체적인 접근 방식의 요점은 Git(소프트웨어)가 빠르게 변화하고 있으며 매우 복잡하다는 것입니다.의 GNU는find
(적어도 여기에 사용된 기능에서는) 매우 안정적입니다.따라서 Git에 대한 깊은 지식을 보여줌으로써 경쟁력을 갖추기를 원하는 사람은 누구나 다른 방식으로 질문에 대답할 것입니다.
가장 좋은 답은 무엇입니까?이 답변은 모듈화(정보 분리)를 통해 안정성과 단순성이라는 목표를 달성하기 위해 의도적으로 Git 지식에 대한 의존도를 최소화하고 오래도록 설계되었습니다.
사용하기에 충분해야 합니다.
git ls-files --others -i --exclude-standard
그것이 모든 것을 커버하기 때문에
git ls-files --others -i --exclude-from=.git/info/exclude
따라서 후자는 중복됩니다.
You can make this easier by adding an alias to your
~/.gitconfig
file:
git config --global alias.ignored "ls-files --others -i --exclude-standard"
는 그냥 이제입수있다니습할력다▁type있▁just니▁now를 입력하면 됩니다.git ignored
목록을 확인합니다.기억하기 쉽고 입력 속도가 빠릅니다.
Jason Geng의 솔루션을 보다 간결하게 표시하고 싶다면 다음과 같은 별칭을 추가할 수 있습니다.
git config --global alias.ignored "status --ignored -s"
그러나 더 자세한 출력은 무시되는 모든 면 고르기 파일을 나열하기 때문에 .gitignore 파일 문제를 해결하는 데 더 유용합니다. 일적으로파연다니결합로이프결반과를을 통해 결과를 파이프로 연결합니다.grep
무시할 것으로 예상되는 파일이 있는지 또는 무시하지 않을 파일이 있는지 확인합니다.
git ignored | grep some-file-that-isnt-being-ignored-properly
그런 다음 짧은 디스플레이를 보고 싶을 때는 쉽게 기억하고 입력할 수 있습니다.
git status --ignored
(계속)-s
일반적으로 생략할 수 있습니다.)
무시되는 방법과 상관없이 별도의 통지 및 로그 없이 무시되는 유효한 파일 목록만 있으면 됩니다.
생성된 후에는 Git-bash의 모든 위치에서 다음을 실행합니다.
git ignore-list
다음을 실행하여 작성:
git config --global alias.ignore-list "! cd -- \"\${GIT_PREFIX:-.}\" && git ls-files -v \${1:-.} | sed -n -e \"s,^[a-z] \(.*\)$,\${GIT_PREFIX:-./}\1,p\" && git status --ignored --porcelain \${1:-.} 2>/dev/null | sed -n -e \"s/^\(\\!\\! \)\(.*\)$/\2/p\" #"
사용 예: 초기 커밋이며 모든 것을 푸시하려는 경우 다음을 시도합니다.
git ignore-list | xargs git add -f
주의:
- 테스트를 거쳤으며 두 가지 모두에서 작동합니다.
macOS
그리고.Windows
플랫폼! - 이 스유원.
cd
디렉터리에 해당 디렉터리(또는 하위 디렉터리)에서 무시된 파일만 나열합니다. - 에는 root-dir, root-dir가 포함되어 있음)와합니다.
.git
dir이든 에, 이무슨일이있어도당신르디▁dir.cd
안으로).
또 다른 유용한 것은 전체 디렉토리가 무시되는 경우와 같은 인간의 읽기 가능성입니다.build
또는node_modules
이렇게 하면 dir-name만 기록됩니다.
하는 동안에git ls-files --others -i --exclude-standard
합니다("" " " " " " "에 합니다").xargs
).
저는 그냥 할 것입니다.
git status --porcelain --ignored
무시된 파일만 나열합니다.
git status --porcelain --ignored | grep '^[!][!] '
fd를 사용할 수 있습니다.
실행할 명령은 다음과 같습니다.
comm -23 <(fd -HI | sort) <(fd -H | sort)
다음이 없을 경우 주의하시기 바랍니다..git
와 "" "a"만.gitignore
파일(예: bare repo). .gitignore 파일이 어디에 있는지 구체적으로 알려주어야 합니다.
comm -23 <(fd -HI | sort) <(fd -H --ignore-file .gitignore | sort)
구체적으로 , 좀더구로말면하자으적체,면말▁to▁use,--no-ignore-vcs
에 -I
자세한 내용은 여기를 참조하십시오.
(다른 답변 포함)
메모,git check-ignore
를 사용합니다..gitignore
그리고 당신의 작업 트리에 있는 것이 아닙니다! 기록을시키지 않고 가지고 , 롭게 그것을깃▁with▁a▁git▁to로 커밋할 수 있습니다.git commit --amend
.
이 문제는 주로 문제의 해결 방법이 필요한 경우에 발생합니다. 이 Git은 디렉터리를 따르지 않습니다.를 입력합니다..gitignore
:
dirtokeep/**
!dirtokeep/.keep
.keep
가인파합 니다야어이로 된 파일이어야 합니다.dirtokeep
.
결과적으로 모든 것이dirtokeep
다음을 제외하고 무시됩니다. dirtokeep/.keep
그것은 또한 결과를 초래할 것입니다.dirtokeep
디렉토리가 클론/디렉토리에 구성됩니다.
무시 디렉터리가 몇 개 있다고 가정하면 추가할 파일을 알려주는 "git status node/logs/"를 사용하는 것이 어떻습니까?디렉토리에 상태 출력의 일부가 아닌 텍스트 파일이 있습니다. 예:
지점이 '오리진/마스터'로 최신 상태입니다.
추적되지 않은 파일:
하려면 " add사용하십시오.) (git add..."를 사용합니다."를 사용합니다.)
node/logs/.gitignore
.gitignore는 다음과 같습니다.
*
. ignore! .git ignore.
언급URL : https://stackoverflow.com/questions/466764/git-command-to-show-which-specific-files-are-ignored-by-gitignore
'programing' 카테고리의 다른 글
tslint / codelyzer / ng lint 오류: "for (... in...) 문은 if 문으로 필터링해야 합니다." (0) | 2023.05.16 |
---|---|
기존 MongoDB 항목에서 키/값 삭제 (0) | 2023.05.16 |
RichTextBox에서 텍스트 내용을 지우는 방법 (0) | 2023.05.16 |
Azure 스토리지 에뮬레이터가 설치되지 않음 (0) | 2023.05.16 |
VBA를 사용하지 않고 Excel에서 활성 행/열을 강조 표시하시겠습니까? (0) | 2023.05.16 |