2010-11-29 122 views
2

我用hg strip從我的歷史記錄中刪除了一些提交。 現在我想重新申請這是條命令上作備份補丁:.hg/strip-backup/68a8f24f62d0-backup.hg'hg strip'創建的補丁已損壞

不幸的是,當我嘗試推補丁,似乎修補已損壞:

$:~/sc2$ hg init --mq 
adding .hg/patches/68a8f24f62d0-backup.hg 
68a8f24f62d0-backup.hg: up to 582 MB of RAM may be required to manage this file 
(use 'hg revert 68a8f24f62d0-backup.hg' to cancel the pending addition) 
$:~/sc2$ hg qpush 
applying 68a8f24f62d0-backup.hg 
patch 68a8f24f62d0-backup.hg is empty 
transaction abort! 
rollback completed 
cleaning up working directory...done 
abort: decoding near 'h91AY&SY݁��S������': 'utf8' codec can't decode byte 0xb1 in position 16: invalid start byte! 

有一個人有這個問題已經或可以給我一個建議如何應用補丁?如果這是不可能的我比螺絲更多...

也許這是一個python問題?

我試圖分拆汞和得到這個:

adding changesets 
adding manifests 
adding file changes 
transaction abort! 
rollback completed 
abort: received file revlog group is empty 

如果我不汞柱拉:

pulling from 68a8f24f62d0-backup.hg 
searching for changes 
adding changesets 
transaction abort! 
rollback completed 
abort: data/[email protected]: no node! 

那麼,如何解決這個節點的問題?

海因裏希

+2

AFAIK命令`hg unbundle`用於恢復strip命令所做的備份 - 請參閱`hg help strip`的輸出。 – 2010-11-29 14:19:50

+0

對於我來說,解決方案就是從包中獲取「健康」文件,然後再將它們合併到我的工作副本中。問題是我找不到一個命令來獲取內容! – Erik 2010-11-29 15:45:55

+1

也許文件確實損壞了。要找到實際的問題,使用`--debug`選項在這個文件上運行`hg`命令可能會很有用。如果您運行`hg --debug -R log`,會發生什麼? – 2010-11-30 10:30:14

回答

2

我曾與馬特·麥考爾(主水銀作者)關於這一主題的一些聯繫,我們想通在Mercurial中出現一個錯誤:

Mercurial實際上無法處理大於2^31-1字節的文件,大小爲〜2GB,因爲用於保存大小的signed int。然而,如果你添加更大的文件(我所做的),mercurial不會拒絕它們,但像往常一樣添加。對文件大小的唯一檢查似乎是在推送到服務器時。不過,我在這裏只收到警告和永不結束的hg push

報價由馬特·麥考爾從郵件會話:

它會在幾個地方 導致溢出:

一)寫的第一次修訂時 的revlog,我們將存儲的 未壓縮的大小模2G,但我們會 仍然能夠成功地讀取 整個文件

2)建立捆綁爲時傳輸或剝離,我們將 報告塊大小模2G,其中 將被解釋爲負 號碼,因此看起來像空塊 組塊。

5

hg help strip輸出:

任何剝離的變更存儲在「.hg /條的備份」 ...他們可以通過運行「汞分類定價.hg恢復/ strip-backup/BUNDLE「,其中BUNDLE是由條創建的包文件。

這個簡單的演示會議上演示了使用鬆綁命令:

# create a new repo and commit some changes: 
$ hg init foobar 
$ cd foobar/ 
$ echo a > file 
$ hg ci -A -m "Initial" 
adding file 
$ echo b > file 
$ hg ci -m "Change 1" 
$ echo c > file 
$ hg ci -m "Change 2" 
$ hg glog --template '{rev} - {node} - {desc}\n' 
@ 2 - 86ecd06a38260fd229fdd73ba82efa6b2db0784c - Change 2 
| 
o 1 - 7827b4d5a10c2ca8d5196752f1b2dec92e8cf573 - Change 1 
| 
o 0 - 2b41b1e661196fe943125fdb1d590b5a60369c7e - Initial 

# trash revision 1 and all its children: 
$ hg strip 1 
1 files updated, 0 files merged, 0 files removed, 0 files unresolved 
saved backup bundle to /path/to/foobar/.hg/strip-backup/7827b4d5a10c-backup.hg 
$ hg log --template '{rev} - {node} - {desc}\n' 
@ - 2b41b1e661196fe943125fdb1d590b5a60369c7e - Initial 

# meanwhile, make new changes: 
$ hg ci -m "Change 1.1" 
$ hg glog --template '{rev} - {node} - {desc}\n' 
@ 1 - a5ad2a79835ad0019f215e62fd928f8649cbbcab - Change 1.1 
| 
o 0 - 2b41b1e661196fe943125fdb1d590b5a60369c7e - Initial 

# you decide your previous work was not that bad at all: 
$ hg unbundle .hg/strip-backup/7827b4d5a10c-backup.hg 
adding changesets 
adding manifests 
adding file changes 
added 2 changesets with 2 changes to 1 files 
(run 'hg update' to get a working copy) 

$ hg glog --template '{rev} - {node} - {desc}\n' 
o 3 - 86ecd06a38260fd229fdd73ba82efa6b2db0784c - Change 2 
| 
o 2 - 7827b4d5a10c2ca8d5196752f1b2dec92e8cf573 - Change 1 
| 
| @ 1 - a5ad2a79835ad0019f215e62fd928f8649cbbcab - Change 1.1 
|/ 
o 0 - 2b41b1e661196fe943125fdb1d590b5a60369c7e - Initial