上週在跟mercurial玩耍,發生了一件令我不解的事情。
首先,我從遠端機器clone了一個repo下來到local,假設clone下來的目錄叫myRepo好了
然後,我發現這個myRepo中有個目錄下(假設該目錄叫etc)中要再補上幾個檔案。
於是我就把這幾個檔案複製到myRepo\etc\下,假設分別是f1,f2跟f3三個檔好了。
然後,我執行hg status,得到下面的輸出:

D:\myRepo>hg status
? etc\f1
? etc\f2
? etc\f3

D:\myRepo>

OK,很正常嘛。於是我再執行hg add

D:\myRepo>hg add
adding etc\f1
adding etc\f2
adding etc\f3

D:\myRepo>

也很正常,於是我按照慣例,再用hg status看一下

D:\myRepo>hg status
A etc\f1
A etc\f2
A etc\f3

D:\myRepo>

OK,幸福的日子到這裡為止,接著我執行hg status -d

D:\myRepo>hg status -d
! etc\f2
! etc\f3

D:\myRepo>

居然有幾個檔案被hg認為是missing了,但到工作目錄看一下檔案還在阿
而且同一個檔案同時為added與missing的狀態是怎麼一回事
但我還是提交了

D:\myRepo>hg ci -m "commit anyway!"
etc\f1
committed changeset <changeset ID>

D:\myRepo>

哇勒,只有提交f1
再hg status一次

D:\myRepo>hg status
A etc\f2
A etc\f3

D:\myRepo>

f2和f3還是為新加入的檔案,等待下次的提交。
我想說是鬼打牆了吧,不管那麼多,再提交一次

D:\myRepo>hg ci -m "commit anyway,again!"
nothing changed

瘋了,f2與f3都等待提交中阿…怎麼會沒有東西要提交勒?
結果再執行

D:\myRepo>hg status -d
! etc\f2
! etc\f3

D:\myRepo>

沒錯,還是一樣,f2與f3同時為added與missing狀態。
好吧,那就hg addremove吧

D:\myRepo>hg addremove

D:\myRepo>

沒反應,好!沒關係,我用hg remove!

D:\myRepo>hg remove --after
removing etc\f2
removing etc\f3

D:\myRepo>

嘿嘿~這下OK了吧,於是我再用hg status,結果:

D:\myRepo>hg status
? etc\f2
? etc\f3

D:\myRepo>

自此陷入無限迴圈…
誰可以告訴我是怎麼回事@@

廣告