programing

.gitignore가 일부 파일을 제외한 모든 파일을 무시하도록 합니다.

powerit 2023. 4. 19. 00:33
반응형

.gitignore가 일부 파일을 제외한 모든 파일을 무시하도록 합니다.

는 그것을 한다..gitignore파일은 Git의 버전 제어에서 지정된 파일을 숨깁니다.

알 수 있을까요?.gitignore내가 Git으로 추적하는 파일만 빼고 전부 무시하라고?예를 들어 다음과 같습니다.

# Ignore everything:
*

# Do not ignore these files:
script.pl
template.latex

의 프리픽스 「」!패턴을 부정합니다.이전 패턴에 의해 제외된 모든 일치 파일이 다시 포함됩니다.부정 패턴이 일치하면, 우선 순위가 낮은 패턴의 송신원이 덮어씁니다.

# 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/*

하고, 디렉토리의 는, 의 각 할 수 를 들어, 「」는 「1」입니다..gitignorepippo(「」외)pippo/pluto/paperino.xml

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

위에만 기재되어 있는 경우는, 다음의 점에 주의해 주세요.

pippo/*
!pippo/pluto/paperino.xml

이기 때문에 하지 않습니다plutoGit에는 Git에는 존재하지 않습니다.paperino.xml을 사용법

하려고 합니다./** ★★★★★★★★★★★★★★★★★」*/의 경우

「」를 사용합니다.*이치노그 이후로는 디렉토리를 조사하지 않습니다.사람들이 추천하는 것은!*/ 목록을 다시시킬 수는 , 는 최상위 하는 것이 /*

# Blocklist files/folders in same directory as the .gitignore file
/*

# Includelist some files
!.gitignore
!README.md

# Ignore all files named .DS_Store or ending with .log
**/.DS_Store
**.log

# Includelist 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

좀 더 구체적으로:

: : 있는 을 무시하다webroot/cache 계속 - -webroot/cache/.htaccess

가 붙어있는 점에 해 주세요.cache★★★★

실패하다

webroot/cache*
!webroot/cache/.htaccess

작동하다

webroot/cache/*
!webroot/cache/.htaccess
# ignore these
*
# except foo
!foo

툴리파이 하자!

@Joakim이 말했듯이 파일을 무시하려면 다음과 같은 것을 사용할 수 있습니다.

# Ignore everything
*

# But not these files...
!.gitignore
!someFile.txt

그러나 파일이 중첩된 디렉토리에 있는 경우 이러한 규칙을 작성하기가 조금 어렵습니다.

들어 모든 ""가 ""는 " " " "는 " "를 의미합니다.a.txtaDir/anotherDir/someOtherDir/aDir/bDir/cDir★★★★★★★★★★★★★★★★★★★★★★★..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

이것은 손으로 쓰기가 꽤 어렵다.

이 장애를 해결하기 위해 git-do-not-ignore라는 이름의 웹 앱을 만들었습니다.

도구.

데모

입력 예

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

디렉토리내의 일부의 파일을 무시하려면 , 다음의 순서를 올바르게 실시할 필요가 있습니다.

예를 들어 index.php 및 config 폴더를 제외한 "application" 폴더의 모든 항목을 무시하십시오.

네가 원하는 것을 먼저 부정해야 한다.

실패하다

application/*

!application/config/*

!application/index.php

작동하다

!application/config/*

!application/index.php

application/*

OP와 유사한 문제가 있었지만 상위 10개 답변실제로 효과가 있는 답변은 없었습니다.
과 같은 것을 .

잘못된 구문:

*
!bin/script.sh

올바른 구문:

*
!bin
!bin/script.sh

gitignore man 페이지에서 설명:

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

, 위의 ' 구문은 ' 구문'이 아니라 '잘못된 구문'이라는 bin/script.sh할 수 bin/그게 다예요.

확장 예:

$ 트리.

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

$ cat . 무시

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

$git 상태 --추적되지 않은 파일 --개요

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)

하시면 됩니다.git config status.showUntrackedFiles no추적되지 않은 파일은 모두 숨겨집니다. 것은, 을 참조하십시오.man git-config세한것 、 을을해해요요 。

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

/data/*
!/data/README.md

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

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

.gitignore에서 폴더를 제외하려면 다음 작업을 수행합니다.

!app/

app/*
!app/bower_components/

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

"/"/"에 있는 모든 파일됩니다.bower_components을 제외하고/highcharts.

이와 관련하여 비슷한 질문들이 많이 있기 때문에 제가 전에 쓴 글을 올리도록 하겠습니다.

이 작업을 기계에서 수행할 수 있는 유일한 방법은 다음과 같습니다.

# 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/**/*

