にapplication/
追加するフォルダがあります.gitignore
。application/
フォルダ内は フォルダですapplication/language/gr
。このフォルダを含めるにはどうすればよいですか?
私はこれを試しました
application/
!application/language/gr/
運が悪い...
にapplication/
追加するフォルダがあります.gitignore
。application/
フォルダ内は フォルダですapplication/language/gr
。このフォルダを含めるにはどうすればよいですか?
私はこれを試しました
application/
!application/language/gr/
運が悪い...
回答:
を除外するapplication/
と、その下にあるすべてのものは常に除外されます(後で否定的な除外パターン(「unignore」)がの下にあるものと一致する場合でも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/
)。/*
が重要です。ディレクトリが除外されている場合、Gitはそのディレクトリの内容を確認しません。このパターンでdir/
は、名前の付いたディレクトリとdir
その下の(暗黙的に)すべてが除外されます。パターンdir/*
はdir
それ自体については何も言いません。下にあるものすべてを除外するだけdir
です。を使用するとdir/
、Gitはの下dir
にあるものを決して見ないため、「除外しない」パターンをの下にあるものに適用することはありませんdir
。を使用するとdir/*
、Gitはの直接のコンテンツを処理し、dir
他のパターンにコンテンツの一部を「除外しない」機会を提供します(!dir/sub/
)。
git add -f .
git status
。これは、最上位ディレクトリが追加されることを通知するだけです。代わりgit add
に、トップレベルのディレクトリを実行するとgit status
、パターンが一致したファイルのサブセットが(うまくいけば)リストされます。
Karsten Blees(kblees)のGit 1.9 / 2.0(2014年第1四半期)の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ễnTháiNgọcDuy(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 / excludeコンボよりも短く、読みやすくなっています。
これについては似たような質問がたくさんあるので、前に書いたことを投稿します。
これを自分のマシンで動作させる唯一の方法は、次のようにすることでした。
# 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
-styleルールよりも優先されます)。
git add /path/to/module
フラグ-N
を追加する意図があり、すぐには追加しないことを提案することもできます。まだステージングする準備ができていない新しいファイルに対して、私はよくこれを行います。
これは、簡単に重複するQAになる可能性のあるものに投稿された回答のコピーです。可視性を高めるために、ここに再投稿しています。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
ここに結果があります:
私はここで同様のケースを見つけました。デフォルトで.gitignore
は、laravelでは、アスタリスクを使用してすべてを無視してから、パブリックディレクトリを上書きします。
*
!public
!.gitignore
これは、OPシナリオに遭遇した場合には不十分です。
の特定のサブフォルダをコミットする場合はpublic
、たとえばpublic/products
ディレクトリに、サブフォルダの深さが1つ深いファイルを含めたいと考えていpublic/products/a/b.jpg
このように追加しても、正しく検出されません!/public/products
。!public/products/*
など..
解決策は、すべてのパスレベルを上書きするために、このようなすべてのパスレベルのエントリを必ず追加することです。
*
!.gitignore
!public/
!public/*/
!public/products/
!public/products/*
!public/products/*/
!public/products/*/
!public/products/*/*
ディレクトリ構造をたどって、必要なものを正確に取得するもう1つの例です。注:除外しませんでした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
次の行があるa を使用することをお勧めします。
<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
私はjqueryのプロダクションjsファイルを追跡したかったのですが、これはうまくいきました:
node_modules/*
!node_modules/jquery
node_modules/jquery/*
!node_modules/jquery/dist/*
私のJetBrains IntelliJ IDEA .gitignore構成。ここで、wholde .idea
フォルダーを除外する必要があります.idea/runConfigurations
。
.idea
!.idea/
.idea/*
!.idea/runConfigurations/
参照:https : //github.com/daggerok/gitignore-idea-runConfigurations
.gitignore
パターンフォーマット」のドキュメントがより明確になりました(2013年12月)。以下の私の回答を