如何在git别名中获得文字单引号(这是一个bash函数)?

时间:2015-10-01 19:29:53

标签: git bash

我正在开发一个代码库,它有许多不同的git repos。因此,我正在使用子模块尝试将所有这些子模块组织成一个源代码库。它看起来像这样:

source
  |- ember
  |- rails

我现在正试图制作一个git别名来检查所有存储库中的相同分支名称。如果我手动执行此操作,命令在命令行中显示如下:

git checkout -b <branch-name>; git submodule foreach 'git checkout -b <branch-name>'

我希望能够输入:

git sco -b <branch-name>

并将sco扩展为完整命令。到目前为止,我已经提出了这个问题:

<.gitconfig>
...
[alias]
  sco = "!f() {\
    if [ $# -eq 0 ];then\
      branch=$(git rev-parse --abbrev-ref HEAD);\
      git submodule foreach 'git checkout '"$branch"'';\
    else\
      git checkout $@;\
      git submodule foreach 'git checkout '"$@"'';\
    fi\
    }; f"

请注意,如果没有传递给sco的参数,它将检出所有子模块中的当前分支。那个案子按预期工作。参数的情况并非如此。我认为(tm)原因是单引号被吞噬了。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

感谢@EtanReisner我明白了。关键的见解是,别名中的单引号被bash解释为单引号字符串。这是最后的别名:

  sco = "!f() {\
    if [ $# -eq 0 ];then\
      branch=$(git rev-parse --abbrev-ref HEAD);\
      git submodule foreach '"'"git checkout "$branch'"';\
    else\
      git checkout "$@";\
      git submodule foreach '"'"git checkout "$@'"';\
    fi\
    }; f"

像魅力一样。