新しい複製を実行し、作業ディレクトリを複製されたディレクトリにコピー/貼り付けました。これで変更されたファイルのリストが表示されます。
$ git status --short | grep -v "??" | cut -d " " -f 3
GNUmakefile
Readme.txt
base32.h
base64.h
...
Gitに追加しようとするとエラーが発生します(一度に1つずつ追加することは気にしません)。
$ git status --short | grep -v "??" | cut -d " " -f 3 | git add
Nothing specified, nothing added.
Maybe you wanted to say 'git add .'?
次に追加-
:
$ git status --short | grep -v "??" | cut -d " " -f 3 | git add -
fatal: pathspec '-' did not match any files
そして--
:
$ git status --short | grep -v "??" | cut -d " " -f 3 | git add --
Nothing specified, nothing added.
Maybe you wanted to say 'git add .'?
試してみてくださいインタラクティブマニュアルページを見ると、状況がさらに混乱するようです。
$ git status --short | grep -v "??" | cut -d " " -f 3 | git add -i
staged unstaged path
1: unchanged +1/-1 GNUmakefile
2: unchanged +11/-11 Readme.txt
...
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
Huh (GNUmakefile)?
What now> *** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
Huh (Readme.txt)?
(私はGitがめちゃくちゃにしたディレクトリをすでに削除しているので修正したくありません。)
パイプでリンクされたファイルを追加するようにGitにどのように指示しますか?
答え1
git add
ファイルがパイプライン化されるのではなく、パラメーターとしてリストされると予想されますstdin
。
git status --short | grep -v "??" | cut -d " " -f 3 | xargs git add
または
for file in $(git status --short | grep -v "??" | cut -d " " -f 3); do
git add $file;
done
答え2
使った
git add `cat filelist`
ファイルが100個しかありません。 1000秒可能問題があります。
しかし、そうではないかもしれません。テストを実行するには、「-n」を使用します。
答え3
ファイルがすでにインデックスにある場合(たとえば、「git status」を実行すると、追跡されていないのではなく「修正済み」と表示されます)、次のことを実行できます。
git commit -am "Useful commit message here"
これにより、追跡されたが変更されたすべてのファイルが自動的に追加されます。
答え4
David Kingのものと似ています。
git status --short | perl -lane '$F[0] == "M" and print $F[1]' | xargs -n 20 git add
この例では、「修正済み」状態のファイルのみを検索して追加します。パラメータリストが長すぎるのを防ぐには、xargs
この-n 20
パラメータを使用してgitへの各呼び出しを20個のファイルに制限します。
必要に応じてPerlスクリプトで一致基準を変更します。他の例:
| perl -lane '$F[0] == "M" and $F[1] =~ m/py$/ and print $F[1]' |
この例では、修正されたPythonファイル(で終わる)を見つけますpy
。