考慮找到分叉的兩個項目中發生了變化的任務。遞歸目錄 - 差異接受外部差異
diff -r
讓我閉嘴:它能夠找出每個目標文件夾中缺少哪些文件,並指出通過顯示差異而更改的文件。
我想使用自定義比較實用程序。我想不必在我的diff實用程序中實現遞歸目錄行走邏輯。
所以,我基本上只是想要一個程序,做什麼diff -r
做的,但其中並沒有實際進行並運行差異。
這樣的事情是否存在?
考慮找到分叉的兩個項目中發生了變化的任務。遞歸目錄 - 差異接受外部差異
diff -r
讓我閉嘴:它能夠找出每個目標文件夾中缺少哪些文件,並指出通過顯示差異而更改的文件。
我想使用自定義比較實用程序。我想不必在我的diff實用程序中實現遞歸目錄行走邏輯。
所以,我基本上只是想要一個程序,做什麼diff -r
做的,但其中並沒有實際進行並運行差異。
這樣的事情是否存在?
我覺得這是更優雅:
diff -rq dir1 dir2 | sed -ne 's/^Files \(.*\) and \(.*\) differ$/\1\n\2/p' | xargs -n 2 sift
主要的竅門是用-q
標誌,這將打印在簡短格式的差異,例如:
Files dir1/x and dir2/x differ
Only in dir1: path/to/file
Only in dir2: path/to/another
再怎麼你解析輸出是你品味的問題。
最後,要正確處理空格的文件名:
diff -rq dir1 dir2 | sed -ne 's/^Files \(.*\) and \(.*\) differ$/sift "\1" "\2"/p' | sh
它可能是有意義的一個函數把這個包:
xdiff() {
diff=$1; shift
dir1=$1; shift
dir2=$1; shift
diff -rq $dir1 $dir2 | sed -ne 's/^Files \(.*\) and \(.*\) differ$/'$diff' "\1" "\2"/p' | sh
}
所以,你可以這樣調用:
xdiff sift dir1 dir2
不錯,現在'差異'的差異不會被浪費。也是一個更好的正則表達式篩網,以減少錯誤肯定的錯誤匹配 –
什麼是'p'標誌sed's //? –
這不是一個標誌,它是一個命令:「打印」。如果進行替換,則會打印該行。由於'sed -ne'中的'-n',所以默認情況下不會打印任何內容。對於與模式不匹配的行,將不會進行替換,並且不會被打印。 – janos
我覺得diff -r
的輸出已經足夠結構足夠讓我「聰明」了。這是它的要點。
diff -r proj1/src proj2/src | grep 'diff -r' | cut -d ' ' -f 3,4 | xargs -n 2 sift
其中sift
是到處跑,diff
的diff的輸出圓我的小基於命令行的字符-DIFF UTIL。
,並使用diff (GNU diffutils) 2.8.1
我打開更優雅的解決方案,以及!
編輯:謝謝@janos,-q
選項使它非常優化!
最後要提的一點是,通過在Mac命令行中輸入opendiff
程序(指定所需目錄中的相應文件作爲目標,這當然已經在Git倉庫中)對嗎?)做手動合併很好,很快。
事實上,設置opendiff
供Git在需要人工合併時使用可能是一條可行的路。
這只是我還沒有遇到過很多合併衝突的情況在同一個代碼倉庫中,它主要是在分叉倉庫(並且爲不同的項目包含共享代碼的單獨倉庫),我需要做這種合併手動將我的「主要」項目與戰壕中所做的更改保持同步。
你問,並回答這個戴帽子,沒有你;-) – janos
哈,不,我做了我典型的「輸出問題,並得出答案」的例程。 –
你的問題不太清楚,但是你在尋找'diff'的'-q'選項嗎? – devnull
@devnull事實證明,喲! –