자식 프로젝트에서 'bin'디렉토리 무시


1236

다음과 같은 디렉토리 구조가 있습니다.

.git/
.gitignore
main/
  ...
tools/
  ...
...

메인 및 도구 및 다른 디렉토리의 모든 레벨에는 'bin'디렉토리가있을 수 있습니다.이 디렉토리는 무시하고 싶습니다 (그리고 그 아래의 모든 것을 무시하고 싶습니다). gitignore에서 이러한 패턴을 각각 시도했지만 그중 아무것도 작동하지 않습니다.

/**/bin/**/*
/./**/bin/**/*
./**/bin/**/*
**/bin/**/*
*/bin/**/*
bin/**/*
/**/bin/* #and the others with just * at the end too

누구든지 나를 도울 수 있습니까? 첫 번째 패턴 (작동해야한다고 생각되는 패턴) 은이 작업을 수행하면 제대로 작동합니다.

/main/**/bin/**/*

그러나 모든 최상위 디렉토리에 대한 항목을 갖고 싶지 않으며 새 디렉토리를 추가 할 때마다 .gitignore를 수정하고 싶지 않습니다.

이것은 최신 msysgit을 사용하는 Windows에 있습니다.

편집 : 한 가지 더, 이름에 하위 문자열 'bin'이있는 파일과 디렉토리가 있습니다. 파일을 무시하지 않기를 바랍니다. :)


14
아마도 누군가가 도움이 될 것이라고 생각할 것입니다. 리포지토리가 거의없고 각각 동일한 .gitignore 파일을 가지고 있다면, "공통"위치에 놓고> git config --global core.excludesfile ~ / .gitignore_global 마지막 매개 변수는 경로입니다. 공통 위치로. 추신 : 나는 git을 처음 사용하고 그것이 '모범 사례'권장 사항인지 확실하지 않습니다. 그러고 싶지 않다면 알려주십시오. 감사합니다.
Budda

**참조 : 구문은 (3 월 2013, 1.8.2을 이눔) 공식적으로 문서화 지금 것 보다 내 대답을
VonC

2
누구나 실제 매뉴얼 페이지의 최신 버전을 읽으려면 gitignore (5) 매뉴얼 페이지를 참조하십시오 .

한 줄 분량의 정보에 대한 에세이를 읽는 데 지치면 우호적 인 옵션 atlassian.com/git/tutorials/saving-changes/…
suazithustra

답변:


1834

버전 1.8.2 이전 **에는에서 특별한 의미가 없었습니다 .gitignore. 1.8.2부터 git은 **0 개 이상의 하위 디렉토리를 의미합니다 ( 릴리스 노트 참조 ).

디렉토리 트리에서 현재 레벨 아래의 bin이라는 모든 디렉토리를 무시하는 방법 .gitignore은 패턴 이있는 파일을 사용하는 것입니다.

bin/

man페이지 foo에는 유사한 패턴을 사용하여 불리는 디렉토리를 무시하는 예가 있습니다.

편집 : 더 이상 추적하지 않으려는 git 인덱스에 bin 폴더가 이미 있으면 명시 적으로 제거해야합니다. Git은 이제 새로운 .gitignore패턴 과 일치하기 때문에 이미 추적중인 경로 추적을 중단하지 않습니다 . 인덱스 만 ( --cached ) 재귀 적 으로 폴더 제거 ( rm )를 반복적으로 실행합니다 ( -r ). 루트 bin 폴더의 명령 행 예 :

git rm -r --cached bin

72
자식 1.8.2을 시작으로, 자식은 받아 들일 것입니다 **에서 .gitignore: 파일 (소스 1.8.2 변경 로그 )
카를로스 Campderrós

15
입니다 bin같은 bin/?
Nisba

29
@Nisba는 다르며 binbin이라는 파일은 무시하지만 bin/bin이라는 디렉토리에 대해서는
Rani Kheir

8
내가 이것을 넘어서 이후 : git 명령의 폴더 이름은 대소 문자를 구분합니다 :) "bin! = Bin"-
dba

1
windows10에서는 .gitignore 파일을 만들 수 없습니다. gitignore.txt를 만든 다음 명령 프롬프트에서 ren gitignore.txt .gitignore를 실행하여이 파일을 만들어야합니다
shabby

463

.gitignore당신의 꿈은 다음 과 같습니다.

bin/

최상위 수준에서.


git checkout bin *
Chris Sim

1
gitignore_global에 넣어
μολὼν.λαβέ

@GAlexander, 왜 bin / 디렉토리를 전역 적으로 무시하고 싶습니까? 그들은 종종 버전이 지정된 콘텐츠를 가지고 있습니다. 전역 무시는 저장소의 다른 사용자에게 영향을 미치지 않습니다.
Michael Krelin-해커

234

나는 git 초보자에게 언급 할 가치가 있다고 생각합니다.

파일이 이미 체크인되어 있고 무시하려는 경우 나중에 규칙을 추가해도 Git은 파일을 무시하지 않습니다 . 이 경우 터미널에서 다음 명령을 실행하여 파일을 먼저 추적 해제해야합니다.

git rm --cached

따라서 .gitignore를 편집 한 후 로컬 저장소 (이미 존재하는)의 일부 디렉토리를 무시하고 추가하려면 루트 디렉토리 에서이 디렉토리를 실행하십시오.

