에 application/
추가 한 폴더 가 있습니다 .gitignore
. application/
폴더 안에는 폴더가 application/language/gr
있습니다. 이 폴더를 어떻게 포함시킬 수 있습니까?
나는 이것을 시도했다
application/
!application/language/gr/
운없이 ...
에 application/
추가 한 폴더 가 있습니다 .gitignore
. 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
않으므로 "exclude"패턴을 아래에있는 대상에 적용하지 않습니다 dir
.dir/*
은 dir
그 자체 에 대해서는 아무 것도 말하지 않습니다 . 아래의 모든 것을 제외합니다 dir
. 을 사용 dir/*
하면 Git은의 직접 콘텐츠를 처리하여 dir
다른 패턴에 콘텐츠의 일부를 "제외"할 수있는 기회를줍니다 ( !dir/sub/
)./*
이 중요합니다. 디렉토리가 제외되면 Git은 해당 디렉토리의 내용을 절대 보지 않습니다. 이 패턴 dir/
은 이름이 지정된 디렉토리 dir
와 그 아래의 모든 것을 암시 적으로 제외 합니다. 패턴 dir/*
은 dir
그 자체 에 대해서는 아무 것도 말하지 않습니다 . 아래의 모든 것을 제외합니다 dir
. 을 사용 dir/
하면 Git은 아래에있는 항목을 절대로 보지 dir
않으므로 "exclude"패턴을 아래에있는 대상에 적용하지 않습니다 dir
. 을 사용 dir/*
하면 Git은의 직접 콘텐츠를 처리하여 dir
다른 패턴에 콘텐츠의 일부를 "제외"할 수있는 기회를줍니다 ( !dir/sub/
).
git add -f .
git status
최상위 디렉토리가 추가 될 것입니다. 대신 git add
최상위 디렉토리 중 하나 를 수행 한 다음 git status
패턴과 일치하는 파일의 서브 세트를 나열하십시오.
Git 1.9 / 2.0 (2014 년 1 분기 )에 대한 Karsten Blees (kblees)의 Commit 59856de 는 다음과 같이 설명합니다.
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 년 중반?) 을 사용하면 경로에 와일드 카드가 없으면 해당 파일의 상위 디렉토리가 제외 된 경우 파일을 다시 포함 할 수 있습니다 .
Nguyễn Thái Ngọc Duy ( pclouds
) 가이 기능을 추가하려고합니다.
따라서 git 2.9+를 사용하면 실제로 작동 할 수 있었지만 궁극적으로 되돌 렸습니다.
application/
!application/language/gr/
v2.8.1.windows.1
작동하지 않는 것 같습니다. (
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로 되돌아 갈 수 있습니다), **
파일로 이어지는 각 하위 디렉토리에 대해 제외와 결합 된 패턴을 사용하면 작동합니다. 예를 들면 다음과 같습니다.
# 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
**
제로 하위 폴더를 일치시킬 수 있습니다, 그리고 *
일치 language
의 포함을 방지를하고 제외 gr
. @Chris Johnson이 권장하는 부모의 전체 체인은 여전히 필요한 것 같습니다.
/www/**/* !/www/config.xml !/www/res
config.xml 에서 작동하지 않으며 res 디렉토리는 여전히 무시됩니다.
!/www/res/
. 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
가장 간단하고 가장 좋은 방법은 파일을 수동으로 추가하는 것입니다 (일반적으로 .gitignore
스타일 규칙 보다 우선 함 ).
git add /path/to/module
당신도 할 수 있습니다 -N
의도 추가 당신이 제안, 플래그를 할 수 있지만 즉시 추가합니다. 아직 준비 할 준비가되지 않은 새 파일에 대해 종종이 작업을 수행합니다.
이것은 쉽게 품질 보증이 될 수있는 것에 대한 답변 의 사본입니다 . 가시성을 높이기 위해 여기에 다시 게시하고 있습니다. gitignore 규칙을 어지럽히 지 않는 것이 더 쉽다는 것을 알았습니다.
추가 답변을 추가하십시오.
!/.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
결과는 다음과 같습니다.
나는 laravel에서 기본적으로 asterix를 .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/*/*
디렉토리 구조를 내려 가서 원하는 것을 정확하게 얻는 또 다른 예입니다. 참고 : 제외 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
gitignore-의도적으로 추적되지 않은 파일을 무시하도록 지정합니다.
특정 디렉토리 foo / bar 를 제외한 모든 것을 제외하는 예제 ( / * -슬래시없이 와일드 카드는 foo / bar 내의 모든 것을 제외 합니다 )
$ cat .gitignore
# exclude everything except directory foo/bar
/*
!/foo
/foo/*
!/foo/bar
WordPress의 다른 예 :
!/wp-content
wp-content/*
!/wp-content/plugins
wp-content/plugins/*
!wp-content/plugins/my-awesome-plugin
자세한 내용은 여기 : https://git-scm.com/docs/gitignore
CLI 에서이 해결 방법을 자주 사용하는 경우 내 구성 대신 대신 디렉토리에도 불구하고 포함하거나 (하위) 디렉토리를 직접 정의하거나 재귀 적으로 무시 .gitignore
하는 별도의 .include
파일을 만듭니다 .gitignore
.
따라서 나는 추가적으로
git add `cat .include`
준비하기 전에 커밋하기 전에
OP .include
에는 다음과 같은 줄을 사용하는 것이 좋습니다 .
<parent_folder_path>/application/language/gr/*
참고 :를 사용하면 $ HOME (또는 기타 특정 디렉토리)을 지정하기 위해 cat
별명을 사용할 수 없습니다 .include
. 위의 명령 homedir/app1/*
을 git add
사용하여 전달 될 때 행 이로 나타나고 git add 'homedir/app1/*'
작은 따옴표 ( '')로 문자를 묶으면 따옴표 안에 각 문자의 리터럴 값이 유지되므로 별칭 (예 : homedir )이 작동하지 않습니다 ( Bash Single 참조). 인용 부호 ).
여기 .include
내 저장소에 사용 하는 파일 의 예가 있습니다 .
/home/abhirup/token.txt
/home/abhirup/.include
/home/abhirup/.vim/*
/home/abhirup/.viminfo
/home/abhirup/.bashrc
/home/abhirup/.vimrc
/home/abhirup/.condarc
JetBrains IntelliJ IDEA .gitignore 구성 : 다음을 .idea
제외한 wholde 폴더를 제외 해야 합니다 .idea/runConfigurations
.
.idea
!.idea/
.idea/*
!.idea/runConfigurations/
참조 : https://github.com/daggerok/gitignore-idea-runConfigurations
.gitignore
패턴 형식"문서가 더 명확 해지기를 바랍니다 (2013 년 12 월). 아래 내 답변