2009-10-13 67 views
3

幾天前,我收到一封電子郵件,內容是某人在構建我在Google Code上的Delphi項目時遇到的問題。項目文件和其中一個DFM文件在更新了我檢查過的一些更改之後被徹底清除了。我們反覆討論了一下,並將其追溯到他所說的SVN投入額外的東西。他刪除了這些文件並再次運行了更新,它工作正常。什麼能導致SVN更新不正確地合併?

我以前從來沒有看到這個問題,我是不是能複製或在我的最終驗證它的任何。沒有與其他用戶發生任何更新衝突,因爲我是唯一具有對存儲庫的寫入訪問權限的衝突。所以我想知道可能會造成這種情況。這是SVN的一個已知問題嗎?有沒有辦法阻止它發生?

回答

5

如果DFM文件被顛覆視爲文本,假設用戶有局部的變化,它會嘗試合併。如果存在衝突且Subversion無法解決它們,它將添加額外的細節來幫助您手動解決衝突,您將看到像<<<<<<< .mine這樣的文本,這當然會在Delphi中出現。也可能是Subversion自動進行合併,這並沒有衝突,但導致了一個損壞的DFM文件。

你之所以沒有看到這個問題可能是因爲你沒有本地更改,所以沒有合併是必要的。刪除或還原文件會將工作副本重置爲BASE,因此任何更新都不需要進行合併。

一個解決辦法:如果你有這應該被Subversion合併文本文件,然後將svn:mime-type到適當的非文本值,它將把它作爲二進制,並且不會嘗試合併。您將被要求手動解決問題。順便說一句,如果你需要在Subversion中存儲敏感文本文件,並且不希望差異顯示內容,這也是一個不錯的提示。

+0

有趣的把戲。但之後我會失去使用TortoiseSVN在檢查新批代碼之前檢查我的更改的能力。 – 2009-10-13 04:13:36

+0

如果合併,那麼很容易破壞DFM文件,更改「不重要」的細節可能會導致組件順序發生更改。天真的合併可以完全消除它。 – 2009-10-13 04:27:46

+0

@Mason - 你試過了嗎? TortoiseSVN - > Diff會顯示更改(它對我來說確實如此,但我已將它配置爲使用Beyond Compare)SVN不會顯示差異(例如在提交後的電子郵件中),而是會報告「二進制文件不同」 。我用Delphi編碼已經有好幾年了,但我猜它與.NET設計器文件類似。就個人而言,我不打擾爲這類文件設置MIME類型(我只是提出了一種可能的解決方案),因爲如果在更新到自動生成和維護的文件後看到「合併」狀態,這是一個非常大的線索可能會出錯:) – si618 2009-10-13 05:49:19

3

假設他或他的本地系統設法破壞這兩個文件。

然後假設他更新並發現事情不起作用。經過一些指責之後,他用ahem,本地mods刪除了這些文件,運行了更新,並且gee ...正確的文件!

Entia non sunt multiplicanda praeter necessitatem

雖然它始終是可能的一個奇怪的語法錯誤是一個編譯器錯誤和損壞的文件是一個svn的錯誤,通常有較爲平淡的原因,我們有它William of Ockham's權威的更簡單的解釋通常是正確的。

+0

好點。除了項目文件和DFM(表單描述)文件由IDE管理。它們以文本格式存儲,但您通常不會像正常的源代碼那樣手工編輯它們。我從來沒有聽說過IDE會損壞DFM文件,並且損壞的項目文件確實偶爾會發生,但不是經常發生。所以我覺得這個解釋不太可能。 – 2009-10-13 00:26:00

+0

我完全同意你的意見,但現在我們必須考慮到*發表偏倚*,又名*報告偏倚*。當然,這不太可能,但同樣的解釋也是如此。我們正在比較不太可能發生的情況與其他不太可能發生的情況,並且鑑於只會報告腐敗現象,腐敗很少的事實可能是一個危險的因素。 – DigitalRoss 2009-10-13 00:38:09

+1

我同意他最有可能在本地消磨它。 「由svn添加的額外東西」很可能是svn在識別本地衝突時將添加到工作副本中版本化文件的衝突信息。解決衝突會使「額外的東西」消失。或者實際上,簡單地刪除它們並再次嘗試。 ;-) – 2009-10-13 00:40:55

1

「munged」文件是否包含「我的」或「他們的」文本?

如果是的話,他可能打亂了他的解決衝突,並最終提交了他們的還是我無意中修訂版。

或者它完全有可能認爲它可以自動合併更改,因爲它們位於文件的「不相關」部分,但對於SVN(或任何天真的自動合併過程)「不相關」僅僅意味着沒有/沒有重疊的文件。

「天真」自動合併一無所知的任何結構內部的文件,這樣可以很容易地合併,它認爲是無關的時候,其實是改變對對方不利的副作用的變化。不知道正是性質的「改寫(munging)」很難肯定地說,雖然在這種情況下,提及「額外的東西」,這表明「地雷」或「他們」的修訂無意提審似乎最有可能。

0

哪個Delphi版本?較老的Delphi版本有錯誤,其中有時文本DFM文件變成二進制文件。

文件突然變成二進制殺死任何源代碼管理系統。

- jeroen

+0

2010,所以這不是一個問題。 – 2009-10-13 15:56:20

+0

它仍然可以是:如果SVN不支持unicode正確(或SVN客戶端之一不),那麼你會遇到麻煩 – 2009-10-13 16:24:38

0

您是否在多個平臺上工作?你是否正在使用假設Unix lineendings的編輯器(如一些cygwin工具?)

如果是,請檢查您是否正確配置了eol樣式屬性。

0

我是執行SVN更新和SVN被打亂了DFM文件與< < < < < < < < .mine,這是我從來沒有見過的。我必須在Delphi允許我打開項目之前手動刪除這些修改。

相關問題