私は.gitignoreに追加するフォルダapplication /を持っています。 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/
)。Commit 59856de from Karsten Blees(kblees) Git 1.9/2.0(2014年第1四半期)では、そのケースを明確にしています:
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/
@Chris Johnsenの答えは素晴らしいですが、Gitの新しいバージョン(1.8.2以降)では、もう少し簡単な解決策に利用できる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に戻る)では、あなたのファイルに至るまでの各サブディレクトリに対して**
パターンをexcludeと組み合わせて使うことでうまくいく。例えば:
# 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/**/*
どちらも私にとってはうまくいきませんでした。歩道とエラーがたくさん!
私はこれだけ見つけました 実際に works。
**/node_modules/*
!**/node_modules/keep-dir
それで、多くのプログラマーがノードを使うので。この問題を満たすユースケースは、1つのモジュールnode_modules
を除いてmodule-a
を除外することです。例えば、
!node_modules/
node_modules/*
!node_modules/module-a/
私はここでも似たようなケースを発見しました。デフォルトでは、.gitignore
はアスタリスクを使っているすべてを無視してからパブリックディレクトリを上書きします。
*
!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/*/*
特に古いGitバージョンでは、ほとんどの提案はそれほどうまくいきません。その場合は、他の設定に関係なくコンテンツを含めるディレクトリに別の.gitignoreを配置し、そこで必要なものを許可します。
例えば、/.gitignore
# ignore all .dll files
*.dll
/dependency_files/.gitignore
# include everything
!*
そのため、/ dependency_files(.dllファイルも含む)内のすべてが問題なく含まれています。
ちょうどあなたが望むものを得るためにディレクトリ構造をたどることのちょうど別の例。注:私は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
を設定する代わりに直接または直接.include
によって無視されるディレクトリに含めたい(サブ)ディレクトリを定義する別の.gitignore
ファイルを作成するCLIでこの回避策をよく使用します。
したがって、私はさらに使用します
git add `cat .include`
ステージング中、コミット前.
OPには、これらの行を持つ.include
を使うことをお勧めします。
<parent_folder_path>/application/language/gr/*
注:cat
を使用しても、$ HOME(またはその他の特定のディレクトリ)を指定するための(.include
内の)エイリアスの使用は許可されません。これは、上記のコマンドを使用してhomedir/app1/*
に渡された行git add
がgit add 'homedir/app1/*'
として表示され、各文字のリテラル値が引用符で囲まれているため、エイリアスが防止されるためです(homedir) )機能している( Bashの一重引用符 を参照)。
これは私が私のレポ ここ で使用する.include
ファイルの例です。
/home/abhirup/token.txt
/home/abhirup/.include
/home/abhirup/.vim/*
/home/abhirup/.viminfo
/home/abhirup/.bashrc
/home/abhirup/.vimrc
/home/abhirup/.condarc
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
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
これが結果です。
私はjquery production jsファイルを追跡したいと思っていましたが、これはうまくいきました:
node_modules/*
!node_modules/jquery
node_modules/jquery/*
!node_modules/jquery/dist/*
最も簡単でおそらく最善の方法はファイルを手動で追加することです(一般にこれは.gitignore
-styleルールよりも優先されます)。
git add /path/to/module
-N
intentにフラグを追加して、でフラグを追加するよう提案することもできますが、すぐには追加しないでください。私はまだステージングする準備ができていない新しいファイルに対してこれを頻繁に行います。
これは 回答のコピー で、簡単にQAが重複する可能性があるものについて投稿しました。見やすくするためにここに再投稿しています - gitignoreルールを混同しないほうが簡単です。