gitconfig中的git命令别名:要转义的字符

时间:2018-01-29 16:54:06

标签: git

这个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'

我认为问题是由于特殊字符的错误转义造成的。正如你所看到的,我尝试了一些不同的变体,但它们也没有用。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

(我在这里提供我自己的答案。就这种情况而言,这可能有助于某人。)

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

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

    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"