を使って練習しようとしていますxargs
。 SHA1を介して渡し、以下を試しましたxargs
。
$ git show SHA1 --name-only
私も次のことを試しました。
$ git log --author=jim --grep="patch" |head -n 1|cut -d ' ' -f2|xargs {} git show {} --name-only
帰ってきたxargs: {}: No such file or directory
だから私は続けます:
$ git log --author=jim --grep="patch" |head -n 1|cut -d ' ' -f2|xargs -0 -I {} git show {} --name-only
返品:
fatal: ambiguous argument 'a1237ac27321f2daea365787664e4119b339c483': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
言及されたSHAは正確ですが、これがうまくいかない理由も理解していません。
答え1
xargs -0
引用するヌルバイトのみを使用入力レコードを分離し、入力に改行やその他のスペースを含めます。リビジョン出力の末尾に改行があり、そこに出て与えられた引数head
にcut
含まれますgit
。 Gitはこの記事を嫌います。エラーメッセージで改行を編集したようですが、実際にはここにあるメッセージの一部であり、問題の原因です。
削除すると、-0
あなたのコマンドは私に効果的です。生成された入力を考慮すると、改行で区切られたデフォルトの動作はxargs
安全です。
この場合でも、実際にそれを使用する必要はありません-I {}
。git
最後の引数としてリビジョンを持つことをお勧めしますが、練習用にのみ使用しているようです。デフォルトでは、引数xargs
だけが指定されたコマンドの最後に配置されます(代替find -exec
使用とは異なり{}
)。
ただし、Gitをそれ以上使用するcut
必要がありますxargs
。--pretty=tformat...
オプション1行に1つずつSHA1ハッシュのみを出力することができます。
git log --author=jim --grep="patch" --pretty=tformat:'%H'
コミットに一致するリポジトリのすべてのハッシュを1行に1つずつ出力します。--pretty
出力形式を設定します。tformat
各ハッシュの末尾に改行文字を配置することを意味します。 '%H'はハッシュ値を表します。
これをxargsにパイプすることができ、入力全体が「clean」[a-f0-9]なので、デフォルトの行区切りで使用できます
答え2
- パイプラインと以下を使用してマージするたびにgitタグを作成しました
xargs
。git log --oneline --merges --pretty=format:"V%ad %H" --date=format:"%Y%m%d_%H_%M" |xargs -n2 git tag --force
または
パイプラインとのマージごとにgitタグを作成し、次の
awk
場所にgitタグを生成しましたxargs
。git log --oneline --merges --pretty=format:"V%ad %H" --date=format:"%Y%m%d_%H_%M" | awk '{system("git tag --force " $1 " " $2)}'
または
xargsとbashの使用
git log --oneline --merges --pretty=format:"V%ad %H" --date=format:"%Y%m%d_%H_%M" | xargs -l bash -c 'git tag $0 $1 --force'
または
- タグ名にはトピックの「その他」が含まれています。
git log --oneline --merges --pretty=format:"V%ad_%f %H" --date=format:"%Y%m%d_%H_%M" | sed "s/\./_/g" | xargs -l bash -c 'var="$0" && git tag --force ${var:0:100} $1'
後:git push --tags origin mytargetbranch
情報
- 情報
xargs
:-n2
最大パラメータ - https://superuser.com/questions/375690/how-can-i-use-two-parameters-at-once-with-xargs
- https://stackoverflow.com/questions/3770432/xargs-with-multiple-arguments
- すべてのローカルタグを削除します。
git tag | xargs git tag -d
- すべて削除離れてブランド:
git ls-remote --tags origin | sed 's/refs\/tags\///' | sed 's#\^{}##'| cut -f 2 |uniq| xargs git push --delete origin
拡張ラテン文字を許可するために、代替git log --oneline --merges --pretty=format:"V%ad_%f %H"
( %f
クリーンテーマ)がPerlクリーンに置き換えられました。%s
git log --oneline --merges --pretty=format:"V%ad_%s+++%H" --date=format:"%Y%m%d_%H_%M"| perl -pe 's/[\?\[\]\/\\=<>:;,\x27"&\$#*()|~`!{}%]//g;' | sed "s/[ .]/_/g" | sed "s/+++/ /g" | sed "s/+//g" | xargs -l bash -c 'var="$0";git tag --force ${var:0:100} $1' && git push --tags origin mytargetbranch
情報