【问题标题】:Make git's patch.exe regard Windows line endings使 git 的 patch.exe 考虑 Windows 行尾
【发布时间】:2014-10-02 10:41:51
【问题描述】:

Git for Windows 有一个 patch.exe 程序,可以将补丁应用于文件。虽然效果很好,但它将所有修补文件的行尾从 Windows CRLF 更改为 Unix LF。在为多个文件应用补丁后,我需要在我的文本编辑器中修复它。

还有一个来自 UnxUtils 的 patch.exe,但现在它似乎不再起作用了。它总是想要我没有授予它的管理权限。

当我们在 Windows 平台上时,是否有一些未记录的命令行选项告诉 Git 的补丁使用并保留 Windows 行结尾?

【问题讨论】:

  • 你在处理什么类型的补丁?如果它们对git am 足够好,您可以改用它(可能使用--keep-cr 选项,具体取决于您的Git 设置)。但根据我的经验,这对于什么是有效的什么是无效的要严格得多。
  • git am 看起来不能在 git 存储库之外工作。这就是我需要应用补丁的地方。
  • 你是对的,在这种情况下,它是行不通的。您实际上从未说过您正在使用 Git 存储库,所以我没有足够仔细地阅读这个问题,但仍然值得编辑这个问题以防止其他人犯同样的错误。

标签: windows git patch


【解决方案1】:

UnxUtils patch.exe 要求管理员权限的原因是它的名称。 Microsoft 选择自动假定名为 Setup 或 Patch 的程序或在描述资源中包含这些词的程序在运行时应该需要管理员权限。要禁用它,您需要一个指定所需权限的清单。您可以在与您的 patch.exe 文件相同的目录中添加一个名为“patch.exe.manifest”的清单文件来定义它。或者您实际上可以将其嵌入为清单资源。我的清单如下:

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="patch.exe" type="win32"></assemblyIdentity>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
        </requestedPrivileges>
       </security>
  </trustInfo>
</assembly>

这并没有真正说明您在 Windows 上应用补丁时遇到问题的原因。我在我的系统上使用 core.autocrlf = true 并且不会遇到樱桃挑选或 git am 的问题或应用所有使用补丁来应用更改。 Git for Windows 附带的补丁版本已经通过了许多测试,应该可以正常工作。可能您直接使用补丁,也许使用“git apply”来应用补丁文件可能会更好?

【讨论】:

  • 我从我在主分支上所做的一个 Git 提交创建了一个补丁。该文件的行尾未知(我的编辑说,我猜它们只是不一致)。我设置了 autocrlf = false 因为我不希望 Git 对我的文件做任何事情。我用 CRLF 编辑它们,它们应该完全像那样存储。我对我的文件被无形地转换为其他东西有一种非常不好的感觉。二进制文件或 UNIX shell 脚本可能会损坏。此补丁文件已应用于不使用版本控制的其他开发人员的非 Git 目录。
  • 清单文件无效。 Windows 盾牌覆盖图标从 patch.exe 中消失,但运行它仍需要管理员访问权限。 – 无论如何,UnxUtil 的 patch.exe 与 Git 的 --version 输出相同,所以这可能无济于事。
猜你喜欢
  • 2016-04-09
  • 2013-09-23
  • 1970-01-01
  • 2018-05-03
  • 2013-08-14
  • 2018-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多