git rm --cached -r .
git add .

기본적으로 로컬 저장소를 '새로 고침'하고 무시 된 파일을 스테이지 해제합니다.

보다:

http://git-scm.com/docs/git-rm ,

https://help.github.com/articles/ignoring-files/


일반적으로 git add -A커밋을 수행 하면 대신 사용할 수 있습니까? 첫 번째 줄에서 점을 -A로 바꿀 수 있습니까?
ajax333221

69

**제대로 전에 일한 적이 있지만 이후 자식 1.8.2 (3 월은 2013 년 제 8 회) , 명시 적으로 언급하고 지원하는 것 같습니다 :

in .gitignore.gitattributes파일 의 패턴은 0 개 이상의 하위 디렉토리 레벨과 일치하는 패턴으로 가질 수 있습니다**/ .

예를 들어 " foo/**/bar" bar는 " foo"자체 또는 " "의 하위 디렉토리 에서 " "와 일치 foo합니다.

귀하의 경우, 이제이 행이 지원 될 수 있습니다.

/main/**/bin/

46
[Bb]in/

대문자와 소문자 모두 일치


2
[B]in/유일한 대문자가되기
Gank

Bin폴더 만 무시하고 bingit을 커밋 하는 방법은 무엇입니까? [B]in/커밋 Binbin.
Gank

4
@Gank : Bin/ !bin/
Marco G

34

여기에 언급되지 않았지만 대소 문자를 구분하는 것으로 보입니다. / Bin으로 변경하면 파일이 예상대로 무시되었습니다.


3
이것은에 관한 것이 아니라 원래 질문에 대한 답변이 bin아닙니다 Bin.
CB Bailey

49
답은 아니지만 동일한 문제 (지금, 나 자신)를 검색하는 다른 사람들의 완성도를 높입니다.
Jay

25

[Bb]in 문제를 해결할 것입니다.하지만 여기에 무시해야 할보다 광범위한 목록 (GitExtension의 샘플 목록) :

#ignore thumbnails created by windows
Thumbs.db
#Ignore files build by Visual Studio
*.user
*.aps
*.pch
*.vspscc
*_i.c
*_p.c
*.ncb
*.suo
*.bak
*.cache
*.ilk
*.log
[Bb]in
[Dd]ebug*/
*.sbr
obj/
[Rr]elease*/
_ReSharper*/

3
참고 : 이와 같은 항목은 GLOTAL gitignore (보통 홈 디렉토리)에 있어야합니다. gitignore 프로젝트는 프로젝트와 관련된 항목 (예 : C 앱의 .o 파일) 만 무시해야합니다.
BraveNewCurrency


18

1 단계 : .gitignore 파일에 다음 내용을 추가합니다.

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/

# Visual Studio 2015 cache/options directory
.vs/

2 단계 : 적용

문제가 여전히 존재하면 .gitignore 의 설정 은 원래 추적되지 않은 파일 만 무시할 수 있기 때문 입니다. 일부 파일이 버전 제어 시스템에 이미 포함 된 경우 .gitignore 수정 은 유효하지 않습니다. 이 문제를 완전히 해결하려면 Git Bash 또는 패키지 관리자 콘솔 (아래 스크린 샷 참조)을 열어 리포지토리 루트 폴더에서 다음 명령을 실행해야합니다.

$ git rm -r --cached .
$ git add .
$ git commit -m 'Update .gitignore'

PM 콘솔 그러면 문제가 완전히 해결 될 것입니다.


8

말 그대로 어떤 대답도 실제로 나를 위해 일하지 않았다. 나를 위해 일한 유일한 사람은 (Linux)였습니다.

**/bin
(yes without the / in the end)

git version 2.18.0 

bin하위 디렉토리에 이름이 지정된 모든 폴더도 무시 했습니까 ?
vineeshvs 2018 년

5

통지로;

생각 .gitignore하는 방식으로 작동하지 않는 경우 ( foo/*폴더에 추가 된 폴더이지만 git status여전히 폴더 내용을 수정 된 것으로 표시하는 경우)이 명령을 사용할 수 있습니다.

git checkout -- foo/*


3

2.13.3 이상에서는 .gitignore 파일에 bin 만 작성하면 bin과 모든 하위 디렉토리 및 파일을 무시해야합니다

큰 상자


2

.gitignore 파일에 ** / bin /을 추가하면 속임수가되었습니다 (참고 : bin 폴더는 색인에 추가되지 않았습니다).


1

내부 패턴 .gitignore이 슬래시로 끝나는 경우/ 디렉토리와 일치하는 항목 만 찾습니다.

즉, bin/디렉토리 bin와 그 아래의 경로 는 일치 하지만 일반 파일 또는 기호 링크와는 일치하지 않습니다 bin.


Git 에서처럼 패턴 에 슬래시가 포함되어 있지 않으면bin 쉘 glob 패턴 (욕심쟁이)으로 취급합니다. 따라서 가장 간단한 방법을 사용하는 것이 좋습니다 /bin.

bin 이 특정 문제에 대한 최상의 솔루션은 아닙니다.


'시작'을 의미 했습니까 /?
vineeshvs

0

내 경우에는 gitignore 파일의 인코딩에 문제가 있었으므로 UTF-8인지 확인하십시오.

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