1. 程式人生 > >TortoiseHg使用備忘(4.7的Merge後報錯 tortoisehg.util.configitems,自動Merge行尾風格改變)

TortoiseHg使用備忘(4.7的Merge後報錯 tortoisehg.util.configitems,自動Merge行尾風格改變)

關於4.7 Merge中斷後Update報錯

前兩天為了做Merge轉換,把TortoiseHg升級到了4.7,然後發現Merge一半沒commit之前,如果試圖直接Update來丟棄會報錯

#!python
** Mercurial version (4.7).  TortoiseHg version (4.7)
** Command: --nofork workbench
** CWD:  xxxxx
** Encoding: cp936
** Extensions loaded: tortoisehg.util.configitems
** Python version: 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)]
** Windows version: sys.getwindowsversion(major=6, minor=2, build=9200, platform=2, service_pack='')
** Processor architecture: x64
** Qt-5.9.2 PyQt-5.9.1 QScintilla-2.10.2.dev1711012104
Traceback (most recent call last):
  File "tortoisehg\hgqt\repowidget.pyo", line 1698, in updateToRevision
  File "tortoisehg\hgqt\update.pyo", line 408, in __init__
  File "tortoisehg\hgqt\update.pyo", line 150, in __init__
  File "tortoisehg\hgqt\update.pyo", line 183, in update_info
  File "tortoisehg\hgqt\csinfo.pyo", line 528, in update
  File "tortoisehg\hgqt\csinfo.pyo", line 381, in get_markup
  File "tortoisehg\hgqt\csinfo.pyo", line 330, in get_markup
  File "tortoisehg\hgqt\csinfo.pyo", line 268, in get_data
  File "tortoisehg\hgqt\csinfo.pyo", line 200, in preset_func
AttributeError: 'changectx' object has no attribute 'thgtags'

就沒法繼續下去了

這個應該是比較新版本的bug,我更新前類似的操作做過很多次並沒有遇到這個問題,所以回退TortoiseHg的版本也許也可行

我目前臨時解決方案是:
右鍵點選當前分支的某個舊版本,點選回退(backout),然後在彈出的準備回退(Prepair to backout)確認框中,點選丟棄(discard),就可以返回一個乾淨的狀態了,之後就可以Update了

這裡寫圖片描述

記得丟棄操作完成後,不要點下一步,而要點取消。因為我們並不是真的想要回退,只是要這個介面裡的丟棄。

按理直接用hg命令列操作或者重新安裝TortoiseHg的某個舊的健康版本也能解決這個問題

關於Hg的行尾自動解決衝突

另外一個問題是,自從windows上把BC的註冊碼給Mac用,windows上只用WinMerge和kdiff以後,每次Merge的時候,經常會有行尾衝突
There is a line end style conflict
雖然之前都是手工指定一下行尾
類似這裡提到的操作 https://stackoverflow.com/questions/27382944/kdiff3-there-is-a-line-end-style-conflict
但需要操作的Merge的檔案一多,尤其Unity工程的meta檔案幾乎每個都要手動點一下就很麻煩

考慮使用eol外掛,配置專案的.hg\hgrc檔案,這樣配置貌似基本能解決問題
[extensions]
eol=
[encode]
**=cleverencode:
[decode]
**=cleverdecode:

以前貌似這樣做過一次,後面忘了為啥去掉了,剛剛發現貌似這樣修改後,有時候revert一些行尾修改會不實際執行,還有待之後觀察