하위 폴더를 무시


438

내 .Net 솔루션에 많은 프로젝트가 있습니다. 모든 "bin / Debug"및 "bin / Release"폴더 (및 해당 내용)를 제외하고 싶지만 여전히 "bin"폴더 자체와 그 안에 포함 된 dll이 포함되어 있습니다.

"bin /"이있는 .gitignore는 "Debug"및 "Release"폴더와 "bin"폴더에 포함 된 모든 dll을 무시합니다.

gitgitore 파일의 "bin / Debug"또는 "bin / Release"는 무시 패턴을 "Solution / Project / bin / Debug"로 완전히 규정하지 않는 한 디렉토리를 제외하지 않습니다. 내 솔루션의 각 프로젝트에 대해이 전체 패턴을 포함하고 추가 된 새 프로젝트에 추가해야합니다.

어떤 제안?


왜 DLL을 추가해야합니까? 타사 DLL을 참조하는 경우 모든 프로젝트가 참조하는 공통 폴더를 추가하는 것이 좋습니다.
Paddy

6
Paddy의 권리-타사 DLL 인 경우 코드에서 멀리 떨어져 구성해야합니다. 그러나 나에게 그것은 일반적으로 가고 싶지 않은 자체 빌드 제품을 체크인하는 것처럼 들립니다. git을 사용하여 정보 를 추적합니다.이 정보 는 코드 및 빌드 구성에 완전히 포함되어 있습니다. 제품은 제품입니다. 예를 들어, 코드를 변경했지만 새 제품을 빌드하고 체크인하는 것을 잊어 버린 경우 어떻게해야합니까?
Cascabel

하위 폴더를 제외하는 데 문제가있었습니다. 여기에 쓰여진 정확한 샘플을 포함하여 모든 것을 시도했지만 성공하지 못했습니다. 마지막으로 폴더 패턴 사이에 빈 줄을 추가하면 작동합니다. 인코딩 문제 일 수 있습니다. 창문이 있고 이것을 UTF8로 인코딩했습니다.
RoadBump

답변:


552

와일드 카드를 사용해 보셨습니까?

Solution/*/bin/Debug
Solution/*/bin/Release

git 버전 1.8.2에서는 **와일드 카드를 사용하여 모든 수준의 하위 디렉토리와 일치 시킬 수도 있습니다 .

**/bin/Debug/
**/bin/Release/

8
솔루션 / 모듈 / 프로젝트와 같은 다른 프로젝트가있는 하위 폴더가있는 경우를 제외하고는 작동합니다. 지금은 / * / * / bin / Debug 및 / * / * / * / bin / Debug를 추가했습니다 폴더). 디렉토리 구조의 각 레벨마다 와일드 카드 하위 폴더를 추가해야합니다.
Marcel

1
@Marcel : 글쎄, git은 당신이 말하지 않은 파일을 무시하지 않을 것입니다-와일드 카드와 일치하는 것을 무시합니다.
Cascabel

더블 스타는 디렉토리 경계를 넘을 것이라고 생각합니다. 예 : / ** / bin / Debug
Trent

11
@Taras : 불행히도 그렇지 않습니다.
Tuukka Mustonen

2
와 관련된 Visual Studio에 버그가있었습니다 **. 지금 수정해야합니다. 링크
Bogac

106

최상위 레벨에서 .gitignore를 사용하여 동일한 이름을 가진 프로젝트의 모든 디렉토리를 무시할 수 있습니다. 예를 들면 다음과 같습니다.

Debug/
Release/

git status 할 때 보이도록 즉시 업데이트해야합니다. 이 디렉토리가 git에 아직 추가되지 않았는지 확인하십시오. 무시하면 무시됩니다.


OPs $GIT_DIR/.git/info/exclude파일에 패턴을 추가하여 동일한 작업을 수행 할 수 있습니다 .
Tim Henigan 2016 년

1
차이점은 .gitignore 파일이 코드를 따르므로 모든 곳에 적용된다는 것입니다. 제외 파일은 리포지토리에만 로컬 인 반면 해당 특정 리포지토리에만 적용됩니다. 다른 커미터가 이러한 디렉토리를 커밋하려는 이유가 없다면 .gitignore를 사용하는 것이 좋습니다.
Andreas

1
이 문제의 또 다른 문제는 솔루션이라는 프로젝트에 디버그라는 프로젝트가있는 경우 무시되는 것입니다. 해결책은 모든 대답과 의견의 조합이라고 생각합니다. 공통 또는 참조 된 dll을 다른 폴더에 보관 한 다음 "bin /"을 무시하고 와일드 카드를 사용하도록 솔루션을 재구성하십시오.
Marcel

16
+1 디렉토리가 git에 아직 추가되지 않았는지 확인하는 데 도움이됩니다. 이미 자식에 추가 한 경우, 수행git rm -rf DirectoryName/
levibostian

57

