注意:此問題最初是在GitHub時代之前提出的。何時使用視覺差異與統一差異補丁文件?
我接管了一些自2002年以來還沒有開發出來的代碼,並且通過隨時間推移發送的補丁來查看。所有這些補丁格式都是unified diff格式,這顯然是提交代碼改進的事實標準。這裏是其中一個補丁看起來像:
@@ -365,7 +385,10 @@
return() unless defined $op_sym;
$a_or_b = $op->[OPCODE] ne "+" ? 0 : 1 unless defined $a_or_b;
- return ($op_sym, $seqs->[$a_or_b][$op->[$a_or_b]]);
+ my $line = $seqs->[$a_or_b][$op->[$a_or_b]];
+ my @ret = ($op_sym, $line);
+ return @ret;
}
究竟如何,我應該找出這種變化背景下呢?該補丁不告訴我它影響的子程序。我必須打開原始文件,轉到第365行,然後用修補程序文件中的'+'行在思路上替換那些與修補程序文件中的' - '行對應的現有行。 WTF?
要保留我的理智,我結束了創建原始file
的副本file.orig
,在file
運行patch
,然後使用上file.orig
和file
可視化差異工具,真正看到了什麼補丁在做什麼。
問題是:什麼時候發送整個文件是有意義的,發送補丁文件有什麼意義?
接受修補程序的大多數開發人員是否可以立即發現修補程序在其代碼中提到的內容?如果它刪除文件中經常出現的一行,該怎麼辦?他們會知道補丁在哪個子例程中發生的影響?
也許補丁在帶寬非常寶貴的那一天變得有意義,但是現在的帶寬使得這種擔憂已經過時。我同意補丁文件適用於簡單的更改,如錯字修正。
但是,我還沒有看到開發人員要求通過整個文件提供重要的代碼貢獻(甚至在GitHub或谷歌代碼出現之前)。大家都說「補丁歡迎」,並期待統一差異。他們不是最終在一個可視化比較工具中並排比較文件嗎?那麼character-level intra-line differences?補丁文件不顯示這些。
你將遠離我認爲的少數派,但你仍應該重寫這個來提出更多的技術問題 - 「爲什麼使用統一差異?」對於初學者來說可能是一個更好的標題 – annakata 2009-05-05 08:42:18
我對整個源代碼控制世界相當陌生,所以我不能真正權衡利弊(因此評論而不是答案),但我絕對偏愛視覺。 TortoiseSVN的diff工具和WinMerge的組合迄今爲止已經爲我提供了很好的服務。我是一個Windows的傢伙。我喜歡閃亮的東西。 – 2009-05-05 08:42:58