2010-04-21 60 views
1

我做一個SVN合併爲一個分支,並在文件中的一個我看到這一點:SVN合併添加參數。 WTF?或者如何做大合併?

GetQueryReferenceData(int sessionId, Int32 sessionId) 

這意味着合併工具只是增加了一個參數不問任何問題。想象一下,如果它是對Substring(0)的調用,並且在另一個分支中它將是Substring(0,2)。這是完全不同的行爲,它如何才能決定選擇哪一個?它在編譯期間出現了好事。

問題是,它不會被標記爲衝突,並會自動合併。這是非常危險的行爲,如果你沒有爲每一行代碼進行單元測試的好處 - 你就會被搞砸了。

我在做什麼錯誤以及如何在沒有合併工具的情況下進行大合併默默地進行危險的更改?有沒有不是語言不可知的合併工具?

我正在使用龜SVN。

回答

1

所以,我不熟悉TortoiseSVN接口,但如果有衝突,標準的顛覆命令行實用程序會通知您有衝突,並允許您指定您想要的版本(「我的」,「他們的」)要使用還是希望手動解決衝突。但是,請注意,如果合併/更新涉及代碼的不同部分(以便不存在衝突),則會應用任何更改(無論是對簽名還是其他方式的更改)的預期行爲。因此,不要問爲什麼SVN合併了您所請求的更改,您應該問問爲什麼開發人員選擇更改變更集中的簽名(因爲SVN不負責變更集中所做的更改,僅限於對這些變更進行版本控制以及按要求在工作目錄中應用這些更改)。另外,如果您想阻止其他開發人員拖動shenanigans並提交對代碼的重大更改,則可以創建在提交之前或之後運行的各種「掛鉤」,以確保代碼編譯或執行任何自定義驗證您想要對代碼進行操作並拒絕相應的更改。

+0

代碼更改,簽名只是一個例子。當合並工具自動更改代碼時,它會讓我感到恐慌,因爲如果在不同的行上存在衝突的邏輯塊,它將不會被標記爲衝突並且會被合併。那就是問題所在。 – 2010-04-21 06:08:57

+0

@HeavyWave,那你爲什麼合併?也許你想運行「svn diff」在應用它們之前查看更改列表? – 2010-04-21 06:16:32

+0

如果我手動通過每一行,它會永遠需要我。也許有一種合併工具並不像Tortoise SVN那麼簡單愚蠢,也不是語言不可知的。 – 2010-04-21 06:18:16

1

不問可以意味着不同的事情。首先,你並沒有在本地修改該文件,也沒有在該功能的特定區域修改該文件,如果修改了同一行,只會發生衝突。沒有任何工具會讓你指出這種改變。或者可能是你使用了一個選項 - 接受......當然,你應該進行單元測試,以確保這種情況的安全。此外沒有版本控制工具會更好地處理這種情況,因爲沒有版本控制工具是語言相關的。可能是使用IDE集成並在那裏進行合併是一個好主意,可能是支持更好。當然在提交這樣的東西之前,你可以通過svn diff檢查合併(檢查修改)。