.gitignore 제외 폴더이지만 특정 하위 폴더 포함
.gitignore에 추가하는 application / 폴더가 있습니다. application / 폴더 안에는 application / language / gr 폴더가 있습니다. 이 폴더를 어떻게 포함시킬 수 있습니까? 나는 이것을 시도했다
application/
!application/language/gr/
운없이 ...
제외 application/
하면 그 아래에있는 모든 항목이 항상 제외됩니다 (나중에 일부 제외 패턴 ( "무시")이 아래의 항목과 일치하더라도 application/
).
원하는 작업을 수행하려면 "무시"하려는 모든 상위 디렉터리를 "무시"해야합니다. 일반적으로이 상황에 대한 규칙을 쌍으로 작성하게됩니다. 특정 하위 디렉토리가 아닌 디렉토리의 모든 것을 무시합니다.
# you can skip this first one if it is not already excluded by prior patterns
!application/
application/*
!application/language/
application/language/*
!application/language/gr/
참고
후행 /*
은 중요합니다.
- 이 패턴
dir/
은 이름이 지정된 디렉토리dir
와 그 아래의 모든 것을 (암시 적으로) 제외 합니다.
를 사용dir/
하면 Git은 아래에있는 어떤 것도 보지 않으므로. 아래에있는 어떤 항목dir
에도 "제외 해제"패턴을 적용하지 않습니다dir
. - 패턴
dir/*
은dir
그 자체 에 대해 아무것도 말하지 않습니다 . 아래의 모든 것을 제외합니다dir
. 을 사용dir/*
하면 Git은의 직접 콘텐츠를 처리하여dir
다른 패턴에 콘텐츠 일부 (!dir/sub/
)를 "제외"할 수있는 기회를 제공 합니다.
59856de 커밋 으로부터 스텐 Blees (kblees) 힘내 1.9 / 2.0 (Q1 2014) 경우 관계를 설명한다 :
gitignore.txt
: 제외 된 디렉토리의 재귀 적 특성을 명확히합니다.
!
패턴을 부정 하는 선택적 접두사 " "; 이전 패턴에서 제외 된 일치 파일은 다시 포함됩니다.해당 파일의 상위 디렉토리가 제외 된 경우 파일을 다시 포함 할 수 없습니다. (
*
)
(*
: git 2.8+에서 특정 조건이 충족되지 않는 한, 아래 참조)
Git은 성능상의 이유로 제외 된 디렉토리를 나열하지 않으므로 포함 된 파일의 패턴은 정의 된 위치에 관계없이 영향을주지 않습니다.리터럴 " "로 시작하는 패턴
\
의 경우 첫 번째 "!
" 앞에 백 슬래시 ( " ")를 추가!
합니다 (예 : "\!important!.txt
").특정 디렉토리를 제외한 모든 항목을 제외하는 예
foo/bar
(/*
슬래시가없는-기호는 와일드 카드도 안에있는 모든 항목을 제외 함foo/bar
) :
--------------------------------------------------------------
$ cat .gitignore
# exclude everything except directory foo/bar
/*
!/foo
/foo/*
!/foo/bar
--------------------------------------------------------------
귀하의 경우 :
application/*
!application/**/
application/language/*
!application/language/**/
!application/language/gr/**
지정된 폴더 내에서 파일을 화이트 리스트에 추가하려면 먼저 폴더 를 화이트리스트에 추가해야 합니다.
2016 년 2 월 / 3 월 업데이트 :
git 2.9.x / 2.10 (2016 년 중반?)을 사용하면 re-included 경로에 와일드 카드가없는 경우 해당 파일의 상위 디렉토리가 제외 되면 파일을 다시 포함 할 수 있습니다 .
Nguyễn Thái Ngọc Duy ( pclouds
) 가이 기능을 추가하려고합니다.
- git v2.7.0에 대한 커밋 506d8f1 , 커밋 76b620d git v2.8.0-rc0
- commit 5e57f9c git v2.8.0-rc0, ... reverted (!) in commit 5cee3493 git 2.8.0.
따라서 git 2.9 이상에서는 실제로 작동 할 수 있었지만 궁극적으로 되돌 렸습니다.
application/
!application/language/gr/
@Chris Johnsen의 대답은 훌륭하지만 최신 버전의 Git (1.8.2 이상)에서는 좀 더 속기 솔루션에 활용할 수있는 이중 별표 패턴이 있습니다.
# assuming the root folder you want to ignore is 'application'
application/**/*
# the subfolder(s) you want to track:
!application/language/gr/
이렇게하면 추적하려는 하위 폴더의 상위 디렉토리를 "무시"할 필요가 없습니다.
Git 2.17.0 (이 버전 이전의시기는 확실하지 않습니다. 1.8.2로 돌아갈 수 있음)에서는 **
파일로 이어지는 각 하위 디렉토리에 대해 excludes와 결합 된 패턴을 사용하여 작동합니다. 예를 들면 :
# assuming the root folder you want to ignore is 'application'
application/**
# Explicitly track certain content nested in the 'application' folder:
!application/language/
!application/language/gr/
!application/language/gr/** # Example adding all files & folder in the 'gr' folder
!application/language/gr/SomeFile.txt # Example adding specific file in the 'gr' folder
이에 대해 비슷한 질문이 많이 있으므로 이전에 작성한 내용을 게시하겠습니다.
내 컴퓨터에서이 작업을 수행하는 유일한 방법은 다음과 같이하는 것입니다.
# 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/
!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/**/*
나에게도 효과가 없었습니다. 많은 시행 착오!
나는 이것이 실제로 작동 한다는 것을 알았습니다 .
**/node_modules/*
!**/node_modules/keep-dir
그래서 많은 프로그래머가 node. 이 질문을 충족하는 사용 사례 는 예를 들어 node_modules
하나의 모듈 을 제외 하고 제외하는 것입니다 module-a
.
!node_modules/
node_modules/*
!node_modules/module-a/
특히 이전 Git 버전의 경우 대부분의 제안이 제대로 작동하지 않습니다. 이 경우 다른 설정에 관계없이 콘텐츠가 포함되기를 원하는 디렉토리에 별도의 .gitignore를 넣고 필요한 것을 허용합니다.
예 : /.gitignore
# ignore all .dll files
*.dll
/dependency_files/.gitignore
# include everything
!*
따라서 /dependency_files(.dll 파일도 포함)의 모든 것이 잘 포함됩니다.
가장 간단하고 아마도 가장 좋은 방법은 파일을 수동으로 추가하는 것입니다 (일반적으로 이것은 .gitignore
스타일 규칙 보다 우선합니다 ).
git add /path/to/module
플래그 를 추가하고 즉시 추가 할 것을 제안 -N
하기 위해 플래그 를 추가 할 수도 있습니다 . 아직 준비되지 않은 새 파일에 대해이 작업을 자주 수행합니다.
이것은 쉽게 중복 QA가 될 수있는 항목에 게시 된 답변 의 사본입니다 . 가시성을 높이기 위해 여기에 다시 게시하고 있습니다. gitignore 규칙을 엉망으로 만들지 않는 것이 더 쉽습니다.
원하는 것을 정확히 얻기 위해 디렉토리 구조를 걷는 또 다른 예입니다. 참고 : 나는 제외하지 Library/
않았지만Library/**/*
# .gitignore file
Library/**/*
!Library/Application Support/
!Library/Application Support/Sublime Text 3/
!Library/Application Support/Sublime Text 3/Packages/
!Library/Application Support/Sublime Text 3/Packages/User/
!Library/Application Support/Sublime Text 3/Packages/User/*macro
!Library/Application Support/Sublime Text 3/Packages/User/*snippet
!Library/Application Support/Sublime Text 3/Packages/User/*settings
!Library/Application Support/Sublime Text 3/Packages/User/*keymap
!Library/Application Support/Sublime Text 3/Packages/User/*theme
!Library/Application Support/Sublime Text 3/Packages/User/**/
!Library/Application Support/Sublime Text 3/Packages/User/**/*macro
!Library/Application Support/Sublime Text 3/Packages/User/**/*snippet
!Library/Application Support/Sublime Text 3/Packages/User/**/*settings
!Library/Application Support/Sublime Text 3/Packages/User/**/*keymap
!Library/Application Support/Sublime Text 3/Packages/User/**/*theme
> git add Library
> git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: Library/Application Support/Sublime Text 3/Packages/User/Default (OSX).sublime-keymap
new file: Library/Application Support/Sublime Text 3/Packages/User/ElixirSublime.sublime-settings
new file: Library/Application Support/Sublime Text 3/Packages/User/Package Control.sublime-settings
new file: Library/Application Support/Sublime Text 3/Packages/User/Preferences.sublime-settings
new file: Library/Application Support/Sublime Text 3/Packages/User/RESTer.sublime-settings
new file: Library/Application Support/Sublime Text 3/Packages/User/SublimeLinter/Monokai (SL).tmTheme
new file: Library/Application Support/Sublime Text 3/Packages/User/TextPastryHistory.sublime-settings
new file: Library/Application Support/Sublime Text 3/Packages/User/ZenTabs.sublime-settings
new file: Library/Application Support/Sublime Text 3/Packages/User/adrian-comment.sublime-macro
new file: Library/Application Support/Sublime Text 3/Packages/User/json-pretty-generate.sublime-snippet
new file: Library/Application Support/Sublime Text 3/Packages/User/raise-exception.sublime-snippet
new file: Library/Application Support/Sublime Text 3/Packages/User/trailing_spaces.sublime-settings
기본적으로 laravel에서 .gitignore
별표를 사용하는 모든 것을 무시하고 공용 디렉토리를 재정의 하는 비슷한 경우를 발견했습니다 .
*
!public
!.gitignore
OP 시나리오가 발생하면 충분하지 않습니다.
당신의 특정 하위 폴더를 저지하려는 경우 public
, 당신의 예를 들어 말할 public/products
디렉토리에 포함시킬 하나 개의 하위 폴더에 깊은 예를있는 파일을 포함하려면 public/products/a/b.jpg
이 같은 특별히 추가 할 경우에도 제대로 감지 못해 !/public/products
, !public/products/*
등 ..
해결책은 이와 같은 모든 경로 수준에 대한 항목을 추가하여 모두 재정의하는 것입니다.
*
!.gitignore
!public/
!public/*/
!public/products/
!public/products/*
!public/products/*/
!public/products/*/
!public/products/*/*
WordPress에서는 다음과 같은 도움이되었습니다.
wp-admin/
wp-includes/
/wp-content/*
!wp-content/plugins/
/wp-content/plugins/*
!/wp-content/plugins/plugin-name/
!/wp-content/plugins/plugin-name/*.*
!/wp-content/plugins/plugin-name/**
추가 답변 추가 :
!/.vs/ <== include this folder to source control, folder only, nothing else
/.vs/* <== but ignore all files and sub-folder inside this folder
!/.vs/ProjectSettings.json <== but include this file to source control
!/.vs/config/ <== then include this folder to source control, folder only, nothing else
!/.vs/config/* <== then include all files inside the folder
결과는 다음과 같습니다.
저는 CLI에서이 해결 방법을 자주 사용합니다. 여기서는를 구성하는 대신 디렉터리에 직접 또는 재귀 적으로 무시해도 포함 할 (하위) 디렉터리를 정의 .gitignore
하는 별도의 .include
파일을 만듭니다 .gitignore
.
따라서 나는 추가로
git add `cat .include`
커밋하기 전에 스테이징 중.
OP에 .include
다음 줄이 있는 a 를 사용하는 것이 좋습니다 .
<parent_folder_path>/application/language/gr/*
NOTE: Using cat
does not allow usage of aliases (within .include
) for specifying $HOME (or any other specific directory). This is because the line homedir/app1/*
when passed to git add
using the above command appears as git add 'homedir/app1/*'
, and enclosing characters in single quotes ('') preserves the literal value of each character within the quotes, thus preventing aliases (such as homedir) from functioning (see Bash Single Quotes).
Here is an example of a .include
file I use in my repo here.
/home/abhirup/token.txt
/home/abhirup/.include
/home/abhirup/.vim/*
/home/abhirup/.viminfo
/home/abhirup/.bashrc
/home/abhirup/.vimrc
/home/abhirup/.condarc
gitignore - Specifies intentionally untracked files to ignore.
Example to exclude everything except a specific directory foo/bar (note the /* - without the slash, the wildcard would also exclude everything within foo/bar):
$ cat .gitignore
# exclude everything except directory foo/bar
/*
!/foo
/foo/*
!/foo/bar
Another example for WordPress:
!/wp-content
wp-content/*
!/wp-content/plugins
wp-content/plugins/*
!wp-content/plugins/my-awesome-plugin
More informations in here: https://git-scm.com/docs/gitignore
I wanted to track jquery production js files and this worked:
node_modules/*
!node_modules/jquery
node_modules/jquery/*
!node_modules/jquery/dist/*
참고URL : https://stackoverflow.com/questions/5533050/gitignore-exclude-folder-but-include-specific-subfolder
'Nice programing' 카테고리의 다른 글
What is the difference between a framework and a library? [closed] (0) | 2020.09.28 |
---|---|
2D 어레이에서 피크 감지 (0) | 2020.09.28 |
.NET에서 C # 개체를 JSON 문자열로 어떻게 바꾸나요? (0) | 2020.09.28 |
함수에서 여러 값을 반환하려면 어떻게합니까? (0) | 2020.09.27 |
리플렉션을 사용하여 제네릭 메서드를 호출하는 방법은 무엇입니까? (0) | 2020.09.27 |