2011-01-20 11 views
1

私はマスターに構造体があるとします。GIT:別のブランチをチェックアウトするときに、無視されたファイルをクリアしたい

d - src 
     - main ... 
     - resources ... 
    - target 
     - xyz 

ファイルxyzが追跡すべきではありませんので、私は.gitignore対象に追加/ * と構造に

  • gitのコミット私が作成-m '初期構造'

をコミット2つの枝

  • gitブランチt1
  • gitのブランチT2

やものをコンパイルし、私はいくつかの作業をやって起動T1

  • Gitチェックアウトさt1

に切り替えるには、その結果、ターゲットが移入されます。 私はt1に自分の変更をコミットします。

  • gitの-aコミットT1 'を特定の変更'

その後、私は私がターゲットに見ると、それはまだある

  • Gitチェックアウトt2の

をT2に切り替えますブランチt1がアクティブだったときに作成されたファイル が作成されましたが、これらは「クリアされました」

gitが私とは違った振る舞いでなければならないという似たような議論がありました。 Git is deleting an ignored file when i switch branches

私は何が欠けていますか?

あなたが無視されたファイルをクリーンアップpost-checkoutフック追加することができフランシス

+0

私はあなたが他の質問を慎重に読んでいるとは思わない。無視されたファイルは実際には無視されませんでした。あるブランチでは追跡されましたが別のブランチでは追跡されず、gitignoreに追加されましたが、リポジトリから削除されることはありませんでした。 – Cascabel

答えて

2

これは仕様です。 Gitは作業フォルダ内で追跡していないファイルには触れません。あなたがより一般的に

git clean -xdf 

を使用することができます人跡未踏のファイルをきれいにしたい場合は、私が追跡されていないが、無視されていない変更を破棄します。これは、私がいくつかのコードを試していて、新しいクラスファイルを追加したためかもしれません。この場合、私は使用します:

git clean -df 

これは私の出力ディレクトリをそのまま残すでしょう。私は代わりに、これらのフォルダをクリーニングする私の開発ツールに依存するだろう。

フックを使用することはできますが、それはチーム全体で共有するのが難しいため、良い解決策ではありません。

+1

これは、自動化したくない動作(フックやエイリアスなど)があると思います。いつかあなたはいくつかのコードを書いて、チェックインを怠り、ブランチを切り替えるつもりです...そして、あなたの "有益な"自動クリーニングがただあなたのためにそれを放棄したことを発見します。共有可能かどうかはまったく関係ありません。あなたはデフォルトでそれをしたくないだけです。 – Cascabel

+0

合意。私は半分助けている:) –

0

git clean -f -X 
0

をリンクされた質問は、一方の分岐で追跡し、他では無視のファイルについて話しています。あなたは、どのブランチでも追跡されない、生成されたファイルについて話しています。 gitはそれらを追跡していないので、何もしません。

関連する問題