나도 그 중 어느 것도 통하지 않았어.많은 흔적과 오류!

저는 이렇게 했습니다.

# 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안에 모든 할 수 .

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

동작하지 않음:

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

동작:

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

위와 같이 모든 답변을 시도했지만, 어느 것도 효과가 없었습니다.gitignore 문서를 읽고 (여기) 폴더를 먼저 제외하면 하위 폴더의 파일 이름이 인덱싱되지 않는다는 것을 알게 되었습니다.따라서 나중에 느낌표를 사용하여 파일을 포함하면 인덱스에서 찾을 수 없으므로 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/thirdparty/domain/modulename/폴더 내의 2개의 파일만 다음 커밋을 위해 스테이징되고 있는 것을 알 수 있었습니다.그것이 바로 제가 찾고 있던 것입니다.

또한 동일한 폴더의 여러 하위 폴더를 화이트리스트로 만들어야 하는 경우 exclude 문 아래에 다음과 같이 느낌표 행을 그룹화합니다.

# 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/

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

복잡한 답변이 많네요다음은 상기와는 달리 매우 간단한 것으로, 많은 시나리오에서 잘 동작합니다.

# ignore all files that have an extension
**/*.*

# except for these extensions
!**/*.extension1
!**/*.extension2

확장자가 없는 파일은 무시되지 않지만 이름이 같거나 비슷한 파일이 여러 개 있는 경우 해당 파일에 대해 제외를 추가할 수 있습니다.

**/EXTENSIONLESSFILETOIGNORE

된 폴더 .!★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

되었습니다.* my .이렇게 생겼어. .gitignore.

/folder/
!/folder/subfolder

, " " " 를 하고 있습니다.*

/folder/*
!/folder/subfolder

그것이 나에게 효과가 있는 것입니다.나는 코르도바 플러그인을 하나만 repo에 커밋하고 싶었습니다.

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

바워에서 제커리와 앵글을 데려왔어요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디렉토리로 이동합니다.기투브.조금 ...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

누군가 이걸 유용하게 찾길 바라.

가장 간단한 방법은 파일을 강제로 추가하는 것입니다.git 무시 서브디렉토리 트리 내에 내장 또는 네스트되어 있어도 git에 반영됩니다.

예를 들어 다음과 같습니다.

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

x64/

이 도 같이 요.myFile.py치치에 x64/Release/디렉토리로 이동합니다.하다

git add -f x64/Release/myFile.py

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

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

기타 등등.

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

/*
!.gitignore
!showMe.txt
!my_visible_dir

은 법법에 /*(위에서 설명한 바와 같이) (root) 폴더의 모든 것을 무시하지만 재귀적으로 무시하지는 않습니다.

난 이걸 할 거야

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

lib에서 한 병을 추가하려다 보니 지금까지 아무 것도 통하지 않았다.

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

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

이것은 효과가 있었다:

build/*
!build/libs

단일 파일을 부정하는 데에도 문제가 있었습니다.커밋은 할 수 있었지만 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/ 번째. first first first first

또한, 진술의 순서는 문제가 되지 않는 것 같습니다.대신 모든 하위 폴더의 단일 파일을 비활성화하려면 먼저 해당 하위 폴더를 명시적으로 비활성화해야 합니다.

★★!public/typo3conf/ 폴더 내용 '''''''''public/typo3conf/* 다른 타임아웃어

멋진 실!이 문제로 잠시 신경이 쓰였습니다.

아무도 언급하지 않은 나에게 효과가 있는 무언가를 찾은 것 같다.

# 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/**/*

하기 는 서브디렉토리 자체의 엔트리가 합니다.의 엔트리가 필요합니다.하나는 서브디렉토리 자체에 대해2개의 엔트리가 필요합니다.!subdir/ 그 모든 되는 또 다른 입니다.!subdir/**/*

2005년한 지 16년(2005년) 만에 git 디렉토리 계층 깊숙이 위치할 때 하나의 파일을 제외하는 간단하고 명확한 방법은 없습니다.그렇지 않으면 무시해야 합니다.그 대신에, 우리는 구조를 반복해서 파헤치고 올바른 순서로 디렉토리를 제외 및 포함하는 것과 같은 엉뚱한 것에 의지할 필요가 있다.1년에 4번 정도는 기억하기 힘든 일을 해야 해

