92

リポジトリ@githubを持っています。私は家でいくつかの仕事をして、それをgithubにプッシュしました。これには、ファイルとディレクトリの削除が含まれていました。今、私は自分のワークボックスにいます。ファイルとディレクトリを削除する前にコードのコピーがありました。

私は以下を発行しました:

git remote update
git checkout HEAD
git pull origin HEAD

必要なすべてのファイルが削除されましたが、ファイルが含まれていたディレクトリは削除されませんでした。

2つの質問:

  1. なぜディレクトリを削除しなかったのですか?
  2. それらを削除するために現在の状態で発行できるgitコマンドはありますか?
4

5 に答える 5

166

Gitはディレクトリを追跡しないため、マージやその他の変更の結果として空になったディレクトリは削除されません。ただし、これを使用git clean -fdして、追跡されていないディレクトリを削除できます(-fdフラグは、追跡されていないファイルとディレクトリを強制的削除することを意味します)。

于 2009-09-30T18:19:24.383 に答える
5

ビルドサービス(CI)の場合も同じ問題がありました。GITがフォルダーをクリーンアップせずにすべてのファイルをプルするため、CIによって以前にビルドされたすべてのbin / objがダーティであるため、テストプロジェクトを削除すると、bin引き続きDLLが含まれ、存在しないテストについて言及します。

この問題を解決するために; このコマンドは(少なくとも私にとっては)トリックを行うようです

git clean -fd -x

ここで、Xは追跡されていないすべてのファイルを削除します。

-XGitによって無視されたファイルのみを削除します。これは、すべてを最初から再構築するのに役立つ場合がありますが、手動で作成したファイルは保持します。

于 2019-10-20T04:27:27.977 に答える
4

作業ツリーを変更するほとんどの操作(プル、マージ、チェックアウトなど)の一部として、gitはその操作によって空になったディレクトリをすべて削除します(つまり、gitは最後のファイルを削除しました)。

gitは完全に空でないディレクトリを削除しないため、ファイルを非表示にしたり無視したりした場合、gitがそのディレクトリから最後に追跡されたファイルを削除したからといって、必ずしもgitがそのディレクトリを削除できるとは限りません。gitはこれをエラー状態とは見なさないので、文句を言うことはありません。

于 2009-09-30T17:09:53.157 に答える
2

Gitはディレクトリやファイル(およびそれらのパス)を追跡しません。Gitは、これらのパスがまだ存在しない場合はすべてのディレクトリを作成しますが(かっこいい!)、パスに含まれるすべてのファイルが移動または削除されても削除されません(かっこいい☹...ではありませんが、理由があります)

解決策(プル/早送り/マージした後):

git stash --include-untracked
git clean -fd
git stash pop

stashこれまでに行っていない場合は、追跡されていcleanないすべてのファイルが(不可逆的に)失われます。

注:これにより、無視されたすべてのファイルもクリーンアップされるため、プロジェクトメタデータを再作成するために、ビルドスクリプトの一部を再度実行する必要がある場合があります(例:) ./gradlew eclipse。これにより、空でgitファイルのパスの一部ではなかったディレクトリも削除されます。

于 2015-06-22T21:46:41.107 に答える
-1

Gitは現在ディレクトリを追跡していません(git wikiを参照)。つまり、空のディレクトリを追加したり、空になったディレクトリをgitで削除したりすることはできません。 (編集:ありがとう、マニ、私は間違っていました!空のディレクトリを追加することはできませんが、追跡されたコンテンツが削除されたために空になったディレクトリはgitによって削除されます。

空のディレクトリを削除するコマンドについて:これはオペレーティングシステムによって異なります。

Linuxの場合、たとえば、

find -depth -type d -empty -exec rmdir {} \;

ただし、これによりすべての空のディレクトリが削除されます。

于 2009-09-30T16:23:44.890 に答える