簡體   English   中英

如何使用diff創建並將.patch文件正確應用到單個.cpp文件?

[英]How to create and apply properly .patch file to a single .cpp file using diff?

我正在嘗試使用git diff.patch文件應用於單個.cpp文件。

這些是我的文件: old.cppnew.cppfix.patch

old.cpp是原始未修改的源代碼,new.cpp是修改源和fix.patch是我想要的,當應用於old.cpp應該適用從new.cpp的更改它來創建補丁。 old.cppnew.cpp都使用Windows(CR LF)行結尾,兩個文件都是918 KB大,在源中只修改了一行。

我通過將兩個文件old.cppnew.cpp放在同一個文件夾中並使用Git Bash提示符來創建補丁:

git diff -u old.cpp new.cpp > fix.patch

fix.patch文件成功出現,但是當我實際測試它並通過鍵入以下命令將其應用於帶有Git Bashold.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 SP2Git 1.7.6Git Extensions 2.24Microsoft Visual C ++ 2010

好的,我終於解決了這個問題並學到了我的教訓。 :)

使用Git Bash命令提示符創建補丁:

git diff -u old.cpp new.cpp > fix.patch

然后確保old.cppfix.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM