2009-06-05 74 views
3

我們需要將.dlls保存在我們的存儲庫中。我們的團隊經常遇到.dll文件上的SVN衝突,這是非常煩人的。由於某些原因,即使.dlls的mime類型設置爲application/octet-stream,svn仍然試圖合併它們。如何防止Subversion合併二進制文件?

從我發現的here(我發誓以前的方式)它說,只要mime類型不是文本,svn不會嘗試合併它們。但看着我的DLL告訴我,svn也在合併我的應用程序/八位字節流文件(至少我假設SVN正在合併,不知道爲什麼沒有合併會出現衝突)。爲什麼heck會svn嘗試合併二進制文件?這只是愚蠢的...

任何人都遇到過這個問題?

我的目標是找到一個解決方案,它允許二進制文件成爲存儲庫的一部分,但永遠不會發生衝突。我希望SVN只用最新的二進制代替,並稱它爲好。

請不要討論爲什麼我應該或不應該在存儲庫中放入二進制文件 - 我必須也不想要衝突問題。

作爲參考:我同時使用烏龜1.5.0和安克。

+0

沒有答案,只是在您的環境中似乎違反了政策的重申:http://subversion.tigris.org/faq.html#binary-files – 2009-06-05 21:57:23

+2

你怎麼能看到它試圖合併它們?衝突並不能證明它試圖合併它們 – 2009-06-05 22:01:10

+1

我只是假設他們正在嘗試合併,因爲有些更新不會導致衝突,有些則會導致衝突。我希望衝突停止 - 不確定衝突點是什麼,如果你不能比較/合併 – Mario 2009-06-08 15:55:02

回答

3

要確保我理解正確的話,讓我們來概括:

  • 你的二進制文件簽入到SVN
  • 這些文件可以更改客戶端和存儲庫中的
  • 每當都是改變,從資源庫中的變化應該「雙贏」

據我所知,svn的方式做到這一點是:

  • 執行「svn update --accept他們滿」對整個本地副本的二進制文件
  • 運行常規「SVN更新」

我不認爲這可以在一個完成命令,我也認爲它不應該在一個命令中可行,因爲第一個命令可能會丟失有價值的數據。

+0

存儲庫中的文件永遠不會更改,它們顯然會從更新存儲庫中的該文件的客戶端更改。由於它們是二進制文件(例如word文檔或圖表),它們不應該被合併,只是被替換。也許我描述了這個問題是錯誤的,但我希望能夠做的就是讓svn永遠不會嘗試合併,只獲取二進制文件的最新版本 – Mario 2009-08-03 17:01:53

+0

這正是這個答案所描述的; - 接受他們的 - 完全丟棄任何本地變化時有傳入的變化。這意味着如果你有一個修改過的Word文檔,並且其他人改變了它,並且你svn更新 - 接受他們 - 完整版,你的版本就會丟失,並且用你同事的更新 – 2009-08-03 21:02:43

-1

這些dll文件,他們是從實際的項目建立輸出?

如果是這樣的話,他們不應該放在svn中。 Subversion應該包含源文件,並且構建服務器/開發包可以從那裏構建dll。

+2

我寧願將它保留在主題上 - 如何防止衝突的二進制文件 – Mario 2009-06-08 18:04:46

+0

當沒有必要時,不進行版本化生成輸出是防止衝突的二進制文件的好方法。 如果您的副本和服務器上的副本都發生更改,則無法防止發生衝突。 – 2009-06-08 21:41:20

1

如果文件在服務器和本地發生了變化,那麼您顯然會發生衝突。當然,更新工作副本包括更新二進制文件,因爲它們是修訂版的一部分。這並不意味着svn會嘗試合併它們,但是你肯定會發生衝突。如果這些文件經常更改,我猜它們會經常生成 - 甚至可能是編譯器輸出文件。這些文件根本不應該存放在存儲庫中。

如果您需要歸檔發佈二進制文件(或類似文件),您應該在標籤或發佈分支上執行此操作,但不要在中繼上執行此操作。

+0

標記源應該足以重新創建二進制文件。歸檔二進制文件不是源代碼管理的任務。 – 2009-06-05 22:12:25

+0

雖然我完全同意這家公司/經理似乎有不同的想法。至少從我的經驗,因此評論。 – bluebrother 2009-06-05 22:17:21

+1

您可能不想經常重新編譯核心庫。所以在這些情況下,我認爲將sdn放入dll是有意義的。 – Ryu 2009-06-05 23:15:24

0

你確定它試圖合併它們嗎?這聽起來更像是你正在發生衝突,因爲Subversion不知道如何合併它們(你不希望它這樣做)。

如果你有一個本地修改的dll,並且有人在你做之前提交了相同的dll,你想要發生什麼?你期望發生什麼?這顯然是一個衝突和顛覆不知道你是否想要它使用你的DLL或他們的DLL。

+1

由於它們是二進制文件,我希望svn來更新它們,就是這樣。沒有衝突,沒有嘗試合併 - 沒有。只需將其替換爲最新的。 – Mario 2009-06-05 22:23:35

+0

那麼在這種情況下,您可能可以編寫一個預先提交的鉤子腳本來檢查是否存在衝突,如果找到,就使用更新的文件解析它。 不幸的是,我從來沒有寫過鉤子腳本,所以我不能在那裏得到很多幫助。 – 2009-06-05 22:34:01

+0

預先提交的鉤子腳本無法解決這個問題,因爲這是一個服務器端腳本。在客戶端進行更新時會發生衝突和合並。 – 2009-06-08 21:42:47

1

我們對某些文件有同樣的問題。

CVS很好地處理了這個問題,但不幸的是我的公司正在轉向Subversion。

某些配置文件在我們的應用程序每次運行時都會被修改,但是當開發人員檢查新的更改時,我們希望它們始終覆蓋用戶存儲庫。

.CVSwrappers文件中,放入*.fileext -k b -m COPY。這告訴CVS在本地存儲庫中始終創建文件的備份副本,並在出現衝突時下載新版本。如此優雅。

SVN沒有相應的設置。如果有人知道如何,請發佈。