2014-10-02 28 views
0

Git for Windows有一個patch.exe程序,可以將修補程序應用於文件。雖然效果很好,但它會將所有已修補的文件的行尾從Windows CRLF更改爲Unix LF。我需要在我的文本編輯器中爲多個文件應用補丁後修復此問題。將git的patch.exe視爲Windows行結尾

還有一個來自UnxUtils的patch.exe,但是今天似乎不再有效。它總是希望我沒有給予它的管理權利。

是否有一些未公開的命令行選項告訴Git的補丁在Windows平臺上使用並保持Windows行結束符?

+0

你正在處理什麼類型的補丁?如果它們足夠用於'git am',那麼您可以使用它(可能使用'--keep-cr'選項,具體取決於您的Git設置)。但根據我的經驗,這對於什麼是有效的和什麼不是很嚴格。 – hvd 2014-10-02 11:04:14

+0

git am看起來不像在git倉庫之外工作。這就是我需要應用該補丁的地方。 – ygoe 2014-10-02 13:06:04

+0

你說得對,在這種情況下,這是行不通的。你從來沒有真正說過你正在使用Git倉庫,所以我不適合不仔細閱讀這個問題,但它可能是值得編輯的問題,以防止其他人犯同樣的錯誤。 – hvd 2014-10-02 13:16:45

回答

0

UnxUtils patch.exe要求管理員權限的原因是由於其名稱。微軟選擇自動承擔稱爲「安裝」或「修補程序」的程序,或者在描述資源中使用這些字詞時,應該要求管理員權限。要禁用該功能,您需要一個指定所需權限的清單。您可以在與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'來應用補丁文件可能會更好?

+0

我從我的一個Git提交中創建了一個補丁,這是我在master分支上執行的補丁。該文件具有未知的行結尾(我的編輯說,我猜他們只是不一致)。我設置了autocrlf = false,因爲我不希望Git對我的文件執行任何操作。我用CRLF編輯它們,它們應該完全像這樣存儲。我對我的文件被無形地轉換成別的東西感覺很不好。二進制文件或UNIX shell腳本可能會中斷。此修補程序文件已應用於不使用版本控制的其他開發人員的非Git目錄。 – ygoe 2014-10-02 12:36:38

+0

清單文件不起作用。 Windows護盾疊加層圖標從patch.exe中消失,但運行它仍然要求管理員訪問。 - 無論如何,UnxUtil的patch.exe與Git的輸出相同,因此可能無濟於事。 – ygoe 2014-10-02 12:40:36

相關問題