gitconfig中的git命令别名:需要转义哪些字符?

4

这个git命令在git bash中表现良好。

$ git log --author="\(david\)\|\(peter\)" --format="%h %<(22)%an %s"

但是当我将其添加到我的gitconfig文件中时:

$ grep -E -e "alias|lolaf" .gitconfig
[alias]
        lolaf   = log --author="(david)|(peter)" --format="%h %<(22)%an %s"
        # lolaf = log --author="\\(david\\)\\|\\(peter\\)" --pretty=format:'%h %\\<(22)%an %s'
        # lolaf = log --author="\\(david\\)\\|\\(peter\\)" --format="%h %\\<(22)%an %s"
        # lolaf = log --author="\\(david\\)\\|\\(peter\\)" --format="%h %<(22)%an %s"
        # lolaf = log --author="\(david\)\|\(peter\)" --format="%h %<(22)%an %s"
        # lolaf = log --author="(david)|(peter)" --pretty-format="%h %<(22)%an %s"

我遇到了这个错误。
$ git lolaf -- .
fatal: bad revision '%<(22)%an'

我认为问题是由于特殊字符的错误转义引起的。正如您所看到的,我尝试了几种不同的变体,但它们也没有起作用。

有什么建议吗?


如果它试图将'%<(22)%an'解析为修订版本,我猜引号周围的--format是有问题的。(即我认为它试图将'%<(22)%an'作为log的参数传递而不是将其保留为格式字符串的一部分) - 0x5453
@0x5453 -- 谢谢!我已经找到了正确的组合。请看下面的答案。 - leeyuiwah
1个回答

4

(这里提供我自己的答案,希望能对某些人有所帮助。)

经过许多尝试,我终于找到了正确的组合。

  1. 使用单引号来转义 <
  2. 使用单引号和双反斜杠 \\ 来替换在 git bash 中使用的单个反斜杠

因此,

lolaf   = log --author='\\(david\\)\\|\\(peter\\)' --format='%h %<(22)%an %s'

第一个有效,其他都是我试验的结果:

$ grep -E -e "alias|lolaf|worked" .gitconfig
[alias]
        lolaf   = log --author='\\(david\\)\\|\\(peter\\)' --format='%h %<(22)%an %s'
        # this worked
        # lolaf = log --author='\\(david\\)\\|\\(peter\\)'
        # lolaf = log --author='\\(david\\)|\\(peter\\)'
        # lolaf = log --author="\\(david\\)|\\(peter\\)"
        # lolaf = log --author="\\(david\\)\\|\\(peter\\)"
        # lolaf = log --author="david\\|peter" --format='%h %<(22)%an %s'
        # lolaf = log --author="\\(david\\)" --format='%h %<(22)%an %s'
        # this worked
        # lolaf = log --format='%h %<(22)%an %s'
        # lolaf = log --author="\\(david\\)\\|\\(peter\\)" --format='%h %<(22)%an %s'
        # lolaf = log --author="\(david\)\|\(peter\)" --format='%h %<(22)%an %s'
        # lolaf = log --author='(david)|(peter)' --format='%h %<(22)%an %s'
        # lolaf = log --author="(david)|(peter)" --format='%h %<(22)%an %s'
        # lolaf = log --author="(david)|(peter)" --format="%h %<(22)%an %s"
        # lolaf = log --author="\\(david\\)\\|\\(peter\\)" --pretty=format:'%h %\\<(22)%an %s'
        # lolaf = log --author="\\(david\\)\\|\\(peter\\)" --format="%h %\\<(22)%an %s"
        # lolaf = log --author="\\(david\\)\\|\\(peter\\)" --format="%h %<(22)%an %s"
        # lolaf = log --author="\(david\)\|\(peter\)" --format="%h %<(22)%an %s"
        # lolaf = log --author="(david)|(peter)" --pretty-format="%h %<(22)%an %s"

1
谢谢,我一直出现错误是因为我的别名命令中有方括号,使用双反斜杠转义解决了这个问题。 - qwertzguy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接