2012-04-01 125 views
2

我正在使用Hg來管理和合並與VS2008項目中涉及的其他三個開發人員的代碼。我們確實有一個.hgignore文件,它忽略了不需要跟蹤的相當數量的文件,例如* .pdb,* .obj等。但是,我們會跟蹤.csproj文件。Mercurial搞砸了csproj文件?

定期地看起來合併後文件會丟失。我們會得到構建問題,並且必須重新定位項目文件夾中的文件,但不要放在csproj文件中。

最後,我在合併衝突期間注意到有時汞似乎不正確地合併。下面是一個截圖。文件中需要手動干預的實際衝突較低。但在本節中,hg錯誤地用一個名爲ReportTasks.cs的新文件替換DirectoryTasks.cs,實際上,兩者都應該被添加。人們如何設法避免這種情況?

enter image description here

+0

我在ReportTasks.cs行附近的左欄中看到了'B'字樣,您在那裏選擇了'B'(或者它是否以相同的方式標記自動決策?!)。而不是選擇'A'和'B' – zerkms 2012-04-01 23:25:23

+0

不,在我做任何事情之前,hg選擇了B.實際的衝突是在文件的其他地方,等待我的決議。 IOW,我沒有在此合併位置選擇B,它以某種方式「預先選擇」,並導致錯誤的構建... – alphadogg 2012-04-01 23:27:52

+0

爲了更清楚起見,屏幕截圖是我在開始合併解決方案時看到的一些東西已經爲我合併。我還沒有對這個文件採取行動。 – alphadogg 2012-04-01 23:29:16

回答

0

那麼,被示出在圖像是指:

  1. DirectoryTasks.cs線原本
  2. 然後顯影劑1手動或使用一些VS GUI(在parent1修改)它改變到ReportTasks.cs
  3. 開發者2沒有改變它

因此,當您合併時 - 您會收到其他開發人員所做的更改。

的問題應該是:爲什麼VS或開發商parent1修訂,ReportTasks更換DirectoryTasks(它是不相關的HG在所有)

+0

文件沒有變化。 Dev 1 ADDED ReportTasks.cs。 DirectoryTasks.cs一直在那裏。 (事實上​​,你可以在Base列中看到它。)出於某種原因,文本比較似乎認爲它們是同一行? – alphadogg 2012-04-01 23:30:26

+0

@alphadogg:不,我看到開發人員1添加了接口並**替換了** cs-file。和hg看到的一樣我 – zerkms 2012-04-01 23:31:25

+0

@alphadogg:如果更新到'parent1'並嘗試在項目文件中找到'DirectoryTasks.cs'會怎麼樣?它是什麼? – zerkms 2012-04-01 23:35:05

0

我支持zerkms:這是開發者的手中錯,不是HG

父母的作者1 替換一個字符串DirectoryTasksReportTasks添加另一個ReportTasks字符串。在這種情況下,您必須與開發人員一起工作

強制執行.csproj文件是爲了在全新的工作環境中獲得正常運行的項目,還是每個IDE爲自己的需要重新創建的本地IDE工件?

+0

它是強制性的(它相當於一個makefile),但是它使用IDE進行管理,而不是作爲文本文件進行管理。如果開發人員編輯項目並更新源代碼管理中的工作副本而不保存項目,則可能會出錯。然後您可以選擇使用內存中的副本或磁盤上的副本。這些選項都不好,因爲它們都失去了改變。修改項目後儘快保存項目(儘管沒有「保存項目」按鈕,因此您必須使用「全部保存」),這是很好的做法。 – 2012-04-02 08:35:20