2010-12-12 67 views
1

在使用此回購(最初是SVN)的過程中,我一直沒有把文件鏈接放在一起。我已經改變了IDE兩次,將項目分解成Netbeans模塊,並在其時間內使項目變得複雜化。大部分文件歷史丟失,主要是因爲在mavenizing期間,我刪除了整個主幹,提交,複製到maven項目中,並提交。不完全是最好的想法,因爲我後來發現所有的歷史都重置到了這一點。它變得非常糟糕,以至於一個版本庫統計程序是無用的,因爲它說我有50,000行代碼投入而不是~8,000。在Mercurial中修復移動文件之間的鏈接

有什麼方法可以修復所有破損的文件歷史嗎?我有權訪問SVN和Git,如果Mercurial無法做到這一點

回答

3

Hrm,你做了你刪除和複製的時間你沒事的罰款了你剛做完hg addremove --similarity 90,它說:「刪除所有消失的東西,添加一切都是新的,如果它們彼此相似90%,則重新命名爲「。

現在那個機會已經過去了,沒有辦法移動一個沒有重寫你的倉庫的倉庫,因爲所有的節點ID(哈希)都改變了,所有的克隆都會無效化。

hg export --output "../patch-%n.patch" 0:tip # exports every changeset to a patch file 
cd .. 
hg init newrepo 
cd newrepo 
hg import --similarity 90 ../patch* 

這需要一個線性的歷史從你第一次提交給你的最後一個(不包括分支機構和其他負責人等)出口:如果可以的話,你有一個基本上線性的歷史,你也許可以像這樣的東西度日他們補丁,創建一個新的空回購,並使用重命名檢測功能導入變更集。

這是一個非常激烈的行爲,所以確保它真的值得你,並保持你的舊回購周圍的好措施。

+0

由於我是本回購庫中唯一的人,並且沒有人克隆它,所以我應該很好地處理它。但是,有沒有辦法在SVN中合併我做的刪除和複製提交?因爲在實施之前你仍然有破碎歷史的問題。我能想到的唯一方法是回滾到特定修訂版,完成工作,然後將所有更改應用於頂部。但是我不太瞭解如何在Mercurial中做的事情,我認爲它會釋放所有時間戳,這是我想要保存的東西。 – TheLQ 2010-12-12 07:05:39

+0

如果你要export-everything import-everything路由,你可以使用'hg import --no-commit'合併兩個變更集,然後在執行'hg commit'之前進行兩次導入。時間戳可以設置爲您想要在變更集上進行的任何操作(請參閱'commit --date'),並且文件時間戳完全不會被追蹤。 – 2010-12-13 03:59:16

+0

回到這個問題,我試圖做到這一點,但遇到了重建回購問題。我用'hg export --git -a -o「../patch-%r.patch」-vv 0:tip'輸出,並用(大大簡化) grep補丁\'; do hg import --similarity 90 --user「...」--force --date「...」../$i;完成;'。但是,我收到很多導入錯誤:文件不存在,它們已經存在,或者被拒絕。有什麼建議麼? – TheLQ 2011-01-16 22:54:17

相關問題