2013-05-03 98 views
0

我們有一個位於獨立服務器上的主存儲庫。我最初克隆了默認分支並在本地進行了更改。我已經在當地承諾這些變化。但是,在主存儲庫上創建了一個分支,我想將其更改推送到該分支。以下是我對完成這一任務的描述。從一個遠程分支克隆的repo需要被提交到不同的遠程分支

我已經克隆了分支。我想輸出從本地默認我的變化,像這樣:

C:\hg\default>hg export -g -o mypatch -r tip 

,並試圖將它們導入到新的分支的克隆時,我得到如下:

C:\hg\newBranch>hg import C:\hg\default\mypatch 
applying C:\hg\Fill1\mypatch 
patching file .hgignore 
Hunk #1 FAILED at 11 
1 out of 1 hunks FAILED -- saving rejects to file .hgignore.rej 
abort: patch failed to apply 

我可以手動修復.hgingore.rej文件就好了。問題在於該修補程序還包含已移動的文件。而不是顯示爲移動的文件,我得到的運行hg status當以下:

C:\hg\newBranch>hg status -C 
M someOtherFilesThatLookAsExpected.txt 
! originalLocaion\fileA.txt 
? newLocation\fileA.txt 

此丟失,新的狀態是針對在此提交包含在應用補丁感動了所有文件。難道我做錯了什麼?我在申請補丁時是否總是需要手動移動文件?有沒有更簡單的方法來完成這個分支轉移?

回答

1

如果不知道更多關於您的存儲庫結構的信息,有點難以回答,但這裏是我如何在不知道更多信息的情況下進行操作。我假設衝突的原因是存儲庫的同一分支存在衝突的變化。

首先,獲得newBranch資源庫的內容:

cd c:\hg\default 
hg pull c:\hg\newBranch 

然後,合併或衍合上頂部更改。如果你在同一個分支上工作,那麼只需使用

hg pull --rebase c:\hg\newBranch 

代替正常拉應該做的(假設你已經重新啓用)。否則,你需要明確合併或重新組合兩個頭,你需要協調。最後,請執行以下操作:

hg push -r tip c:\hg\newBranch 

爲了使您的(現在已對帳)更改回到newBranch。

除非您有非常具體和不尋常的要求,否則pushpull應該是您同步存儲庫或其中一部分的常用方法(請注意,使用-r只會推/拉各自的分支)。導出/導入是相當低級別的機制,可能不會給予您處理重命名,三向合併邏輯等標準機器的好處。

+0

當我運行hg時看不到'--rebase'幫助拉' – 2013-05-03 16:32:58

+0

當你說'hg pull c:\ hg \ newBranch'我應該做'C:\ hg \ default> hg pull c:\ hg \ newBranch'嗎? – 2013-05-03 16:44:05

+0

僅當您打開分配數據分機(由於它可以修改歷史記錄而未默認啓用)時纔會啓用分配數據庫。如果您對重寫歷史記錄不滿意,您可能會也可能不需要它。是的,在拉動之前,先將光盤放到c:\ hg \ default目錄下。 – 2013-05-03 17:10:29