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

但由于某种原因,执行 git format-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手动调用时,一切都很好。

编辑:

我认为这与引号有关。如果我将 a 添加git log | grep $COMMIT到循环中,则会收到以下错误:

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

另一个有趣的效果是,如果我grep '992ab41d3539539bd609209beed33a9de2f4277a'在 for 循环中硬编码,命令输出(因为-x选项 forbash没有引号,它可以工作。

 + grep 992ab41d3539539bd609209beed33a9de2f4277a

这些报价来自哪里,我该如何摆脱它们?

4

2 回答 2

4

我的 git 隐式使用该--color选项,因此$COMMIT字符串包含一些颜色代码。所以这搞砸了解析。有趣的是,我的错误消息中也包含了颜色。

但是您在终端中看不到这个(它只是彩色的),并且在粘贴到堆栈溢出后也看不到。

解决方案是:

提交=`git log --no-color --pretty=oneline | grep "#1234" | 剪切-f1 -d""`
于 2012-05-24T10:41:14.690 回答
1

有一种更简单的获取提交列表的方法:

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