创建使用bash从中创建分支的所有提交的列表

时间:2014-12-05 15:30:38

标签: git bash sed diff

我正在寻找一个包含以下内容的列表:

  • 日期
  • 分行名称

对于所有分支机构来说,开发'随着'发布'在名称中。

类似于

2014-03-11 10:52:04 +0100 9 months ago  release-1.0
2014-03-28 10:33:23 +0100 8 months ago  release-2.0
2014-04-02 10:40:59 +0200 8 months ago  release-3.0
2014-04-18 17:01:54 +0200 8 months ago  release-3.0.1
2014-05-05 15:25:31 +0200 7 months ago  release-3.0.2

我找到了几个真正帮助我的答案,现在我在语法上磕磕绊绊。有用的信息是:

到目前为止,我将以下内容作为bash中的别名

for k in `git branch|sed s/^..//`;
    do  echo -e `git log -1 --pretty=format:"%Cgreen%ci %Cblue%cr %Creset" 
         <(`diff -u <(git rev-list --first-parent "$k") <(git rev-list --first-parent develop)|sed -ne '"'"'s/^ //p'"'"'|head -1`)
           --`\\t"$k";

done|sort;'

单独运行此部分工作。但并非完全如此。

所以这些工作:

  • git branch|sed s/^..//
  • git log -1 --pretty=format:"%Cgreen%ci %Cblue%cr %Creset" release-3.0
  • diff -u <(git rev-list --first-parent release-3.0) <(git rev-list --first-parent develop)

但不是当我把它们放在一起时。

帮助?

1 个答案:

答案 0 :(得分:2)

你不能像这样嵌套反引号命令:

echo `echo foo `echo bar` baz`

要进行嵌套,您需要使用(所有更优选的)$()语法。

你也不需要反叛     ≤(...

除非您希望替换从...命令而不是...命令本身运行输出

所以尝试更像这样的东西:

for k in $(git branch|sed s/^..//);
    do  echo -e $(git log -1 --pretty=format:"%Cgreen%ci %Cblue%cr %Creset" 
         <(`diff -u <(git rev-list --first-parent "$k") <(git rev-list --first-parent develop)|sed -ne '"'"'s/^ //p'"'"'|head -1`)
           --)\\t"$k";
done|sort;'

或没有<()反对

for k in $(git branch|sed s/^..//);
    do echo -e $(git log -1 --pretty=format:"%Cgreen%ci %Cblue%cr %Creset" 
         <(diff -u <(git rev-list --first-parent "$k") <(git rev-list --first-parent develop)|sed -ne '"'"'s/^ //p'"'"'|head -1)
           --)\\t"$k";
done|sort;'

此外,我认为您根本不需要使用echo -e,因为您可以直接将\t$k放在git log格式字符串中。

for k in $(git branch|sed s/^..//); do
    git log -1 --pretty=format:"%Cgreen%ci %Cblue%cr %Creset"$'\t'"$k" 
         <(diff -u <(git rev-list --first-parent "$k") <(git rev-list --first-parent develop)|sed -ne '"'"'s/^ //p'"'"'|head -1)
           --;
done|sort;'

其中,假设我做得很好,看起来它试图将git log修订版本提供给标准输入日志,但我不相信git log以这种方式输入。所以你需要把它变成一个参数。

for k in $(git branch|sed s/^..//); do
    git log -1 --pretty=format:"%Cgreen%ci %Cblue%cr %Creset"$'\t'"$k" 
         "$(diff -u <(git rev-list --first-parent "$k") <(git rev-list --first-parent develop)|sed -ne '"'"'s/^ //p'"'"'|head -1)"
         --;
done|sort;'

你也可以摆脱悬挂--