2013年3月29日 星期五

使用vimdiff來解決git merge conflict

使用vimdiff來解決git merge conflict 最近同時家裡用筆電跟辦公室用桌電,在兩個地方使用git/github來管理程式作業,這兩個東西加起來根本神物,本來要用隨身碟同步的東西,現在可以用git直接完成。
關於git的基本介紹我就不解釋了,網路上隨便一找就有一堆資源,例如右邊友站連結,作者比我強30dB的JJL blog,裡面有git的基本使用方式;作者當初則是看參考資料一的progit來學git。

作者遇到的問題是:有時候檔案在github上的檔案已經更新,本地的檔案也有修改過,這時候若想要git pull的話會產生conflict,這時候就需要把本地的檔案刪掉重新clone使用merge來解決衝突,偏偏作者手殘常常把檔案merge成連<<<, >>>都保留下來的檔案,相當麻煩;這次好好的研究一下怎麼用vimdiff作為merge的工具,在這裡記錄一下。

首先呢,我們可以先設定vimdiff為git default的mergetool
git config --global merge.tool vimdiff
為什麼?沒辦法,用vim就是潮(誤)

那麼來merge吧,輸入
git mergetool
這時候應該會打開vimdiff,然後產生左上角、中上、右上、下四個視窗,說明如下:
左上:local:顯示本機的檔案內容,現在這個git資料夾的版本
右上:remote:顯示遠端,你要merge的分枝
中上:base:顯示上面兩個分枝的基部的內容
下:merged:顯示merge的內容,也是是包含了那堆<<<<<<, >>>>>> 的版本,我們的目標就是把下面這個修到我們希望的版本。
截圖:













到了這裡就開始解衝突啦,事實上不單是git,平時如果有兩個很像的檔案要合併,也可以用vimdiff開啟來解,使用的指令是這些:
[c:跳到上一個衝突點
]c:跳到下一個衝突點
:diffget,從某個視窗取得內容
:diffput,把內容丟去某個視窗
可以用:help do, :help dp查怎麼用,不過兩個指令的基本格式是:
:[range]dp|do bufspec

如果是雙方比較,那就沒什麼好說的,do/dp的對象就是另一個視窗的內容,這時候只要在衝突點在一般模式下用dp,do即可。但如果是現在這種3方比較時,就沒辦法這麼方便,而是要直接輸入:diffget/put bufspec來操作(可以打diffg, diffpu來少打幾個字,不過有差嗎=w=)
以上圖為例,我們游標停在下面的衝突點上,要使用remote的視窗內容。
這裡bufspec(用哪個視窗的內容)有兩種指定方式:
1. 先用:buffes,確認remote那個視窗編號,我是4號,因此用 :diffget 4
2. 用關鍵字,這個超強,用 :diffget REMOTE (因為git自動命名暫時檔名為 XXXX.REMOTE.yyy, XXXX.BASE.yyy, XXXX.LOCAL.yyy)即可。
如此就會套用remote的內容了,經過幾次套用之後,畫面可能會變得有點亂,這時候可以用 :diffupdate來重新產生diff的格式。













用上面的步驟,就可以快速的完成解衝突的工作,做完之後,在下面的合併檔存個檔離開吧。

參考資料:
1. progit download:
2. vim wiki about git vimdiff:
3. vim help:
Type in vim :help diff

2013年3月17日 星期日

面對核四,我的意見

反對核四大遊行登場,將反對核四的行動帶上另一波高峰,隨著愈來愈多的名人、學者加入連署,反對聲浪也愈來愈高。網路上已經有很多關於核電的文章,在此就不需要再重覆了,只想在這裡表達一下我的意見。

最近看到一些文章,認為這個政府必須提供配套方案,而不是將責任丟到反核民眾身上;我完全同意,但另一方面,我並不認為「人民沒有義務去理解事情背後的充分知識,解決方案在政府,但政府應該幫忙人民,人民也應該自己去了解,解決方案所帶來的後果。」
比如說現在政府要穩定台灣供電,提出的解決方案是核能四廠,後果包括可能的風險及低放射性核廢料的問題,因此政府可能會不斷測試核電廠的安全性和在蘭嶼建造處置場,這是穩定電能解決方案會帶來的後果,所謂解決方案,無非就是在現有的技術限制、成本、效益內達到妥協。
今天大家反核能,要求關閉所有核能電廠,無論是新設火力機組以致電價大漲,這是政府回應廢除核能四廠,為了降低用電需求而提出的解決方案;聽起來是在恐嚇,可是這也是現實,如果有又安全又便宜的廢電方式我會不要嗎?可是台灣天生能源不足,如果人民不體認這點,抗議完回去繼續過著浪費電的生活,政府漲電價又抗議,批台電肥貓,罵死所有至今努力維持台灣不斷電的員工,這樣你要政府怎麼做?
所有方案背後都有妥協和限制,如果要大家正視方案背後的限制和技術的極限,這也算是恐嚇,大概所有的解決方案都不必提了,只要矇著眼聽著自己人的高談闊論,然後鬥死所有正視現實的人。
舉個例,下面資料一新聞報導,因為手機訊號極弱,接電話必須走到街上,然後直批中華電信服務品質;可是,當初就是因為該鄉鎮反對在家門前設定基地台,電信公司設不下去,害怕基地台帶來致癌的風險。這是電信公司的錯?還是民眾自己不清楚後果?因為射頻的極限就是在那,你不能兩手一攤,叫電信業者做出不用基地台的手機,因為技術上做不到,電信業者說:「再拆基地台訊號就會低到不能使用」,這是恐嚇,還是叫你睜眼正視現實?
其實隨煤、油、天然氣價格的變化,台電早就處在虧錢狀態,由政府出錢維持如此低的電價,使用更多的再生能源,情況只會更糟;我可以認同民眾反核的理念,但我不認為民眾可以什麼都不用理解,抗議完就拍拍屁股沒我的事,因為即便是集體,在盲目下決策也不一定就是正確的。

最後最後,我只想說: 為什麼我們需要核能、火力?因為它的能源密度夠大,網路上轉載很多再生能源的「替代方案」,一眼就看得出是在胡扯,在屏東種點太陽能就可以超過一座核能電廠?幫忙消耗太陽能板廠的產能過剩還差不多;又或者,直接說用電量跟備用容量率相減,然後說台灣沒有缺電問題;這些只會讓我覺得你沒先了解過問題,或者你根本懶得正視技術的現實,我不管你反核擁核,拜託不要再轉這種一看就非事實的文章了。

相關資料
1.千戶手機沒訊號 放塑膠袋掛騎樓等電話
http://www.youtube.com/watch?v=58k2T9IgXfA
題外話,啊現在電信公司提出新的解決方案,幫你們裝了強波器,這下你倒不怕電磁波了?只有一樓收得到就說明它的電磁波是有多集中。