etc./StackOverFlow

.gitignore가 몇 개의 파일을 제외한 모든 것을 무시하도록 합니다.

청렴결백한 만능 재주꾼 2021. 12. 8. 01:19
반응형

질문자 :Andrew


.gitignore 파일이 Git의 버전 제어에서 지정된 파일을 은폐한다는 것을 이해합니다. 실행할 때 많은 추가 파일(.auth, .dvi, .pdf, 로그 등)을 생성하는 프로젝트(LaTeX)가 있지만 이러한 파일을 추적하고 싶지 않습니다.

폴더를 무시할 수 있기 때문에 모든 파일이 프로젝트의 별도 하위 폴더에 놓이도록 만들 수 있다는 것을 알고 있습니다.

그러나 출력 파일을 프로젝트 트리의 루트에 유지하고 .gitignore를 사용하여 Git으로 추적하는 파일을 제외한 모든 것을 무시할 수 있는 가능한 방법이 있습니까? 같은 것

 # Ignore everything * # But not these files... script.pl template.latex # etc...


선택적 접두사 ! 패턴을 무효화합니다. 이전 패턴에서 제외된 모든 일치 파일은 다시 포함됩니다. 부정 패턴이 일치하면 우선 순위가 낮은 패턴 소스를 재정의합니다.

 # Ignore everything * # But not these files... !.gitignore !script.pl !template.latex # etc... # ...even if they are in subdirectories !*/ # if the files to be tracked are in subdirectories !*/a/b/file1.txt !*/a/b/c/*

Joakim Elofsson

디렉토리 안의 파일 하나만 제외하고 디렉토리의 전체 내용을 무시하려면 파일 경로의 각 디렉토리에 대해 한 쌍의 규칙을 작성할 수 있습니다. 예는 .gitignore 무시하는 pippo 에서 제외 폴더 pippo/pluto/paperino.xml

 pippo/* !pippo/pluto pippo/pluto/* !pippo/pluto/paperino.xml

단순히 위에서 작성한 경우:

 pippo/* !pippo/pluto/paperino.xml

Git에 pluto 폴더가 없기 때문에 작동 paperino.xml 이 존재할 위치를 찾을 수 없습니다.


Giuseppe Galano

대부분의 경우 * 또는 */ 대신 /* 를 사용하려고 합니다.

* 사용하는 것은 유효하지만 재귀적으로 작동합니다. 그 다음부터는 디렉토리를 조사하지 않습니다. 사람들은 !*/ /* 하여 최상위 폴더를 블랙리스트에 추가하는 것이 좋습니다.

 # Blacklist files/folders in same directory as the .gitignore file /* # Whitelist some files !.gitignore !README.md # Ignore all files named .DS_Store or ending with .log **/.DS_Store **.log # Whitelist folder/a/b1/ and folder/a/b2/ # trailing "/" is optional for folders, may match file though. # "/" is NOT optional when followed by a * !folder/ folder/* !folder/a/ folder/a/* !folder/a/b1/ !folder/a/b2/ !folder/a/file.txt # Adding to the above, this also works... !/folder/a/deeply /folder/a/deeply/* !/folder/a/deeply/nested /folder/a/deeply/nested/* !/folder/a/deeply/nested/subfolder

.gitignore , README.md , folder/a/file.txt , folder/a/b1/folder/a/b2/ 및 마지막 두 폴더에 포함된 모든 파일을 제외한 모든 파일을 무시합니다. (그리고 .DS_Store*.log 파일은 해당 폴더에서 무시됩니다.)

분명히 예를 들어 !/folder 또는 !/.gitignore 도 할 수 있습니다.

추가 정보: http://git-scm.com/docs/gitignore


Ryan Taylor

조금 더 구체적으로:

webroot/cache 모든 것을 무시 webroot/cache/.htaccess 유지하십시오.

cache 폴더 뒤에 있는 슬래시(/)를 확인하십시오.

실패

 webroot/cache* !webroot/cache/.htaccess

