Jun 30, 2015

git實際案例分享,git到底有甚麼好?

跟大家分享一下使用git做專案管理的心得。分享我認為git到底有甚麼用,到底優點在哪裡,到底在真正的專案中如何用git來達到事半功倍。

我有一個小專案,是開發一個陀螺儀的教學模擬軟體,請見。一開始這個專案是從小小幾個檔案開始,因此那時候所有的檔案備份全部都是手動管理。因為檔案數少,也只有一個version所以手動管理都還OK。直到後來檔案數目到達一個量,我大概是一年後,我才開始使用git。

人家說專案一開始就要馬上用git,我認為倒不需要。git是需要很多時間去學習的,但專案的進展並不需要因為不會用git而停下,等到學會git才繼續專案,這樣是本末倒置。不過誠如支持一開始就用git的人所說,若是專案中途才開始用git管理檔案,會有一些麻煩事需要克服,或者說會有一些麻煩事需要補做。不過,我認為,學習git去補做這些麻煩的過程,才是真正最自然合理的過程。因為就算你一開始專案就用git,你也不可能會用所有git的功能,因此你還是會遇到之後要回頭補做的麻煩事。遇到問題學習去整理問題並克服,事實上才是真正你離開學校後每天會遇到的實際狀況。這裡我把我中途才用git管理專案而遇到的一些需要補做的麻煩事清楚寫下,與大家分享。說不定也有助於git之後擴充新功能時,也能考量到這些人性化的過程,進而設計更好的git功能。

首先說我用git之後感覺到的兩個最值得的好處。這兩個是對我而言最大的好處。

  1. 非常放心的儲存檔案。怎麼說呢?以前備份檔案是備份到隨身碟,都要小心翼翼確保不要把檔案複製的方向拉反了,才把新的檔案用舊的覆蓋掉,我以前就發生過。因為通常存檔都是在工作的最後一步,通常都是很累,要不然就是急著要去做其他事情。git幾乎把這個出錯的可能降到零了。可以非常放心非常easy的儲存備份檔案(如果你用gitgui只要按兩下就ok,完全不需要在乎哪邊是新檔哪邊是舊檔。這一點對我來說非常重要,在我很累得時候而且下一秒還要趕著去其他地方的時候,我不用還要費心力去思考備份方向,只要點兩下就OK!!)
  2. 可輕易回復以前檔案的特性。我用這個特性在我開發第三版程式的時候發表發布了第一版試用版程式。這個就是一般人知道git的強項了。


接下來是我遇到的問題。

  1. 由於我是中途才開始用git。因此我的資料夾裡面有些檔案是要追蹤,有些檔案不需要追蹤。追蹤的檔案之中又只有某一些檔案才會被包含在要發表的程式包中。比如說,如果我用git將資料夾狀態切換到發表程式包的狀態(git的術語branch),那那些不需要追蹤的檔案還是會存在。這樣就看不出來到底哪些是要發表的程式。還得要用git clone指令抓出要發表的那些程式去產生另一個資料夾,有點麻煩。
    2016/August註: 真的是寫下來回頭再回來檢討才會知道自己的問題在哪裡啊! 後來發現原來問題是一開始在分類資料夾的時候分類沒做好! 這個狀況就是互不相干的檔案必須要做很好的切割,就是要放在不同的資料夾。
    也就是,不需要追蹤的檔案應該獨立出來放在其他資料夾。要發表的檔案是一個branch,不發表但有追蹤的檔案室另一個branch。這樣就可以。
  2. 當我在開發新功能的時候,我希望在發表程式包的狀態,這樣才不會有其他多餘檔案影響,但我又需要加入原本的之前的狀態(git術語master)追蹤的某些開發中的檔案。這樣我得要重回原本的master狀態,另產生一個狀態,此狀態姑且叫發表狀態2,然後刪掉一些原本狀態追蹤的檔案,並且保留那個現在我們需要的檔案。這樣的步驟要刪很多檔案,要很多指令,還蠻花時間的。
    2016/August: 後來學到git fetch可以去抓特定branch裡的特定檔。就可解決此需求。
  3. 另外第一次遇到merge conflict的時候會很緊張很挫折。正如前面所說,在做merge的時候通常都是最後一步,此時通常是準備收尾要去做其他事情了,又跑出無法成功merge的訊息,又不曉得該怎麼辦,是非常著急非常幹幹幹的。
    最一般的程序是,當嘗試merge後,git會停在一個地方,並且告訴你merge沒有成功,這個地方很特別。他會在merge不成功的檔案中加上記號,這記號是告訴你哪邊的內容是被雙方更改過的,所以你就是直接去把檔案打開找到記號然後把雙方更改過的修正成你最終想要的,然後再commit他,commit之後就會自動繼續merge。
    問題是你第一次絕對不知道要怎麼做,因為你急著要他merge,也急著要關機離開,心都很著急了怎麼可能解決衝突呢? 怎麼辦呢?
    2016/August 建議是都不要動,繼續關機的步驟,不要管他。下一次再回來弄。我上一次就是亂搞亂搞,差點把東西都弄亂。git很安全,只要按照他的步驟走,通常出錯的機會是非常低的。但是前提就是要按照他的步驟走。若不確定,別亂走。
也提一下另一個備份軟體goodsync: 我之前也用過goodsync來做檔案備份管理,不過goodsync缺點在於,你還是必須小心擔心覆蓋方向,還是沒有git方便。

No comments: