做Rails開發少不了GIT


為什麼需要GIT?

GIT是一種版本控制系統,為什麼要有這種東西呢?每一個東西都是用來解決一個問題,而在ihower的解說當中,點出程式開發團隊會遇到的問題:

  • 檔案被別人或自己覆蓋,甚至遺失
  • 想復原前幾天寫的版本
  • 想知道跟昨天寫的差在哪裡
  • 是誰改了這段程式碼,為什麼
  • 軟體發行,需要分成維護版跟開發版 (引用自ihower)

雖然ihower說的是團隊開發,但就算是一個人開發,也會在寫程式的過程中少不了各種以下情況:

  1. A功能開發完成,結果寫B功能寫到一半把A功能搞壞了
  2. 檔案不小心刪了
  3. 寫到一半本機硬碟壞了

聽起來很悲情,但在本人身上也確實發生過不少次。因此就單純已備份的角度來看,版本控制就像從前在學校寫報告要定時存檔一樣,基本上是做Rails開發,甚至是所有程式設計人員都要學會的。

GIT是利用儲存庫(Repository,簡稱repo)進行儲存,而利用repo,我們不只能進行各種儲存、備份、版本控制,更有專門提供這些公開repo的網站(例如Github),讓我們這些程式開發人員可以去觀摩別人的作品、copy、修改、甚至給予建議。

就以新人學習的角度來說,更是不可或缺的工具,因為身為新人,把程式搞壞也是很正常的事情,就算我們再怎麼小心,也會把東西裝壞,因此無力回天的時候,就可以利用GIT將程式恢復成先前的版本。

GIT安裝及設定

GIT官方網站上,有提供各個版本的教學,但由於GIT實在太廣泛為大家使用,因此安裝方法也超級多。

我個人在MAC上會直接利用brew進行安裝,在終端機(terminal)底下輸入:

$ brew install git

或在Linux Ubuntu的終端機底下輸入:

$ apt-get install git

一個指令就完成了,看吧,比泡麵還簡單。

接下來進行使用者設定,也就是我們在利用系統進行儲存時,會出現我們的名字。

$  git config --global user.name "Adler Hsieh"
$  git config --global user.email "adler@gmail.com"

以上的人名和email可以進行替換,--global的意思是只要在你的電腦上進行git儲存,就會使用這組預設內容。如果你想在不同專案儲存不同名字,可以不用加上這個指令。

接下來有一個很重要的事情,就是要找一個讓我們儲存GIT內容的地方,一般來說開放、免費的網站很多,這邊利用Github進行示範。

除了先申請一個帳號之外,更重要的是如果要把專案儲存到Github上,就一定要儲存一組ssh key,以保安全。每一台電腦都需要儲存一個ssh key,以防不明人士利用你的帳號儲存。在Github上有很完整的ssh key產生及上傳教學

Debug

在產生ssh key時其實本人卡關卡有點久,在這邊分享一點心得。

步驟如下,Mac和Linux系統皆同:

  1. 進入終端機
  2. 回到user的根目錄(並非整個系統的根目錄)
  3. 輸入 $ cd ~/.ssh
  4. 檢查有沒有一個檔案叫做 idrsa.pub 或 iddsa.pub,如果有,請跳至步驟7
  5. 如果沒有,請產生一組ssh key
ssh-keygen -t rsa -C "my_email@gmail.com"

接下來輸入密碼。未來在進行git push時,系統會詢問密碼,這時候就要輸入這組密碼。 6. 將這組key加入agent當中。

$ eval "$ (ssh-agent -s)"
$ ssh-add ~/.ssh/id_rsa
  1. 這邊是最容易卡關的地方,因為官方是用外掛來copy檔案,而我個人建議是直接去找這個檔案位置,用文字編輯器開啟。因為本人平常行善不夠,每次安裝該外掛都失敗。開啟方法是在/.ssh/資料夾底下,開啟id_rsa.pub這個檔案。copy時請確定格式是以下這張圖的樣子。
ssh-key-paste

(圖片來源:Github)

如果不是,那很不幸的是開錯檔案了,或是請重新產生一個ssh key,因為只要貼錯格式,github是不會接受的。至於為何會有莫名的格式出現,我也不知道,只記得我有一次重新產生了2~3個key格式才對。

切記,copy時不要copy到多餘的空白。

接著到github帳號設定的地方,點選右上方的Add,並上傳ssh key,在title的地方輸入一個你看得懂的名字。就大功告成啦!

希望有遇到相同障礙的人能夠迎刃而解。

參考資料

至於接下來要如何操作,網路上有非常多詳盡的資源,這邊列出一些推薦的:

ihower Git全攻略

好麻煩部落格

Code School (Try Git)

想了解Git原理的話,ihower有一個非常詳細的投影片可以參考:

slideshare