공장

 webroot/cache/* !webroot/cache/.htaccess

Nik

# ignore these * # except foo !foo

Suvesh Pratapa

디렉토리에 있는 일부 파일을 무시하려면 올바른 순서로 이 작업을 수행해야 합니다.

예를 들어, index.php와 폴더 "config"를 제외하고 "application" 폴더의 모든 항목을 무시 하고 순서에 주의하십시오 .

원하는 것을 먼저 부정해야 합니다.

실패

application/*

!application/config/*

!application/index.php

공장

!application/config/*

!application/index.php

application/*


slatunje

OP와 비슷한 문제가 있었지만 상위 10개 추천 답변 중 어느 것도 실제로 작동하지 않았습니다 .
나는 마침내 다음을 발견했다.

잘못된 구문:

 * !bin/script.sh

올바른 구문:

 * !bin !bin/script.sh

gitignore 매뉴얼 페이지의 설명 :

선택적 접두사 "!" 패턴을 무효화합니다. 이전 패턴에서 제외된 모든 일치 파일은 다시 포함됩니다. 해당 파일의 상위 디렉토리가 제외된 경우 파일을 다시 포함할 수 없습니다 . Git은 성능상의 이유로 제외된 디렉토리를 나열하지 않으므로 포함된 파일의 패턴은 정의된 위치에 관계없이 영향을 미치지 않습니다.

bin/script.sh bin/ 이 무시되므로 다시 포함될 수 없기 때문에 위의 "잘못된 구문"이 잘못되었음을 의미합니다. 그게 다야.

확장된 예:

$ 나무 .

 . ├── .gitignore └── bin ├── ignore.txt └── sub └── folder └── path ├── other.sh └── script.sh

$ 고양이 .gitignore

 * !.gitignore !bin !bin/sub !bin/sub/folder !bin/sub/folder/path !bin/sub/folder/path/script.sh

$ git status --untracked-files --ignored

 On branch master No commits yet Untracked files: (use "git add <file>..." to include in what will be committed) .gitignore bin/sub/folder/path/script.sh Ignored files: (use "git add -f <file>..." to include in what will be committed) bin/ignore.txt bin/sub/folder/path/other.sh nothing added to commit but untracked files present (use "git add" to track)

frntn

git config status.showUntrackedFiles no 를 사용하면 추적되지 않은 모든 파일이 숨겨집니다. 자세한 내용은 man git-config 를 참조하십시오.


Robert Munteanu

.gitignore에서 폴더를 제외하려면 다음을 수행할 수 있습니다.

 !app/ app/* !app/bower_components/ app/bower_components/* !app/bower_components/highcharts/

이것은 내부의 모든 파일 / 하위 폴더를 무시합니다 bower_components 제외 /highcharts .


Guy Baskin

이와 관련하여 비슷한 질문이 많이 있으므로 이전에 작성한 내용을 게시합니다.

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

 # 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 and files if you wish: !wordpress/somefile.jpg !wordpress/ !wordpress/*/ !wordpress/*/wp-content/ !wordpress/*/wp-content/themes/ !wordpress/*/wp-content/themes/* !wordpress/*/wp-content/themes/*/* !wordpress/*/wp-content/themes/*/*/* !wordpress/*/wp-content/themes/*/*/*/* !wordpress/*/wp-content/themes/*/*/*/*/*

포함하려는 각 수준에 대한 콘텐츠를 명시적으로 허용해야 하는 방법에 유의하세요. 따라서 테마 아래에 5개의 하위 디렉토리가 있는 경우에도 이를 철자해야 합니다.

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

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

나는 또한 시도했다

 * */* **/**

**/wp-content/themes/**

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

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


Katie

나는 내가 파티에 늦었다는 것을 알고 있지만 여기에 내 대답이 있습니다.

@Joakim이 말했듯이 파일을 무시하려면 아래와 같이 사용할 수 있습니다.

 # Ignore everything * # But not these files... !.gitignore !someFile.txt

그러나 파일이 중첩 디렉토리에 있는 경우 수동으로 규칙을 작성하기가 약간 어렵습니다.

git 프로젝트의 모든 파일을 건너뛰고 aDir/anotherDir/someOtherDir/aDir/bDir/cDir 에 있는 a.txt 는 건너뛰고 싶은 경우입니다. 그러면 .gitignore 는 다음과 같을 것입니다.

 # Skip all files * # But not `aDir/anotherDir/someOtherDir/aDir/bDir/cDir/a.txt` !aDir/ aDir/* !aDir/anotherDir/ aDir/anotherDir/* !aDir/anotherDir/someOtherDir/ aDir/anotherDir/someOtherDir/* !aDir/anotherDir/someOtherDir/aDir/ aDir/anotherDir/someOtherDir/aDir/* !aDir/anotherDir/someOtherDir/aDir/bDir/ aDir/anotherDir/someOtherDir/aDir/bDir/* !aDir/anotherDir/someOtherDir/aDir/bDir/cDir/ aDir/anotherDir/someOtherDir/aDir/bDir/cDir/* !aDir/anotherDir/someOtherDir/aDir/bDir/cDir/a.txt

위에 주어진 .gitignore !aDir/anotherDir/someOtherDir/aDir/bDir/cDir/a.txt 제외한 모든 디렉토리와 파일을 건너뜁니다.

언급했듯이 이러한 규칙을 정의하는 것은 어렵습니다.

이 장애물을 해결하기 위해 규칙을 생성 할 git-do-not-ignore 라는 간단한 콘솔 응용 프로그램을 만들었습니다. 자세한 지침과 함께 github 에서 프로젝트를 호스팅했습니다.

사용 예

 java -jar git-do-not-ignore.jar "aDir/anotherDir/someOtherDir/aDir/bDir/cDir/a.txt"

산출

 !aDir/ aDir/* !aDir/anotherDir/ aDir/anotherDir/* !aDir/anotherDir/someOtherDir/ aDir/anotherDir/someOtherDir/* !aDir/anotherDir/someOtherDir/aDir/ aDir/anotherDir/someOtherDir/aDir/* !aDir/anotherDir/someOtherDir/aDir/bDir/ aDir/anotherDir/someOtherDir/aDir/bDir/* !aDir/anotherDir/someOtherDir/aDir/bDir/cDir/ aDir/anotherDir/someOtherDir/aDir/bDir/cDir/* !aDir/anotherDir/someOtherDir/aDir/bDir/cDir/a.txt

여기에 간단한 웹 버전도 있습니다 .

감사합니다.


theapache64

하위 폴더에 문제가 있었습니다.

작동하지 않음:

 /custom/* !/custom/config/foo.yml.dist

공장:

 /custom/config/* !/custom/config/foo.yml.dist

Fabian Picone

나는 여기에 주어진 모든 답변을 시도했지만 아무도 나를 위해 일하지 않았습니다. gitignore 문서( here )를 읽은 후 폴더를 먼저 제외하면 하위 폴더의 파일 이름이 인덱싱되지 않는다는 것을 알았습니다. 따라서 나중에 느낌표를 사용하여 파일을 포함하면 인덱스에서 찾을 수 없으므로 git 클라이언트에 포함되지 않습니다.

그것이 해법을 찾는 길이었다. 내 폴더 트리의 모든 하위 폴더에 예외를 추가하여 작동하도록 하는 것부터 시작했는데, 이는 정말 힘든 작업입니다. 그 후 상세한 구성을 아래의 구성으로 압축할 수 있었는데, 이는 설명서와 약간 반대입니다..

.gitignore 작업:

 # Ignore the 'Pro' folder, except for the '3rdparty' subfolder /Pro/* !Pro/3rdparty/ # Ignore the '3rdparty' folder, except for the 'domain' subfolder /Pro/3rdparty/* !Pro/3rdparty/domain/ # Ignore the 'domain' folder, except for the 'modulename' subfolder Pro/3rdparty/domain/* !Pro/3rdparty/domain/modulename/

결과적으로 내 git 클라이언트에서 Pro/3rdparty/domain/modulename/ 폴더 안의 두 파일만 다음 커밋을 위해 준비되고 있다는 것을 알 수 있습니다.

동일한 폴더의 여러 하위 폴더를 허용 목록에 추가해야 하는 경우 다음과 같이 제외 문 아래에 느낌표 줄을 그룹화합니다.

 # Ignore the 'Pro' folder, except for the '3rdparty' subfolder /Pro/* !Pro/3rdparty/ # Ignore the '3rdparty' folder, except for the 'domain' & 'hosting' subfolders /Pro/3rdparty/* !Pro/3rdparty/domain/ !Pro/3rdparty/hosting/ # Ignore the 'domain' folder, except for the 'modulename' subfolder Pro/3rdparty/domain/* !Pro/3rdparty/domain/modulename/ # Ignore the 'hosting' folder, except for the 'modulename' subfolder Pro/3rdparty/hosting/* !Pro/3rdparty/hosting/modulename/

그렇지 않으면 예상대로 작동하지 않습니다.


Tim B.

이것이 내가 한 방법입니다.

 # Ignore everything * # Whitelist anything that's a directory !*/ # Whitelist some files !.gitignore # Whitelist this folder and everything inside of it !wordpress/wp-content/themes/my-theme/** # Ignore this folder inside that folder wordpress/wp-content/themes/my-theme/node_modules # Ignore this file recursively **/.DS_Store

