【问题标题】:Cygwin + git permission problems when trying to create a commit message尝试创建提交消息时出现 Cygwin + git 权限问题
【发布时间】:2008-11-01 21:32:53
【问题描述】:

当我尝试从 Cygwin 向我的 git 存储库 (git commit) 提交第一个修订版时,我在 gvim 中收到一个错误,上面写着“无法打开 "foo\.git\COMMIT_EDITMSG" 的交换文件 [新目录]. 我认为这可能是某种权限问题,但我已经尝试从文件夹中删除只读标志,以及递归调整所有者(使用 windows 属性选项卡,而不是 Cygwin 下的 chown)成为我正在运行的帐户,没有任何运气。如果我将默认编辑器更改为记事本,我会得到“系统找不到指定的文件”,即使文件 (COMMIT_EDITMSG) 确实存在,甚至包含:

# Please enter the commit message for your changes.
# (Comment lines starting with '#' will not be included)
# etc...

如何进一步解决此问题?

【问题讨论】:

    标签: git permissions cygwin vim


    【解决方案1】:

    无法打开“foo\.git\COMMIT_EDITMSG”[新目录]的交换文件。

    看起来git commit 将文件路径作为 Windows 路径而不是 POSIX 路径传递。注意消息中的\

    gvim 将尝试打开不存在的“foo.gitCOMMIT_EDITMSG”。

    我不使用git,但我想它使用类似于SVN_EDITOR 的环境变量。您可能需要使用一个小脚本来包装编辑会话,该脚本使用 cygpath 将文件路径从 Windows 更改为 Posix 分隔符。

    #!/bin/bash
    gvim "$(cygpath --unix "${1}")"
    

    Caveat Emptor,未经测试。

    【讨论】:

    • 尝试 Ken G 的脚本对我没有帮助。我可以在这样的脚本中看到该值,但是只需手动键入 gvim /cygdrive/d/Projects/foo/.git/COMMIT_EDITMSG 即可从 gvim 产生相同的结果。我现在注意到的另一个特点是 gvim 的标题栏显示 COMMIT_EDITMSG (d:\cygdrive\d\Projects\foo\.git) 这显然是一个无效路径(我的 D 驱动器上没有实际的“cygdrive”文件夹。我得到一个使用cygwin内置的vim程序时结果类似,所以我认为这不是gvim问题,而是cygwin本身的一些问题。
    • cygdrive 是一个 cygwin 工件,允许访问“字母”驱动器而无需安装它们。我认为这不是问题。
    • 通读“cygpath”的选项后,我将您的脚本更改为 gvim "$(cygpath --windows "${1}")",这似乎更好但仍然不是 100%,因为我现在得到:“无法打开“D:\Projects\foo\.git\COMMIT_EDITMSG^M”[新文件]的交换文件”。为什么最后会出现“^M”?
    • 在 '^M' 上,我猜该文件是用 Windows 行尾 (cr/lf) 而不是 unix 行尾 (lf) 编辑的,您使用的是 gvim 的 cygwin 发行版还是独立安装的版本?
    • 您使用的是 git commit '-template=' 选项还是 commit.template 配置变量?
    【解决方案2】:

    您在 cygwin (windows native) 中使用 mingw 或 msysgit git。这在使用 cygwin 编辑器 (gvim) 时不起作用。 \ 不是 POSIX 中的路径分隔符,而是转义下一个字符。

    您需要安装 cygwin git 包或使用适当的 mingw/msysgit 编辑器。

    也可能是 mingw git.exe 位于 /usr/bin 之前的 PATH 中。然后修复你的 PATH。

    此类问题通常通过http://cygwin.com/problems.html 处理,尤其是。 cygcheck -s -v -r > cygcheck.out 在邮件列表中。然后我们可以看到更多。

    【讨论】:

      【解决方案3】:

      我第一次遇到同样的问题,但我发现这是正常的。只有我不记得如何处理 Vim。我在该链接中找到了解决方案:http://vim.runpaint.org/basics/quitting-vim/。我使用了 vim 命令 :x 来保存我的评论并提交修改。 您可以通过以下链接了解 Git 和 Vim 之间的这种集成:http://vim.runpaint.org/extending/integrating-vim-with-git/

      【讨论】:

        【解决方案4】:

        对于 `cygpath',尝试:

        cygdrive -a -m COMMIT_EDITMSG

        您可能需要以下样式的路径:

        D:/path/to/your/working_directory/.git/COMMIT_EDITMSG

        【讨论】:

          猜你喜欢
          • 2020-06-22
          • 1970-01-01
          • 2018-06-28
          • 1970-01-01
          • 1970-01-01
          • 2016-11-24
          • 1970-01-01
          • 2018-02-13
          • 2017-03-30
          相关资源
          最近更新 更多