질문자 :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/*
slatunjeOP와 비슷한 문제가 있었지만 상위 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)
frntngit 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
raftaar1191lib에서 하나의 항아리를 추가하려고했기 때문에 지금까지 아무 것도 작동하지 않았습니다.
이것은 작동하지 않았습니다:
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