创建一个Git别名以追加到.gitignore文件中。

5

我正在使用 Windows(msysgit)上的 git 1.9.0,我有以下别名:

ignore = "!f() { echo $1 >> \"${GIT_PREFIX}.gitignore\"; }; f"

我这样使用它:

$ git ignore /Directory/Subdir/

这应该追加到当前目录下的.gitignore文件中,如果该文件不存在则创建它。但由于某些原因,我传入的路径被转换为绝对路径,我不确定为什么。下面是追加到.gitignore文件中的内容:
C:/Program Files (x86)/Git/Docs/Doxygen/html/

这是发生的任何原因吗?

编辑

如果我只是像这样使用命令:

$ git ignore Docs/Doxygen/html

它不会转换路径。因此,在参数传递到别名之前,看起来开头的斜杠在shell中引起了一些问题。将其置于引号中也无法解决。我很困惑!

编辑#2

尝试了这个:

$ git ignore \/Docs/Doxygen/html/
C:/Program Files (x86)/Git/Docs/Doxygen/html/

在斜杠前加反斜杠也不能解决这个问题。

第三次编辑

我认为这是msysgit的一个bug。我在cygwin中做了同样的事情,看看会发生什么:

$ git ignore /Docs/Doxygen/html/
/Docs/Doxygen/html/

不开心


当您将路径作为字符串传递时会发生什么?例如 git ignore '/Docs/Doxygen/html' - Sailesh
我认为使用MSYS时,您需要使用双斜杠//Docs/Doxygen/html。 - Zombo
你需要使用>而不是>>来进行追加而不是覆盖,对吗? - jimbrig
1
@jimbrig 你的理解是反过来了。>>是追加操作,而 > 是覆盖操作。 - void.pointer
笑,一定是累了。 - jimbrig
1个回答

1

msys的转换规则在POSIX路径转换页面有记录。

以 / 开头的参数会被转换到第一个 / 处

根据文档,您应该在路径前加上 //,以使仅第一个斜杠进行转换,并将正斜杠转换为反斜杠:

//foo\bar ➜ /foo/bar ➜ \ 转换为 /

请尝试,

$ git ignore "//Directory\Subdir\"

"并且,"
$ git ignore //Directory\\Subdir\\

在msysgit工具中处理posix路径参数确实是一个问题。 - patthoyts
谢谢,这个方法可行,但是每次使用反斜杠时都需要进行转义,例如://foo\\bar。然而,虽然这不是一个缺陷,但这是一个糟糕的特性,因为例如cygwin可以很好地工作。不必要的反斜杠和双斜杠非常令人困惑。出于这个原因,我可能会让cygwin与git一起工作,而不是直接使用msysgit。 - void.pointer
@RobertDailey 感谢您的详细解释,我已经更新了答案。 - mockinterface

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