0

私は非常にシンプルな git リポジトリを持っており、これを使って git を学習しています。に加えて 2 つのブランチがありmasterます。javafxnetty。各ブランチ内に新しいプロジェクト モジュールを作成しました。ブランチの場合netty、プロジェクト レイアウトは次のようになります。

sandbox
  netty

ブランチの場合javafx、プロジェクト レイアウトは次のようになります。

sandbox
  javafx

ブランチ間を切り替えるときはいつでも、作業ディレクトリに他のブランチのディレクトリが残っていました。ブランチを何度も切り替えましたが、余分なディレクトリは削除されませんでした。作業ディレクトリを適切にクリーンアップする方法を学ぶ必要があると判断し、nettyブランチで次のコマンドを実行しました。

git clean -fd

まさに期待どおりの動作でしたが、Git のチェックアウト動作が異なっているようです。nettyブランチからブランチに切り替えると、javafx以前と同じです。余分なnettyディレクトリは作業ディレクトリに残ります。javafxただし、ブランチからブランチに切り替えるnettyと、javafxディレクトリが自動的に削除/クリーンアップされます。

ただし、別のマシンでリポジトリを複製しても、以前と同じように機能します。追跡されていないファイルはすべて作業ディレクトリに残されます。git clean -fdある種の永続的な効果がありますか?

編集:さらに遊んだ後、これは私のIDE(IntelliJ IDEA)と関係があることに気付きました。アクティブなプロジェクト モジュールを含まない別のブランチをチェックアウトしたときに、Git がアクティブなプロジェクト モジュールのディレクトリを削除できないようです。

たとえば、自分のnettyブランチでブランチをチェックアウトすると、Git はディレクトリjavafxを削除できないようです。nettyただし、IDEA プロジェクトを再生成せずにブランチを再チェックアウトするとnetty、Git は問題なくjavafxディレクトリを削除します。

私のIDEがこれらのディレクトリが一度削除されるのを防いだ後、私がgit clean -fd. IDE を閉じてブランチを切り替えても、何も変わりません。

IDE を起動せずにリポジトリのクローンを作成してブランチをチェックアウトすると、すべてが期待どおりに機能します。新しいブランチをチェックアウトすると、無関係なディレクトリが削除されます。

新しいブランチがチェックアウトされたときに別のプロセスが不要なファイルの削除を妨げた場合、Git はどのように反応しますか?

4

1 に答える 1

2

git-help の man ページから

現在のディレクトリから開始して、バージョン管理下にないファイルを再帰的に削除することにより、作業ツリーをクリーンアップします。

通常は git に認識されないファイルのみが削除されますが、-x オプションを指定すると、無視されたファイルも削除されます。これは、たとえば、すべてのビルド プロダクトを削除するのに役立ちます。

オプションの ... 引数が指定されている場合、それらのパスのみが影響を受けます。

本質的にgit clean -fdは、.gitignore で無視されたファイルを除いて、ローカル コピー内の追跡されていないすべてのファイルとディレクトリを削除します。

私の疑いでは、それらのブランチの 1 つで、生成されたファイルを誤って追跡し始めたのではないでしょうか。

于 2012-07-19T22:14:35.913 に答える