我在relativePaths
中为git status
设置了~/.gitconfig
:
[status]
relativePaths = true
然后定义一个git
别名,如下所示:
st = !git status
当我调用git status
时,将应用relativePaths
设置,但是当我调用别名时,则不会。
如何使它正常工作?
注意:
使用别名,我实际上将git status
的结果传递给grep
,因此我需要使用!
shell语法。我将其排除在此示例之外,因为没有它的行为是相同的
答案 0 :(得分:1)
该设置可能已应用,您可以使用别名进行检查,例如:
[alias]
check-status-rel = config --global --get status.relativePaths
man git-config
设置说明的第二段中的alias.*
中说明了它不适用于您的原因:
alias.*
Command aliases for the git(1) command wrapper - e.g. after
defining "alias.last = cat-file commit HEAD", the invocation "git
last" is equivalent to "git cat-file commit HEAD". To avoid
confusion and troubles with script usage, aliases that hide
existing Git commands are ignored. Arguments are split by spaces,
the usual shell quoting and escaping is supported. A quote pair or
a backslash can be used to quote them.
If the alias expansion is prefixed with an exclamation point, it
will be treated as a shell command. For example, defining
"alias.new = !gitk --all --not ORIG_HEAD", the invocation "git new"
is equivalent to running the shell command "gitk --all --not
ORIG_HEAD". Note that shell commands will be executed from the
top-level directory of a repository, which may not necessarily be
the current directory. GIT_PREFIX is set as returned by running
git rev-parse --show-prefix from the original current directory.
See git-rev-parse(1).
简而言之,作为shell命令的Git别名始终在存储库的根目录中执行。
编辑:显然,您可以在运行命令之前简单地cd
进入目录:
[alias]
st = "!cd \"$GIT_PREFIX\" && git status"