태그 보관물: ignore

ignore

gitgitore에 의해 무시되는 특정 파일을 보여주는 Git 명령 참조를 옮길 것입니다. 내

Git으로 발을 젖게하고 다음과 같은 문제가 있습니다.

내 프로젝트 소스 트리 :

/
|
+--src/
+----refs/
+----...
|
+--vendor/
+----...

공급 업체 지점에 코드 (현재 MEF)가있어 거기서 컴파일 /src/refs하고 프로젝트가 참조 하는 곳 으로 참조를 옮길 것입니다.

내 문제는 .gitignore무시 *.dll하고로 설정 했다는 것 *.pdb입니다. 내가 할 수있는 git add -f bar.dll괜찮 무시 된 파일의 추가를 강제로, 문제는 내가 파일이 무시되는 존재 무엇 목록에 알아낼 수 없습니다입니다.

무시한 파일을 나열하여 파일을 추가하는 것을 잊지 않도록 나열하고 싶습니다.

맨 페이지를 읽었으며 git ls-files제대로 작동하지 않습니다. git ls-files --exclude-standard -i내가 원하는 것을 해야한다고 생각합니다. 내가 무엇을 놓치고 있습니까?



답변

노트:


또한 qwertymk답변 에서 언급했듯이 git check-ignore -v적어도 Unix에서 명령 을 사용할 수도 있습니다 ( CMD Windows 세션 에서는 작동하지 않습니다 )

git check-ignore *
git check-ignore -v *

두 번째 규칙은 실제 규칙을 표시 .gitignore하므로 git repo에서 파일을 무시합니다.
유닉스에서 ” 현재 디렉토리의 모든 파일을 재귀 적으로 확장합니까? “및 bash4 +를 사용하는 경우 :

git check-ignore **/*

(또는 find -exec명령)

참고 : https://stackoverflow.com/users/351947/Rafi B.의견 에서 (위험한) globstar피할 것을 제안 합니다 .

git check-ignore -v $(find . -type f -print)

.git/그래도 하위 폴더 에서 파일을 제외해야합니다 .


원래 답변 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 --others --ignored --exclude-from=.git/info/exclude
git ls-files -o -i --exclude-from=.git/info/exclude

git ls-files --others --ignored --exclude-standard
git ls-files -o -i --exclude-standard

트릭을해야합니다.

에서 언급 한 바와 같이 LS-파일 man 페이지 , --others캐시되지 않은, 비 최선을 다하고, 정상 무시 파일을 보여주기 위해, 중요한 부분입니다.

--exclude_standard바로 가기 일뿐 아니라 모든 표준 “무시 된 패턴”설정 을 포함하는 방법 입니다.

exclude-standard
: 표준 자식 제외를 추가 .git/info/exclude, .gitignore각 디렉토리에, 그리고 user's global exclusion file.


답변

훨씬 간단한 방법이 있습니다 (git 1.7.6+) :

git status --ignored

.gitignore 파일의 영향을 무시하도록 git-status에 지시하는 방법이 있습니까?를 참조하십시오 .


답변

꽤 깨끗한 또 다른 옵션 (말장난 의도 없음) :

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.

참고 :이 솔루션에는 이미 제거 된 무시 된 파일이 표시되지 않습니다.


답변

일반적으로 문제는 해결되지만 모든 상황에서 솔루션이 작동하지는 않습니다. 다음과 같이 repo dir을 가정하십시오.

# 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 ls-files --others --ignored --exclude-standard
tmp/file1
tmp/file2

공지 사항 doc목록에서 누락되었습니다. 당신은 그것을 얻을 수 있습니다 :

# git ls-files --others --ignored --exclude-standard --directory
doc/

추가 --directory옵션을 확인하십시오.

내 지식에서 더이없는 번에 모든 무시 파일을 나열하는 명령. 그러나 왜 tmp/dir0전혀 나타나지 않는지 모르겠습니다 .


답변

힘내 지금이 기능을 내장

git check-ignore *

물론 당신은 **/*.dll당신의 경우 와 같이 글로브를 변경할 수 있습니다

힘내 참조


답변

사용하기에 충분해야합니다

git ls-files --others -i --exclude-standard

그로 덮여있는 모든 것을 다룹니다

git ls-files --others -i --exclude-from=.git/info/exclude

따라서 후자는 중복됩니다.


~/.gitconfig파일에
별명을 추가하여이를 쉽게 수행 할 수 있습니다 .

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

이제 입력 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의 여러 gitignore 소스 (GNU를 사용하는 경우)의 어느 위치 에나있는 패턴과 일치하는 작업 트리의 전체 파일 목록을 인쇄하는 방법은 다음과 같습니다 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 지식에 대한 의존도를 의도적으로 최소화하며 오랫동안 지속되도록 설계되었습니다 .