추적되지 않은 디렉토리의 개별 파일을 재귀적으로 보려면 gig status -u 를 사용하십시오. git status 하면 폴더만 표시되므로 폴더 안의 모든 항목이 추적되었다고 생각하도록 속일 수 있습니다.


zok

그것이 나를 위해 일한 것입니다. 저장소에 하나의 Cordova 플러그인만 커밋하고 싶었습니다.

 ... plugins/* !plugins/cordova-plugin-app-customization

Dmitry Sokurenko

나는 bower에서 Jquery와 Angular를 가지고 있습니다. Bower가 설치했습니다.

 /public_html/bower_components/jquery/dist/bunch-of-jquery-files /public_html/bower_components/jquery/src/bunch-of-jquery-source-files /public_html/bower_components/angular/angular-files

최소화된 jquery는 dist 디렉토리 안에 있고 angular는 angular 디렉토리 안에 있습니다. github에 커밋하려면 최소화된 파일만 필요했습니다. .gitignore를 약간 변경하고 이것이 내가 생각해 낸 것입니다 ...

 /public_html/bower_components/jquery/* !public_html/bower_components/jquery/dist /public_html/bower_components/jquery/dist/* !public_html/bower_components/jquery/dist/jquery.min.js /public_html/bower_components/angular/* !public_html/bower_components/angular/angular.min.js

누군가가 이것을 유용하게 사용할 수 있기를 바랍니다.


Mario Legenda

이것이 내가 다른 모든 것을 무시하면서 폴더 구조를 유지하는 방법입니다. 각 디렉토리(또는 .gitkeep)에 README.md 파일이 있어야 합니다.

 /data/* !/data/README.md !/data/input/ /data/input/* !/data/input/README.md !/data/output/ /data/output/* !/data/output/README.md

Miladiouss

몇 개의 파일과 몇 개의 루트 폴더를 제외한 모든 것을 무시해야 하는 경우 간단한 솔루션:

 /* !.gitignore !showMe.txt !my_visible_dir

마술은 /* (위에서 설명한 대로). (루트) 폴더의 모든 것을 무시하지만 재귀적으로는 무시합니다.


d.raev

또한 단일 파일을 부정하는 데 몇 가지 문제가 있었습니다. 커밋할 수 있었지만 내 IDE(IntelliJ)는 항상 추적되는 무시된 파일에 대해 불평했습니다.

 git ls-files -i --exclude-from .gitignore

이 방법으로 제외된 두 개의 파일을 표시했습니다.

 public/ !public/typo3conf/LocalConfiguration.php !public/typo3conf/PackageStates.php

결국 이것은 나를 위해 일했습니다.

 public/* !public/typo3conf/ public/typo3conf/* !public/typo3conf/LocalConfiguration.php !public/typo3conf/PackageStates.php

핵심은 먼저 typo3conf/ 폴더를 부정하는 것이었습니다.

또한 진술의 순서는 중요하지 않은 것 같습니다. 대신, 그 안에 있는 단일 파일을 무효화하기 전에 모든 하위 폴더를 명시적으로 무효화해야 합니다.

!public/typo3conf/ 폴더와 public/typo3conf/* 폴더 내용은 .gitignore에 대한 두 가지 다른 것입니다.

좋은 스레드! 이 문제는 잠시 동안 나를 괴롭혔습니다 ;)


Armin

나는이 일을 얻었다

 # Vendor /vendor/braintree/braintree_php/* !/vendor/braintree/braintree_php/lib

raftaar1191

lib에서 하나의 항아리를 추가하려고했기 때문에 지금까지 아무 것도 작동하지 않았습니다.

이것은 작동하지 않았습니다:

 build/* !build/libs/* !build/libs/ !build/libs/myjarfile.jar

이것은 효과가 있었다:

 build/* !build/libs

Manish Bansal

내가 이것에 대해 가는 가장 간단한 방법은 파일을 강제로 추가하는 것입니다. git 무시 하위 디렉토리 트리 안에 묻혀 있거나 중첩되어 있어도 git에서 설명됩니다.

예를 들어:

x64 폴더는 .gitignore에서 제외됩니다.

 x64/

x64/Release/ 디렉토리에 있는 myFile.py 파일을 포함하려고 합니다. 그런 다음 다음을 수행해야 합니다.

 git add -f x64/Release/myFile.py

패턴과 일치하는 여러 파일 파일에 대해 이 작업을 수행할 수 있습니다.

 git add -f x64/Release/myFile*.py

등등.


KeyC0de

나는 아무도 언급하지 않은 나를 위해 일한 것을 찾은 것 같습니다.

 # Ignore everything * # But not these files... !.gitignore !script.pl !template.latex # etc... # And if you want to include a sub-directory and all sub-directory and files under it, but not all sub-directories !subdir/ !subdir/**/*

