web-dev-qa-db-ja.com

gitのサブディレクトリを無視する際の問題

私は約5レベルの深さを持つMavenマルチモジュールプロジェクトを持っています。
私は現在gitに移動しており、targetフォルダのコンテンツの多くがgitによって「Unstaged Changes」としてキャプチャされていることがわかります。
グーグル検索してSOを検索しましたが、gitに全体を無視する方法に関する回答が見つかりませんでしたtargetフォルダのディレクトリツリー。
プロジェクトのルートにあるMy .gitignoreは次のようになります。

.project  
.classpath
.settings/
target/

奇妙なことに、targetツリーの下のどこかにある.classファイルは、上記の定義では無視されますが、MANIFEST.MFpom.propertiesなどのファイルtargetディレクトリツリーのどこかにあるアプリケーションプロパティファイルは無視されません。
私は読んだ Git IgnoresとMavenターゲット ですが、その解決策は私にはうまくいかないようです。
target/*ルールを追加しようとしても何も変更されず、target/target/*に置き換えた後、.classファイルもステージングされていないように見えます。
gitとmavenを使用している人々の大群が同様の問題をまだ解決していないとは思えないので、いくつかのガイダンスを本当に感謝します。ありがとう。

29
Ittai

その理由の1つは、そのファイルをリポジトリーに既にコミットしていることです。その場合、それらを.gitignoreに追加しても、gitがこれらのファイルを追跡することは妨げられません。これを修正するには、まずそれらを次のようにリポジトリから削除する必要があります。

git rm -r target/

(プロジェクトにモジュールがある場合、関連するモジュールのターゲットまでのパスを含める必要があります。
git rm -r parent_project/module_name/target/

ディスクからではなくリポジトリからディレクトリを削除したい場合は、--cachedオプションを使用できます。

git rm -r --cached target/

いずれの場合でも、その削除をリポジトリにコミットする必要があります(必要に応じて、target/.gitignoreに追加して、同じコミットで実行できます)。

58
KL-7
target
target/*

これらの行をgitignoreに追加して、ターゲットファイルとターゲット内のすべてのファイルを無視します。これは、そのフォルダーとそのコンテンツを追跡しなくなります。

4
Manish Shrestha

または、フォルダターゲットで tortoisegit を使用して、「削除して無視リストに追加」を選択するだけです。

2
istibekesi