2017-10-15 16 views

答えて

2

xargsを使用しないため、最初の機能は動作しません。 cutが機能しないため、出力を見てください。

修正されたファイルのリストを1行に1つずつ表示するコマンドがあります(git ls-files --modified)。あなたは、ファイル名にスペースがない場合は、単純に使用します。

git ls-files --modified | xargs git add 

あなたは、ファイル名にスペースがある場合は、必ずxargsのバリアントは、オプションとして-0をサポートすること-z-0オプションを(使用しています。それは)普遍的ではなく、GNU xargsの標準である:

git ls-files --modified -z | xargs -0 git add 

フラグなしでgit statusを使用して、あなたは、ファイル名にスペースが含まれていない自信がある必要があり、あなたがして使用することができますが:

git status | awk '/[[:space:]]modified:[[:space:]]/{print $2}' | xargs git add 

また、git status -sは、より簡単で解析しやすい出力形式を提供します。あなたが使用する可能性があります:

git status -s | sed -n '/^ M/s///p' | xargs git add 

これは、単純なケースのために働く(あなたはそれがインデックスにまだない、ローカルファイルを変更した、それが唯一の関連する変更です)。短いフォーマットでgit status --helpのspielを読んで、(多くの)他のケースをどのように処理する必要があるかを理解する必要があります。

また、git commit -aはすべての変更されたファイルをコミットすることにも注意してください。


私が試してみてください。git ls-files -o | grep "tests/" | xargs -0 git add、私はxargs: argument line too longを取得します。

xargsへの-0のオプションには、ヌルバイトで終わる「行」が必要です。 gitコマンドは、-zオプションを省略したため、これらのコマンドを生成しません。真ん中にあるgrep(改行で終わる行のみで動作する)を心配しているので、おそらく省略したでしょうが、コマンドラインは改行やヌルを使って作業している間、自己完結型でなければなりませんファイル名区切り文字。幸運にもgrepには--nullというオプションがあります(GNUとBSDで動作するgrep; GNUでも-zが許されていますが、それはBSDとは異なることを意味します)。そのため、あなたはどちらかしようとする必要があります。

git ls-files -o -z | grep --null "tests/" | xargs -0 git add 

か、あなたはファイル名にスペースを心配する必要がない場合:

git ls-files -o | grep "tests/" | xargs git add 
+0

私は試してみます:git ls-files -o | grep "tests /" | xargs -0 git add。しかし、私はxargsを得る:引数行が長すぎる @Jonathan Leffler – Alex

+0

私はuntrackedファイルを追加したい。私もzフラグを使用しようとしますが、動作しません@Jonathan Leffler – Alex

+0

私はお詫びしますが、それでも動作しません。私は致命的なpathspecを取得します。 @Jonathan Leffer – Alex

1

あなたは単にgit add -uを使用することができます。 It will stage only modified files

+0

git addディレクトリにもディレクトリ内の削除されたファイルのステージを更新しますか? @ 1615903 – Alex

関連する問題