[英]How to create and apply properly .patch file to a single .cpp file using diff?
我正在嘗試使用git diff將.patch文件應用於單個.cpp文件。
這些是我的文件: old.cpp , new.cpp和fix.patch 。
old.cpp是原始未修改的源代碼,new.cpp是修改源和fix.patch是我想要的,當應用於old.cpp應該適用從new.cpp的更改它來創建補丁。 old.cpp和new.cpp都使用Windows(CR LF)行結尾,兩個文件都是918 KB大,在源中只修改了一行。
我通過將兩個文件old.cpp和new.cpp放在同一個文件夾中並使用Git Bash提示符來創建補丁:
git diff -u old.cpp new.cpp > fix.patch
fix.patch文件成功出現,但是當我實際測試它並通過鍵入以下命令將其應用於帶有Git Bash的old.cpp :
patch old.cpp fix.patch
補丁正在成功應用,但old.cpp的大小從918 KB 減少到894 KB 。 經過對kdiff3的一些研究后,我發現我新創建的fix.patch文件是使用Unix(LF)行結尾,在將它應用到old.cpp之后 ,修補的old.cpp也采用了Unix(LF)行結尾。 我想這就是為什么old.cpp的文件大小也減少的原因。
我的問題是我應該在git中使用什么命令 ,或者我還需要做什么,以便我新創建的fix.patch文件保留在Windows(CR LF)行結尾,並在將修補程序應用於old.cpp之后新修補的old.cpp文件與Windows(CR LF)行結尾也是如此,文件大小不會大幅減少。 我在這里收到一個建議,使用git apply
而不是patch
但是我不知道在git apply
之后輸入到底是什么,所以它按我想要的方式工作。 :(
我使用的是Windows XP SP2 , Git 1.7.6 , Git Extensions 2.24和Microsoft Visual C ++ 2010 。
好的,我終於解決了這個問題並學到了我的教訓。 :)
使用Git Bash命令提示符創建補丁:
git diff -u old.cpp new.cpp > fix.patch
然后確保old.cpp和fix.patch位於fix.patch標題所在的同一文件夾中:
diff --git a/old.cpp b/old.cpp
index 04784e1..da68766 100644
--- a/old.cpp
+++ b/oldcpp
在Git Bash提示符后輸入:
git apply fix.patch
瞧! 沒有線路混亂,錯誤或問題。 我希望有一天能幫助那些偶然發現同樣事情的人感謝大家快速而深刻的回復,他們幫助我學到了今天的新知識。 :)
嘗試使用'git apply'而不是'patch'來應用補丁。 git apply將調用patch但應遵守任何其他git指令,這些指令可能會在這里排序你的crlf問題。 它還接受補丁選項(例如'git apply -p1'用於修剪路徑元素)。 我經常也使用'git apply'將補丁從git應用到CVS樹。 'git apply'不要求目標是git存儲庫。
使用--include
標志。
git apply patch.patch --include=new.cpp
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.