如果没有换行符,Git别名就无法回显

时间:2015-09-16 11:32:30

标签: git

我试图创建以下git别名:

stat = "!stat() { echo -n Number of revisions:; git log --oneline | wc -l;}; stat"

但输出错误:

> git stat
-n Number of revisions:
    5917

我想要的输出是:

> git stat
Number of revisions: 5917

-n选项不起作用是否正常? 它虽然在命令行上。

我使用的是git 2.5.0版。

3 个答案:

答案 0 :(得分:2)

确定。我找到了它!

默认情况下,git别名似乎使用sh而不是bash。

在我的操作系统上,sh不支持-n,但bash确实支持。 所以诀窍是告诉git使用bash而不是sh。 (http://blogs.atlassian.com/2014/10/advanced-git-aliases/

使用bash的-c选项,我可以获得所需的输出。 这是我现在的工作别名:

stat = "!/bin/bash -c 'stat() { echo -n Number of revisions:; git log --oneline | wc -l;}; stat'"

答案 1 :(得分:1)

您的shell可能没有支持JFrame frame = new JFrame("Title for your window"); JPanel panel = new JPanel(); JLabel label = new JLabel("Your text here"); panel.add(label); frame.add(panel); frame.setVisible(true); 标记的echo

但是你实际上并不需要-n标志,你可以只回显一行并在那里插入结果:

-n

this question中所述,您还可以使用stat = "!echo Number of revisions: $(git log --oneline | wc -l)" 计算修订数量。别名就是这样:

git rev-list HEAD --count

答案 2 :(得分:0)

更快:

 stat = "!echo Number of revisions: $(git rev-list --count HEAD)"

这可以避免日志必须提取有关每个提交的信息,让git对提交进行计数,并避免不得不使用字数。 rev-list也有一个整洁的版本范围功能:

  

另一种特殊符号是" ..."这对合并很有用。生成的提交集是两个操作数之间的对称差异。以下两个命令是等效的:

    $ git rev-list A B --not $(git merge-base --all A B)
    $ git rev-list A...B
  

rev-list是一个非常重要的Git命令,因为它提供了构建和遍历提交祖先图的能力。

这可用于更新别名,以便在分叉或合并时为特定分支提供修订。