21

実行するとgit clean --dry-run、結果は次のようになります。

Would remove an_untracked_file
Would remove an_untracked_file_2
Would not remove some_unrelated_folder/subfolder/

「無関係な」フォルダは追跡され、変更はありません。そのため、gitがそれらを削除することは期待していません。

しかし、なぜgitWould not removeは私のプロジェクトの通常の(そして完全に手つかずの)フォルダーのすべてではないがいくつかについて報告するのですか?

何がgitに考慮させているのかを知ることができますが、それを拒否して削除することはできますか?

git status私が知っている追跡されていないファイルのカップルだけをリストします。予想通り。

git ls-files --other --exclude-standardそれらの同じ追跡されていないファイルを返します。予想通り。

git ls-files --other --exclude-standard --directoryそれらの同じ追跡されていないファイルに加えて、一見正常に見えるディレクトリの束を返します。返される結果の数を増やすのではなく、減らすこと目的 だと思ったので、これは私が期待したものではありません。--directory

予期しないディレクトリをスポットチェックすると、「。gitignore」d .svnサブフォルダを除いて、それぞれが空であるように見えます。おそらく、これは物事に影響を及ぼします。

誰かが私がこの振る舞いを理解するのを手伝ってもらえますか?

ありがとうございました

4

5 に答える 5

30

デフォルトでgit cleanは、フォルダは削除されません。追跡されていないフォルダが表示されていることを示していますが、削除されません。のように、ディレクトリも削除するように指示する-dフラグを付けます。git clean -d -n

于 2011-12-26T19:39:21.943 に答える
9

何がgitに考慮させているのかを知ることができますが、それを拒否して削除することはできますか?

あなたは実際にできます!(2013年7月以降、今後のgit 1.8.4):
" git clean"コマンドはインタラクティブモードを学習しました(git clean -i)。

初期実装については、commit17696002086e8c6b9e998543d212e707c7d511abを参照してください。

実装については、commitd1239264f2786d7ea15543b980c6bf6afbc4701aを参照してください。

インタラクティブ用の新しいアクションを追加しますgit-cleanパターンでフィルタリングします
ユーザーがこのアクションを選択すると、ユーザーはスペースで区切られたパターン(と同じ構文gitignore)を入力でき、パターンの1つと一致する各クリーン候補はクリーニングから除外されます。
ユーザーが問題ないと感じたら、Enterキーを押して、確認ダイアログに戻ります。

テストと例については、commitdb627fd568410499c47d764937c3d7a10bbadffaを参照してください。

ドキュメントについては、commitc0be6b4c8a1d16a92efad00d73683075cf2da60dを参照してください。

何が行われるかを示し、ファイルをインタラクティブにクリーンアップします。


インタラクティブモード

コマンドがインタラクティブモードに入ると、クリーンアップするファイルとディレクトリが表示され、インタラクティブコマンドループに入ります。

コマンドループは、使用可能なサブコマンドのリストを表示し、プロンプト「What now>」を表示します。
一般に、プロンプトが単一の' >'で終わる場合は、次のように、指定された選択肢の1つだけを選択して入力できますreturn

------------
  *** Commands ***
  1: clean                2: filter by pattern    3: select by numbers
  4: ask each             5: quit                 6: help
  What now> 1
------------

選択肢がユニークである限り、あなたはそれ以上cと言うこともできます。clean

メインコマンドループには6つのサブコマンドがあります。

clean::

ファイルとディレクトリのクリーニングを開始して、終了します。

filter by pattern::

これにより、削除するファイルとディレクトリが表示され、「Input ignore patterns>>」プロンプトが表示されます。
スペースで区切られたパターンを入力して、ファイルとディレクトリを削除から除外できます。
たとえば、「 」は「 」と「」で*.c *.h終わるファイルを削除から除外します。 フィルタリングされた結果に満足したら、(空)を押してメインメニューに戻ります。.c.h
ENTER

select by numbers

これにより、削除するファイルとディレクトリが表示され、「Select items to delete>>」プロンプトが表示されます。
プロンプトがこのようにdouble''で終わる場合、>>空白またはコンマで連結して複数の選択を行うことができます。
また、あなたは範囲を言うことができます。
たとえば2-5 7,9、リストから2、3、4、5、7、9を選択するには「」を使用します。
範囲内の2番目の数字を省略すると、残りのすべてのパッチが適用されます。
例:7-リストから7,8,9を選択するには""。
''と言っ*てすべてを選択できます。
また、フィルタリングされた結果に満足したら、ENTER(空)を押してメインメニューに戻ります。

ask each::

これでクリーニングが始まります。アイテムを削除するには、1つずつ確認する必要があります。
このアクションは、上記の2つのアクションほど効率的ではないことに注意してください。

quit::

これにより、クリーニングを行わずに終了できます。

help::

インタラクティブなgit-cleanの簡単な使用法を示します。

于 2013-07-23T05:58:20.290 に答える
6

コマンドの実行時に特定のファイルとフォルダーが引き続き失敗する場合は、

git clean -d -f

-f操作を強制します。

ドライランに使用-nします。

于 2012-11-21T02:07:04.137 に答える
2

この回答は、リポジトリディレクトリをクリーンアップするための最も一般的なシナリオであると思うので、主に参照目的です。

追跡されていないすべてのディレクトリを再帰的に削除するには:

git clean -d -f -x

-dディレクトリの場合、 -x無視リストのディレクトリを削除する場合(binやなどbuild)。これは私がほとんどの場合必要と していることであり、-f自分が何をしているかを確認するためのものです。

于 2013-06-04T11:46:05.067 に答える
0

Macでgitバージョン2.10.0を使用していますが、どういうわけか使用できません

git clean -df

追跡されていないファイルを削除するために、代わりにこれを使用しました:

gitcheckout-

PS:

誰かがコメントで私が使用できない理由を説明できるなら

git clean -df

ファイルを削除するには、私は非常に感謝します..ありがとう

警告あなたはまたあなたの追跡されたファイルを失うでしょう:(

于 2016-09-10T00:06:17.020 に答える