2017-09-01 5 views
-1

をファイルを無視しません無視する。.gitignoreは、私はプロジェクトとその構造は以下の通りです持って適切に

.gitignoreファイルがあります:

.gitignore 
*.out 
*.swp 
/build/* 

私はgit statusを実行すると、私は理解していないmodified: CMakeLists.txtがあります。 CMakeLists.txtが無視されないのはなぜですか?なぜそれが無視されない唯一のファイルですか?

+0

「git ls-files --error-unmatch build/CMakeLists.txt」コマンドの出力は何ですか? – skovorodkin

+0

出力は 'build/CMakeLists.txt'です –

+0

現在のGit作業ツリーからローカル(untracked)ファイルを削除する方法はありますか?(https://stackoverflow.com/questions/61212/how-to-remove -local-untracked-files-the-current-git-working-treeから) – phd

答えて

2

git ls-files --error-unmatch build/CMakeLists.txtはエラーを表示しないため、build/CMakeLists.txtファイルが既にレポでトラッキングされていることを意味します。したがって、.gitignoreファイルはそれ以上影響を受けません。 gitから削除するにはgit rm --cached build/CMakeLists.txtを実行する必要があります。

0

ルールを無視する(.gitignoreのようなもの)は、にのみ適用されます。ファイル。追跡されたファイルへの変更は無視できません。人々はこのユースケースのために提案したいメカニズムがありますが、それらはすべて解決よりも多くの問題を引き起こします。

(そして、Gitはを変更しています。ファイルのバージョンがインデックスにすでにあります意味ことを示していますので、我々は、問題のファイルを追跡していることを知っている。)

あなたはからファイルを削除した場合索引を無視してルールを適用できます。これは、このコミットから、ファイルののバージョンが含まれていないことを意味します。あなたが成功した全体buildディレクトリをカバーするために無視したい場合は、ファイルがまだ(すなわち、他の枝に)他の「現在」のコミットに存在する場合、それはまだあるでしょう、もちろん

git rm -r --cached build 

を言う(と可能性マージの方法であなたの現在の支店に潜入することができます)。

ファイルが存在することを意味せず、履歴書き直しが可能な場合は、BFG Repo Cleanerを使用して完全に取り除くことを検討してください。コミットIDを変更し、共同作業者にレポを置き換える必要があるという極端な解決策です。

基本的に、.gitignore.gitignoreファイルに入れる理由はありません。通常、レポの一部として共有されるルールは無視したいが、そうでない場合は、.gitignoreの代わりに.git/info/excludeを使用することができます。

指定された拡張子を持つファイルが指定されたパスの外側に存在しない限り、パスベースの除外と拡張子ベースの除外のための別個のエントリは必要ありません。

-1

.gitignoreにディレクトリを追加します。

echo 'node_modules/' >> .gitignore 

.gitignoreにファイルを追加します。

echo 'config/constants.js' >> .gitignore 

を、その後:

git rm -r --cached node_modules/ 

か:

git rm -r --cached config/constants.js 

あなたの他のファイルを追加します。

git add . 

か:

git add --all 

それをコミットします。

git commit -m ".gitignore is now working" 

最後レポにコードをプッシュします。

関連する問題