2014-10-07 62 views
3

摘要:通过git别名运行的命令的当前工作目录是错误的。git别名在错误的目录中操作

证明这一点最简单的方法是有一个git的别名,就像这样:

[alias] 
    pwd = !pwd 

所以git pwd只是运行bash命令pwd。人们会认为这两个命令的输出是相同的。现在,让我们尝试了这一点几次:

$ cd ~ 
$ pwd && git pwd 
/home/limpchimp 
/home/limpchimp # great! 
$ mkdir foo && cd foo && git init 
Initialized empty Git repository in /home/limpchimp/foo/.git/ 
$ pwd && git pwd 
/home/limpchimp/foo 
/home/limpchimp/foo # great! 
$ mkdir bar && cd bar 
$ pwd && git pwd 
/home/limpchimp/foo/bar 
/home/limpchimp/foo # uuhhhhhhhh...? 

看来,Git是改变当前的工作目录是具有.git文件夹中的第一个父目录(如果存在的话)。这是非常有问题的;它搞砸了我编写的某些脚本,这些脚本是为了在特定目录中运行,并且使我无法将某些事情用作git别名。有没有解决的办法?我该如何解决它?

+1

[如git的别名给出不同的结果为什么会运行命令?(HTTP的可能的复制为退货://计算器.COM /问题/ 8832799 /为什么 - 不运行命令-AS-git的别名给-不同-结果) – 2016-04-07 12:53:41

回答

6

这是在文档中使用,如果需要的解决方法沿着明确规定由设计。

Git Config Alias

注意,外壳命令将从存储库,它可能不一定是当前目录的顶级目录 被执行。 GIT_PREFIX设置运行git REV-解析 - 显示,前缀从原来的当前目录

2

这是一个(误?)功能,但你可以解决它与$GIT_PREFIXthis other stackoverflow question and answer指出:

#! /bin/sh 
# script to do stuff in a git dir 
# since we're sometimes run from a git alias we need 
# to cd back into $GIT_PREFIX if it's set 
[ "$GIT_PREFIX" != "" ] && cd "$GIT_PREFIX" 
... rest of script ...