질문은 모든 하위 디렉토리를 무시하는 것에 대해 묻지 않지만 어디서도 답을 찾을 수 없으므로 게시 할 것 */*입니다.


1
당신이 명확히 할 수있는 기회가 있습니까? 나는 이것에 대한 모든 종류의 변형을 시도 git add했으며 디렉토리와 그 디렉토리의 모든 하위 디렉토리에있는 모든 파일을 무시할 수는 없습니다 . 내가 시도 dirname/, dirname/*, dirname/**, dirname/*/*, 심지어 절망 dirname/*/*/*, dirname/*/*/*/*, dirname/*/*/*/*/*.
Chris

3
*/*현재 디렉토리의 파일이 아닌 모든 서브 디렉토리를 무시합니다. 특정 서브 디렉토리를 무시하는 것은 일반적인 gitignore 사용법입니다. dirname, dirname/그리고 dirname/*모두 나를 위해 일합니다. 해당 디렉토리에 이미 커밋 된 것이 있습니까?
mgold

그것은 새로운 저장소입니다 -1.9.4.msysgit.1을 사용하여 .git시도 사이에 전체 디렉토리를 삭제 한 git init다음 git add --all .(없이 시도했습니다 --all). 이름이 지정된 디렉토리 아래의 비어 있지 않은 하위 디렉토리가 모두 색인에 추가됩니다 (TortoiseGit 및에서 확인 git status). .gitignore시작할 때 관련 줄이 !없지만 약간의 충돌이 있어야합니다. 동안 폴더를 제거하여 지금 해결했습니다 add. 이것이 진단하는 데 필요한 정보를 제공하기 위해 조금 더 파고들 필요가 있다고 생각합니다. 구문을 오해하지 않는다고 안심시켜 주셔서 감사합니다.
Chris

폴더 내부의 폴더를 무시해야하지만 첫 번째 폴더는 무시하지 않으면 어떻게됩니까? 마찬가지로 포럼 / ignorethisfolder / ...하지만 그는하지 폴더라는 포럼 무시
장 카를로스 Racoski

이름이 점으로 시작하는 디렉토리를 무시하는 데는 효과가 없습니다. " /. "및 ". * / *"도 작동하지 않습니다.
Tony

44

위의 모든 대답은 유효하지만 생각하지 않는 부분은 해당 디렉토리의 파일을 저장소에 추가하면 해당 파일이 포함 된 디렉토리 / 하위 디렉토리를 무시할 수 없다는 것입니다 (git은 해당 지시문을 무시합니다) ).

이미 추가 된 파일을 무시하려면

$ git rm --cached

그렇지 않으면 repo의 대상 디렉토리에서 모든 파일을 먼저 제거해야하며 해당 폴더를 무시할 수 있습니다.


12
git rm --cached 당신이 그것들을 추적하지 않고 / 이력과 관련이 없지만 파일을 로컬에 그대로 유지하려면.
Erik Reppen

29

gitgitore 파일에 올바른 항목을 넣는 것 외에도 이미 repo에 추가 된 것을 무시하려는 경우 git rm -r /path/to/dirdir을 .gitignore 파일에 추가하기 전에 수행해야 합니다. 그렇지 않으면 git이 무시할 유일한 것은 ignore 지시문입니다.


19

내 컴퓨터 에서이 작업을 수행하는 유일한 방법은 다음과 같이하는 것입니다.

# Ignore all directories, and all sub-directories, and it's contents:
*/*

#Now ignore all files in the current directory 
#(This fails to ignore files without a ".", for example 
#'file.txt' works, but 
#'file' doesn't):
/*.*

#Only Include these specific directories and subdirectories:
!wordpress/
!wordpress/*/
!wordpress/*/wp-content/
!wordpress/*/wp-content/themes/

포함하려는 각 수준에 대해 콘텐츠를 명시 적으로 허용해야하는 방법에 주목하십시오. 하위 테마가 5 개의 테마 아래에있는 경우에도 여전히이를 설명해야합니다.

이것은 @Yarin의 의견에서 온 것입니다 : https://stackoverflow.com/a/5250314/1696153

다음은 유용한 주제였습니다.

나는 또한 시도했다

*
*/*
**/**

**/wp-content/themes/**

또는 /wp-content/themes/**/*

그 중 어느 것도 나를 위해 일하지 않았습니다. 많은 흔적과 오류!


13

컨텐츠 및 서브 디렉토리를 제외 시키려면 다음을 수행하십시오.

**/bin/*

모든 서브 디렉토리를 제외하고 컨텐츠를 가져 오려면 "/"를 추가하십시오.

**/bin/*/

9

모든 하위 디렉토리를 무시하려면 다음을 사용하면됩니다.

**/

이것은 git 버전 1.8.2부터 작동합니다.


8

/bin디렉토리 에있는 파일을 계속 추적하면서 모든 하위 폴더를 무시하는 일반적인 방법은 프로젝트의 .gitignore 파일에 다음 줄을 추가하는 것입니다.

bin/*/*

명명 된 특정 하위 폴더 만 무시하려면 다음을 수행하십시오.

bin/Debug/*
bin/Release/*

nb. 경우 bin디렉토리합니다 (.gitignore 파일과 함께) 프로젝트의 루트에 있지 않은 경우, 대신 예를 들어,의. bin/*/*너는 필요할지도 모른다path/to/bin/*/*

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.