web-dev-qa-db-ja.com

Git:「追跡されていない」ファイルのみを一覧表示します(また、カスタムコマンド)

git ls-filesのようなコマンドを使用して、追跡されていないファイルのみを表示する方法はありますか?

私が尋ねている理由は、次のコマンドを使用してすべての削除されたファイルを処理するためです:

git ls-files -d | xargs git rm

追跡されていないファイルについても同様のものが欲しい:

git some-command --some-options | xargs git add

-ogit ls-filesオプションを見つけることができましたが、無視されたファイルも表示されるため、これは望みではありません。また、次の長くていコマンドを思いつくことができました。

git status --porcelain | grep '^??' | cut -c4- | xargs git add

ここで使用できる、より良いコマンドが必要なようです。存在しない場合、カスタムgitコマンドを作成するにはどうすればよいですか?

300
jnylen

追跡されていないファイルを一覧表示するには:

git ls-files --others --exclude-standard

出力をxargsにパイプする必要がある場合は、git ls-files -zxargs -0を使用して空白を気にするのが賢明です。

git ls-files -z -o --exclude-standard | xargs -0 git add

追跡されていないファイルを追加するためのエイリアス:

au = !git add $(git ls-files -o --exclude-standard)

編集:参考: git-ls-files

478
takeshin

追跡されていないファイルを削除する場合は、次の操作を行います

git clean -df

特に無視されるファイルも含めたい場合は、xを追加してください。私はgit clean -dfx a lotを終日使用しています。

git-whateverというスクリプトを記述してパスに含めることで、カスタムgitを作成できます。

65
Dustin

受け入れられる回答は、スペースのあるファイル名でクラッシュします。現時点では、エイリアスコマンドの更新方法がわからないので、改良版をここに配置します。

git ls-files -z -o --exclude-standard | xargs -0 git add
27
youurayy

すべてが非常に簡単です

すべての追跡されていないファイルのリストを取得するにはse commandgit status with option-u(-未追跡ファイル)

git status -u
23
Valentyna

潜在的に追加するファイルを探しているとき。 git showの出力はそれを行いますが、他にも多くのものが含まれています。次のコマンドは、同じファイルのリストを取得するのに便利ですが、他のものはすべてありません。

 git status --porcelain | grep "^?? " | sed -e 's/^[?]* //'

これは、パイプラインで組み合わせて特定のパターンに一致するファイルを検索し、それをgit addにパイプするときに役立ちます。

git status --porcelain | grep "^?? "  | sed -e 's/^[?]* //' | \
egrep "\.project$|\.settings$\.classfile$" | xargs -n1 git add
5
cmac

私は古い質問を知っていますが、追跡されていないファイルをリストするという観点から、追跡されていないフォルダもリストする別のファイルを追加すると思いました:

Git clean操作で-n(ドライラン)を使用すると、削除するファイル(.gitignoreファイルを含む)を表示できます。

git clean -xdn

これには、追跡されないすべてのファイルおよびすべてのフォルダーを表示するという利点があります。パラメーター:

  • x-すべての追跡されていないファイルを表示します(ビルド出力などのgitやその他のユーザーによって無視されるものを含む)。
  • d-追跡されていないディレクトリを表示
  • n-そしてほとんどの重要!-dryrun、つまり実際には何も削除せず、結果を表示するためにクリーンなメカニズムを使用します。
4
code_fodder

私がチェックした以前の回答はすべて、コミットするファイルもリストします。以下は、まだリポジトリになく、.gitignoreの対象ではないファイルのみをリストするシンプルで簡単なソリューションです。

git status --porcelain | awk '/^\?\?/ { print $2; }'
1

これは、元のポスターが意図したものと同じことになると思います。

git add .

0
Tim Fulmer