Gitで信じられないほど便利なコマンドの1つは、追跡されていないファイル以外のすべてをインデックスにスローするgit add -u
です。その逆がありますか?過去数か月間、インデックスにいくつかの更新をインタラクティブに追加し、コミットする前にすべての追跡されていないファイルをそのインデックスに追加したいという立場にいることがよくありました。
only追跡されていないファイルを個別に識別せずにインデックスに追加する方法はありますか?ヘルプドキュメントに明らかなものはありませんが、見逃しているのでしょうか。
ありがとう。
git add -i
を使えば簡単です。 a
(「未追跡の追加」)、次に*
(「すべて」)、q
(終了)の順に入力すると、完了です。
単一のコマンドでそれを行うには:echo -e "a\n*\nq\n"|git add -i
git ls-files -o --exclude-standard
は追跡されていないファイルを提供するため、以下のようなことができます(またはエイリアスを追加します):
git add $(git ls-files -o --exclude-standard)
正確にはあなたが探しているものではありませんが、これは非常に役立つことがわかりました:
git add -AN
すべてのファイルをインデックスに追加しますが、コンテンツは追加しません。追跡されなかったファイルは、追跡されたかのように動作するようになりました。それらのコンテンツはgit diff
に表示され、git add -p
でインタラクティブに追加できます。
これを〜/ .gitconfigファイルに追加できます:
[alias]
add-untracked = !"git status --porcelain | awk '/\\?\\?/{ print $2 }' | xargs git add"
次に、コマンドラインから次を実行します。
git add-untracked
人々はgit ls-files
の出力をgit add
にパイプすることを提案していますが、*
のような空白またはグロブ文字を含むファイル名がある場合、これは失敗します。
安全な方法は以下を使用することです。
git ls-files -o --exclude-standard -z | xargs -0 git add
-z
はgitに\0
行ターミネータを使用するように指示し、-0
はxargsに同じことを指示します。このアプローチの唯一の欠点は、-0
オプションが非標準であるため、xargs
の一部のバージョンのみがサポートされていることです。
git ls-files
は、現在のディレクトリ内のファイルをリストします。ツリー内の任意の場所から追跡されていないファイルを一覧表示する場合、これはより適切に機能する可能性があります。
git ls-files -o --exclude-standard $(git rev-parse --show-toplevel)
ツリー内のすべての追跡されていないファイルを追加するには:
git ls-files -o --exclude-standard $(git rev-parse --show-toplevel) | xargs git add
私はこれを試してみましたが、うまくいきました:
git stash && git add . && git stash pop
git stash
は、変更されたすべての追跡ファイルを個別のスタックにのみ配置し、残りのファイルは追跡されていないファイルになります。その後、git add .
を実行することで、必要に応じて、追跡されていないファイルをすべてステージングします。最終的に、git stash pop
を実行して、変更されたすべてのファイルをスタックから取得します
git add。 (このディレクトリ内のすべてのファイルを追加)
git add -all (すべてのディレクトリのすべてのファイルを追加)
git add -Nは、後でどれをリストするのに役立ちます。
追跡されていないファイルが何千もある場合(大丈夫、尋ねないでください)、git add -i
を追加するときに*
は機能しません。 Argument list too long
を示すエラーが表示されます。
その後もWindowsを使用している場合(#2は尋ねないでください:-)、追跡されていないすべてのファイルを追加するためにPowerShellを使用する必要がある場合は、次のコマンドを使用できます。
git ls-files -o --exclude-standard | select | foreach { git add $_ }
ここにはたくさんの良いヒントがありますが、Powershell内では動作しませんでした。
私は.NET開発者であり、.Netコアとクロスプラットフォームをあまり使用していないため、主にWindows OSを使用しています。そのため、Gitでの日常的な使用はWindows環境で行われます。 Git bashではありません。
次の手順に従って、追跡されていないファイルをGitリポジトリに追加するエイリアス関数を作成できます。
Powershellの$ profileファイル内(見つからない場合-New-Item $ Profileを実行できます)
メモ帳$ Profile
次に、このPowershellメソッドを追加します。
function AddUntracked-Git() {
&git ls-files -o --exclude-standard | select | foreach { git add $_ }
}
$ profileファイルを保存し、Powershellにリロードします。次に、次を使用して$ profileファイルをリロードします。 $ profile
これは、* nix環境のIMHOのsourceコマンドに似ています。
そのため、次回、Gitリポジトリに対してWindowsでPowershellを使用する開発者で、追跡できないファイルだけを含めたい場合は、次のコマンドを実行できます。
AddUntracked-Git
これは、動詞名詞があるPowershellの規則に従います。