私は、.gitignoreファイルがGitのバージョン管理から特定のファイルを隠すことを理解しています。実行時に多数の追加ファイル(.auth、.dvi、.pdf、ログなど)を生成するプロジェクト(LaTeX)がありますが、それらを追跡したくありません。
フォルダを無視することができるので、これらのファイルをすべてプロジェクト内の別々のサブフォルダに入れるようにすることができます。
しかし、出力ファイルをプロジェクトツリーのルートに置き、.gitignoreを使用して、Gitで追跡しているファイル以外のすべてを無視することができる方法はありますか?何かのようなもの
# Ignore everything
*
# But not these files...
script.pl
template.latex
# etc...
パターンを無効にするオプションの接頭辞
!
。前のパターンで除外された一致ファイルはすべて再び含まれます。否定パターンが一致すると、優先順位の低いパターンのソースが上書きされます。
# 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つのファイルを除いてディレクトリの内容全体を無視したい場合は、ファイルパス内の各ディレクトリに対して一対の規則を記述できます。例えばpippo/pluto/paperino.xml以外のpippoフォルダーを無視するための.gitignore
pippo/*
!pippo/pluto
pippo/pluto/*
!pippo/pluto/paperino.xml
ほとんどの場合、/*
または*
の代わりに*/
を使用します
*
の使用は有効ですが、再帰的に機能します。それ以降はディレクトリを調べません。 !*/
を使用してディレクトリを再度ホワイトリストに登録することをお勧めしますが、実際には/*
を使用して最上位レベルのフォルダをブラックリストに登録することをお勧めします。
# Blacklist files/folders in same directory as the .gitignore file
/*
# Whitelist some files
!.gitignore
!README.md
# Ignore all files named .DS_Store or ending with .log
**/.DS_Store
**.log
# Whitelist 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/
を除くすべてのファイルと、それらの最後の2つのフォルダーに含まれるすべてのファイルを無視します。 (そして.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
ディレクトリ内のいくつかのファイルを無視するには、 正しい順序でこれを実行する必要があります :
たとえば、index.phpと "config"以外の "application"フォルダ内のすべてを無視します 次の順序に注意してください 。
あなたはあなたが最初に欲しいと思うことを否定しなければなりません。
_失敗_
application/*
!application/config/*
!application/index.php
_作品_
!application/config/*
!application/index.php
application/*
あなたはgit config status.showUntrackedFiles no
を使うことができ、追跡されていないすべてのファイルはあなたから隠されます。詳しくはman git-config
をご覧ください。
.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/**/*
どちらも私にとってはうまくいきませんでした。歩道とエラーがたくさん!
サブフォルダーに問題がありました。
動作しません:
/custom/*
!/custom/config/foo.yml.dist
作品:
/custom/config/*
!/custom/config/foo.yml.dist
それが私にとってうまくいったことです、私は1つのCordovaプラグインだけをリポジトリにコミットしたいと思いました:
...
plugins/*
!plugins/cordova-plugin-app-customization
私はJqueryとAngularをbowerから持っています。 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
ディレクトリの中にあり、angleはangular
ディレクトリの中にあります。最小化されたファイルをgithubにコミットするためだけに必要でした。 .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
誰かがこれが役に立つことを願っています。
私は上で与えられたようにすべての答えを試みました、しかし、どれも私のために働きませんでした。 gitignoreのドキュメントを読んだ後( here )、最初にフォルダーを除外した場合、サブフォルダー内のファイル名がインデックスされていないことがわかりました。そのため、後で感嘆符を使用してファイルをインクルードしても、インデックスには含まれないため、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/3rdparty/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 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
を使用すると、フォルダのみが表示されます
私はパーティーに遅刻することを知っている、しかしここに私の答えがある。
@Joakimが言ったように、ファイルを無視するには、以下のようなものを使うことができます。
# Ignore everything
*
# But not these files...
!.gitignore
!someFile.txt
しかし、ファイルがネストされたディレクトリにある場合、手動でルールを書くのは少し難しいです。
たとえば、git
プロジェクト内のすべてのファイルをスキップしたいが、a.txt
にあるaDir/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
上記の.gitignore
ファイルは、!aDir/anotherDir/someOtherDir/aDir/bDir/cDir/a.txt
以外のすべてのディレクトリとファイルをスキップします。
ご存じのとおり、これらのルールを定義するのは難しいです。
このハードルを解決するために、私は git-do-not-ignore という名前の簡単なコンソールアプリケーションを作成しました。私はプロジェクトを github で詳細な説明付きでホストしました。
Java -jar git-do-not-ignore.jar "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
ありがとうございました。
私はまた単一ファイルの否定に関していくつかの問題を抱えていました。私はそれらをコミットすることができました、しかし私の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/
が最初でした。
また、ステートメントの順序は重要ではありません。代わりに、単一のファイルを無効にする前に、すべてのサブフォルダを明示的に無効にする必要があります。
フォルダ!public/typo3conf/
とフォルダの内容public/typo3conf/*
は、.gitignoreでは2つの異なる点があります。
素晴らしいスレッド!この問題はしばらく私を悩ませました。
少数のファイルと少数の root フォルダを除くすべてを無視する必要がある場合の簡単な解決策:
/*
!.gitignore
!showMe.txt
!my_visible_dir
マジックは/*
にあります(上で説明されたように)それは再帰的にではなく(ルート)フォルダの中のすべてを無視します。
Libからjarファイルを1つ追加しようとしていたので、これまでのところ何もうまくいきませんでした。
これはうまくいきませんでした:
build/*
!build/libs/*
!build/libs/
!build/libs/myjarfile.jar
これはうまくいった:
build/*
!build/libs
私はこれがうまくいった
# Vendor
/vendor/braintree/braintree_php/*
!/vendor/braintree/braintree_php/lib
他の誰も言及しなかった、私のために働いた何かを見つけたようです。
# 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つのエントリが必要です。1つはサブディレクトリ自体!subdir/
用で、もう1つはその下のすべてのファイルとフォルダに展開されます!subdir/**/*