【问题标题】:Creating a git alias to append to .gitignore创建一个 git 别名以附加到 .gitignore
【发布时间】:2014-02-21 21:48:58
【问题描述】:

我在 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/

正斜杠之前的反斜杠也不能解决问题。

编辑#3

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

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

:-(

【问题讨论】:

  • 将路径作为字符串传递时会发生什么?喜欢git ignore '/Docs/Doxygen/html'
  • 我认为使用 MSYS 你需要使用双正斜杠 //Docs/Doxygen/html

标签: git bash msysgit


【解决方案1】:

msys 的转换规则记录在POSIX path conversion 页面上。

带有前导 / 的参数被转换为第一个 /

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

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

试试,

$ git ignore "//Directory\Subdir\"

还有,

$ git ignore //Directory\\Subdir\\

【讨论】:

  • 在msysgit实用程序中处理参数中的posix路径确实是一个问题。
  • 感谢这项工作,尽管它使用的任何反斜杠都需要像这样转义://foo\\bar。然而,虽然这不是一个缺陷,但它是一个糟糕的功能,因为例如 cygwin 工作得很好。不必要的反斜杠和双正斜杠令人难以置信的混乱。出于这个原因,我可能只是让 cygwin 与 git 一起工作,而不是直接使用 msysgit。
  • @RobertDailey 感谢罗伯特的详细说明。我已经更新了答案。
猜你喜欢
  • 2012-06-18
  • 2014-08-26
  • 2020-01-26
  • 2020-10-21
  • 2013-08-10
  • 2021-12-30
  • 1970-01-01
  • 2013-07-06
  • 1970-01-01
相关资源
最近更新 更多