기본적으로, 무시되는 하위 디렉토리를 무효화하는 것 같습니다. 두 개의 항목이 있어야 합니다. 하나는 하위 디렉토리 자체에 대한 것이고 하나는 !subdir/ 이고 다른 하나는 그 아래의 모든 파일과 폴더로 확장됩니다 !subdir/**/*


Didier A.

요점

 # Ignore everything * # But not these files... !script.pl !template.latex

그리고 아마도 다음을 포함할 것입니다:

 !.gitignore

참조

https://git-scm.com/docs/gitignore에서 :

패턴을 부정하는 선택적 접두사 " ! 이전 패턴에서 제외된 모든 일치 파일은 다시 포함됩니다. 해당 파일의 상위 디렉토리가 제외된 경우 파일을 다시 포함할 수 없습니다. Git은 성능상의 이유로 제외된 디렉토리를 나열하지 않으므로 포함된 파일의 패턴은 정의된 위치에 관계없이 영향을 미치지 않습니다. ! "로 시작하는 패턴의 경우 첫 번째 " ! " 앞에 백슬래시(" \ ")를 넣습니다(예: " \!important!.txt ").

...

foo/bar 를 제외한 모든 것을 제외하는 예( /* 주의 - 슬래시가 없으면 와일드카드도 foo/bar 내의 모든 것을 제외합니다):

 $ cat .gitignore # exclude everything except directory foo/bar /* !/foo /foo/* !/foo/bar

Will Cain

출처 : http:www.stackoverflow.com/questions/987142/make-gitignore-ignore-everything-except-a-few-files

반응형