한 유일한은 '이렇게'를 입니다.git add --forceGit repo를 혼자서 작업하지 않으면 언젠가는 실패하게 되는 것.

복사 붙여넣기를 쉽게 하기 위해 작은 bash 함수를 작성했습니다.먼저 하나의 라이너에 대해 설명하겠습니다.

f=0; y='';for x in $(echo "uploads/rubbish/stuff/KEEP_ME/a.py" | tr '\/' '\n'); do y="$y/$x"; if [ $(($f)) -eq 0 ]; then y="$x"; f=1; fi; echo -e '!'"$y/\n$y/*"; done | sed '$d' |sed -z 's/..$//'; echo;

# output:
!uploads/
uploads/*
!uploads/rubbish/
uploads/rubbish/*
!uploads/rubbish/stuff/
uploads/rubbish/stuff/*
!uploads/rubbish/stuff/KEEP_ME/
uploads/rubbish/stuff/KEEP_ME/*
!uploads/rubbish/stuff/KEEP_ME/a.py

묘사

  • 게 있어요.if하기 위한 a first item./.
  • tr '\/' '\n' - 번역:/로로 합니다.\n 내하기 위해) POSIX 경로 내(POSIX 경로 내( )
  • y="$y/$x"- 이전 디렉토리 뒤에 다음 하위 디렉토리(목록)를 추가합니다.
  • echo -e '!'"$y/\n$y/*"-
    항목의 두 첫 번째 줄에는 「아까부터」가 붙어 있습니다.! 프리픽스 및 두 번째 프리픽스/* 포스트픽스
  • sed '$d' - 마지막 줄 삭제 - 마지막 줄 삭제
  • sed -z 's/..$//' 두 합니다. - 마지막 두 글자를 지웁니다./* 줄부터

그런 다음 함수를 만듭니다.

function gitkeep () { f=0; y='';for x in $(echo "$1" | tr '\/' '\n'); do y="$y/$x"; if [[ f -eq 0 ]]; then y="$x"; f=1; fi; echo -e '!'"$y/\n$y/*"; done | sed '$d' |sed -z 's/..$//'; echo; }

# gitkeep "uploads/rubbish/stuff/KEEP_ME/a"

!uploads/
uploads/*
!uploads/rubbish/
uploads/rubbish/*
!uploads/rubbish/stuff/
uploads/rubbish/stuff/*
!uploads/rubbish/stuff/KEEP_ME/
uploads/rubbish/stuff/KEEP_ME/*
!uploads/rubbish/stuff/KEEP_ME/a

여기서 나는 산술문을 간략화했다.if [[ f -eq 0 ]];.

맛있게 드세요!

기스트

# 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

앞서 말한 부분들은 잘 작동하지만 조금 혼란스럽습니다.나는 실패와 시도를 통해 올바른 길을 찾았다.내가 그것을 운용하는 방법은 다음과 같다.

  1. 라는 폴더가 있습니다.example_PostProcessingManager
  2. 는 이 다 요.example_PostProcessingManager/src/ 내용
  3. , ,를 하고,example_PostProcessingManager/bin/data/ 내용

말해서, 저는 이 .data ★★★★★★★★★★★★★★★★★」src 및 합니다.example_PostProcessingManager 표시

는, 「 」를 해 주세요..gitignore음음음같 뭇매하다

# Exclude everything inside the root folder as follows
example_PostProcessingManager/*

# Include only src folder
!example_PostProcessingManager/src

# Include also bin folder because the data folder is inside this folder. 
!example_PostProcessingManager/bin

# Exclude everything inside the bin folder. I know we excluded everything above already.
# It doesn't make sense but this is the way...
example_PostProcessingManager/bin/*

# Now include everything inside the data folder.
!example_PostProcessingManager/bin/data

추신: 루트 폴더에서 시작하여 대상 폴더에 단계적으로 액세스해야 합니다. '하다'만요.src와 폴더 내의 을 무시합니다.data더입니니다다

실패 사례

example_PostProcessingManager/*
!example_PostProcessingManager/src
!example_PostProcessingManager/bin/data

언급URL : https://stackoverflow.com/questions/987142/make-gitignore-ignore-everything-except-a-few-files

반응형