簡體   English   中英

從特定版本中提取文件 - mercurial

[英]pull files from a specific revision - mercurial

我有3個存儲庫,每個存儲庫都使用相同的代碼庫創建,但又足以保證不同的存儲庫。 我的“夢想”工作流程是在開發存儲庫中完成工作,然后將這些更改提取到其他存儲庫中。 我知道我可以這樣做:

hg pull -r X -f repo

但這會給我所有的變更集到X.是否可以從特定版本甚至從一系列修訂中提取所有變更集?

在mercurial中沒有很好的方法來挑選修訂(這就是你提議的工作流程)。 有一些不那么好的方法可以做到:export + import(或者導出+導入的方便包裝器稱為移植),但是那里的缺點是你有多個存儲庫中不同哈希的相同變更集,沒有好處表示當您嘗試再次移動更改時的方式。

更好的是修改你的工作流程,這樣當你想要移動一個變化時,你可以移動它的所有祖先,並且你通過有意識地選擇變更集的祖先來做到這一點。

例如,如果您正在修復開發存儲庫中的錯誤,並且所有三個“其他”存儲庫不僅僅將更改的父修訂版更改為開發存儲庫的tip 首先做一個hg update -r THE_REVISION_WHERE_THE_BUG_WAS_ADDED ,然后修復你的bug,然后提交。 您將看到一條消息,說明new head created ,這是預期的。

現在你已經將修復程序作為一個變更集,其中唯一的父項是引入錯誤的變更集 - 必須存在於其他3個存儲庫中,否則它們不會有錯誤。 因此,現在您可以pull新的變更集轉移到“3”其他存儲庫中,而無需將其他所有變更集合到其中。 然后你在這四個存儲庫中的每一個中快速進行hg merge ,將錯誤修復混合到他們的可部署tip

了解如何使用通用功能構建存儲庫但在每個存儲庫中進行自定義的處理可能有點棘手,但如果您正確構建,則可以使用推送,拉取和合並來執行所有的內部倉庫遷移,並且永遠不會修復錯誤兩次,在不同的更改集中使用相同的代碼,或者重新執行存儲庫的自定義。

作為一個注釋,bisect命令在開始修復它之前,很好地回答了“這個bug引入的地方”的問題。

更新的答案:從Mercurial 2開始,您可以使用可以很好地運行的' graft '命令。 它使用一些內部合並功能來確保您可以手動處理任何沖突。 如果沒有Mercurial無法自行解決的沖突,那么新的變更集將在您當前的修訂版本之上自動執行。

如果您想獲取某些更改集的內容並將其應用於任意簽出(請注意:生成的更改集將是不同的更改集 ,即使它們進行相同的更改 ),請查看transplant擴展

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM