2013-07-19 50 views
0

我在我的根目錄下做了一個revursive sed,當我嘗試提交或者對hg和help進行任何操作時,我得到一個堆棧跟蹤。我錯誤地認爲當我執行sed時,.hg目錄被寫保護。Broken Mercurial Repo

回購是我的機器本地。

有什麼辦法讓我恢復我的更新日誌或提交評論?我在.hg目錄中找到一個名爲00changelog.i的文件,但它是一個不執行的二進制文件。

的sed命令:

find . -type f -exec sed -i.bak "s/sim-config.h/config.h/g" {} \; 
find . -type f -exec sed -i.bak "s/av-config.h/config.h/g" {} \; 

堆棧跟蹤:

Traceback (most recent call last): 
    File "/usr/bin/hg", line 27, in <module> 
    mercurial.dispatch.run() 
    File "/usr/lib/python2.6/site-packages/mercurial/dispatch.py", line 16, in run 
    sys.exit(dispatch(sys.argv[1:])) 
    File "/usr/lib/python2.6/site-packages/mercurial/dispatch.py", line 30, in dispatch 
    return _runcatch(u, args) 
    File "/usr/lib/python2.6/site-packages/mercurial/dispatch.py", line 50, in _runcatch 
    return _dispatch(ui, args) 
    File "/usr/lib/python2.6/site-packages/mercurial/dispatch.py", line 470, in _dispatch 
    return runcommand(lui, repo, cmd, fullargs, ui, options, d) 
    File "/usr/lib/python2.6/site-packages/mercurial/dispatch.py", line 340, in runcommand 
    ret = _runcommand(ui, options, cmd, d) 
    File "/usr/lib/python2.6/site-packages/mercurial/dispatch.py", line 521, in _runcommand 
    return checkargs() 
    File "/usr/lib/python2.6/site-packages/mercurial/dispatch.py", line 475, in checkargs 
return cmdfunc() 
    File "/usr/lib/python2.6/site-packages/mercurial/dispatch.py", line 469, in <lambda> 
    d = lambda: util.checksignature(func)(ui, *args, **cmdoptions) 
    File "/usr/lib/python2.6/site-packages/mercurial/util.py", line 401, in check 
    return func(*args, **kwargs) 
    File "/usr/lib/python2.6/site-packages/mercurial/commands.py", line 712, in commit 
    node = cmdutil.commit(ui, repo, commitfunc, pats, opts) 
    File "/usr/lib/python2.6/site-packages/mercurial/cmdutil.py", line 1151, in commit 
    return commitfunc(ui, repo, message, match(repo, pats, opts), opts) 
    File "/usr/lib/python2.6/site-packages/mercurial/commands.py", line 710, in commitfunc 
    editor=e, extra=extra) 
    File "/usr/lib/python2.6/site-packages/mercurial/localrepo.py", line 787, in commit 
    changes = self.status(match=match, clean=force) 
    File "/usr/lib/python2.6/site-packages/mercurial/localrepo.py", line 1015, in status 
    listclean, listunknown) 
    File "/usr/lib/python2.6/site-packages/mercurial/dirstate.py", line 614, in status 
    dmap = self._map 
    File "/usr/lib/python2.6/site-packages/mercurial/util.py", line 156, in __get__ 
    result = self.func(obj) 
    File "/usr/lib/python2.6/site-packages/mercurial/dirstate.py", line 58, in _map 
    self._read() 
    File "/usr/lib/python2.6/site-packages/mercurial/dirstate.py", line 228, in _read 
    p = parsers.parse_dirstate(self._map, self._copymap, st) 
+0

你有從克隆的上游回購嗎?您當地的回購中有多少不在您上游的提交? –

+0

沒有上游回購,所以他們都是。我在回購本身編碼。 –

+0

你運行了什麼'sed'命令?你得到的堆棧跟蹤是什麼? –

回答

1

如果沒有上游源代碼,您可以用替換.hg克隆,它可能會取決於如何嚴重打亂了這些文件是。但是,正如您注意到的那樣,Mercurial以二進制格式在內部存儲文件,這將使手工難以修復。

大概你沒有運行sed -i.bak來做一個備份(這會使恢復變得很容易)。

你可以這樣做:

find .hg -mmin -60 -print 

看過去(比如說)60分鐘進行了修改哪些文件。也許沒有太多的修改,你可以找到一些方法來改變sed命令對該文件的影響(但是如果你運行諸如/foo/d之類的東西,這將是不可能的)。

未來,值得註冊一個免費賬戶http://bitbucket.org/,這將給你免費的私人存儲庫託管和一個很好的備份位置。

+0

我其實是用-i.bak運行sed。我完全忘記了這一點。事情是,我跑了幾個不同的seds,並有.bak.bak.bak等。我將如何去恢復它? –

+0

不管這個,我沒有.baks –

+0

如果你真的有一個'.bak'文件,你需要去找它們並替換(例如)'mv 00changelog.i.bak 00changelog.i'。 –

相關問題