使git的patch.exe与Windows行结束符相关

使git的patch.exe与Windows行结束符相关,windows,git,patch,Windows,Git,Patch,Git for Windows有一个patch.exe程序,可以将修补程序应用于文件。虽然效果很好,但它将所有修补文件的行尾从Windows CRLF更改为Unix LF。在为几个文件应用补丁后,我需要在我的文本编辑器中修复这个问题 UnxUtils中也有一个patch.exe,但这在今天看来已经不起作用了。它总是想要行政权,而我没有给它 当我们在Windows平台上时,是否有一些未记录的命令行选项来告诉Git的修补程序使用并保留Windows行结尾?UnxUtils patch.exe请求管理

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

UnxUtils中也有一个patch.exe,但这在今天看来已经不起作用了。它总是想要行政权,而我没有给它


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

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

<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,并且不会遇到cherry pick或git am或apply的问题,它们都使用补丁来应用更改。Git for Windows附带的补丁版本已经通过了大量测试,应该可以正常工作。可能您正在直接使用修补程序,或者使用“git apply”应用修补程序文件可能会更好?

您正在处理哪种类型的修补程序?如果它们对GitAM足够好,您可以使用-keep cr选项来代替,具体取决于您的git设置。但根据我的经验,关于什么是有效的,什么是无效的,这要严格得多。git-am看起来在git存储库之外不起作用。这就是我需要应用补丁的地方。你是对的,那样的话,它就不起作用了。你从来没有说过你在使用Git存储库,因此我的问题不好,因为我没有仔细阅读这个问题,但是编辑这个问题以防止其他人犯同样的错误可能是值得的。我已经从我在主分支上所做的Git提交中创建了一个补丁。我的编辑说,那个文件有未知的行尾,我想它们只是不一致。我将autocrlf设置为false,因为我不希望Git对我的文件做任何事情。我用CRLF编辑它们,它们应该像那样存储。我有一种非常糟糕的感觉,我的文件被无形地转换成了其他东西。二进制文件或UNIX shell脚本可能会中断。此修补程序文件已应用于不使用版本控制的其他开发人员的非Git目录。清单文件无效。Windows shield overlay图标从patch.exe中消失,但运行它仍会请求管理员访问权限无论如何,UnxUtil的patch.exe的输出版本与Git的相同,所以这可能不会有帮助。