4

いくつかのコミット(コミットメッセージに特定のチケット番号1234が含まれているもの)をパッチファイルにエクスポートしようとしています。

編集作業スクリプトはhttps://github.com/amenk/SelfScripts/blob/master/git-extract-patchesにあります

これは私が持っているものです

#!/bin/bash -x
commits=`git log --pretty=oneline | grep "#1234" | cut -f1 -d" "`
no=1;
for COMMIT in $commits
do
    git format-patch -1 $COMMIT --start-number=$no
    no=$(($no+1))
done

しかし、何らかの理由でgitformat-patchの実行が失敗します。

$ ./getpatches.sh 
++ git log --pretty=oneline
++ grep '#6809'
++ cut -f1 '-d '
+ commits='da591d66f05513488ee06857edc9d24a046c179d
4fd781da9cc503b961f8e4c42bbb136d9e3c1806
3a9311f5507f91f830b44673c57f672e7aabaac0'
+ no=1
+ for COMMIT in '$commits'
+ git format-patch -1 'da591d66f05513488ee06857edc9d24a046c179d' --start-number=1
fatal: ambiguous argument 'da591d66f05513488ee06857edc9d24a046c179d': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions

git format-patch -1 'da591d66f05513488ee06857edc9d24a046c179d' --start-number=1手動で呼び出すと、すべて問題ありません。

編集:

引用符付きのものだと思います。ループにを追加するgit log | grep $COMMITと、次のエラーが発生します。

+ grep '992ab41d3539539bd609209beed33a9de2f4277a'
grep: Unmatched [ or [^

もう1つのインターセット効果は、grep '992ab41d3539539bd609209beed33a9de2f4277a'forループにハードコーディングした場合、コマンド出力です(-xforオプションbashが引用符なしで機能するため)。

 + grep 992ab41d3539539bd609209beed33a9de2f4277a

これらの引用はどこから来ており、どうすればそれらを取り除くことができますか?

4

2 に答える 2

4

私のgitは暗黙的に--colorオプションを使用していたため、$COMMIT文字列にはいくつかのカラーコードが含まれていました。したがって、これは構文解析を台無しにしました。興味深いことに、エラーメッセージには色も含まれていました。

しかし、これはターミナルには表示されません(カラフルです)。また、スタックオーバーフローに貼り付けた後も表示されません。

解決策は次のとおりです。

commits = `git log --no-color --pretty = oneline | grep "#1234" | カット-f1-d"" `
于 2012-05-24T10:41:14.690 に答える
1

There's an easier way of getting the list of commits:

git log --format=%H --grep "CAT-300"
于 2012-09-24T11:54:45.747 に答える