15分鐘學會使用Git和遠端程式碼庫

九哥發表於2013-12-19

Git是個了不起但卻複雜的原始碼管理系統。它能支援複雜的任務,卻因此經常被認為太過複雜而不適用於簡單的日常工作。讓我們誠實一記吧:Git是複雜的,我們不要裝作它不是。但我仍然會試圖教會你用(我的)基本的Git和遠端程式碼庫幹活的工作步驟,在15分鐘內。

工作步驟
我會展示以下的步驟,通常能幫我獨自在一臺或多臺機器上做專案。
1. 建立一個遠端的空程式碼庫(在BitBucket上)
2. 在原生程式碼庫新增一個專案
3. 在分支上開發新功能
4. a) 保留新功能或者 b) 丟棄它們
5. 也許,回到某個早先的時間點
6. 將原生程式碼庫推送到遠端程式碼庫
7. 在另一臺機器上取得遠端程式碼庫

安裝Git
在大多數Linix系統(Linux、OS X)上,Git已經被安裝了。你通過傳送下面的命令,可以通過Git自身,把它更新到最新的的開發版本(不推薦)。

git clone https://github.com/git/git

在Windows上,你可以在這裡下載Git的安裝程式。如果你真的需要其他系統的安裝程式,Mac OS X安裝檔案在這裡,Linux的操作指導在這裡

建立一個遠端程式碼庫
很多人喜歡用Github。我個人更喜歡BitBucket,因為它提供了不限制的私有程式碼庫,那是我最需要的。你可以將下列指令轉換到Github上,這些過程是相同的。
那麼,去到www.bitbucket.org並註冊一個賬號。一旦完成,登入後點選最上方的“create(建立)”按鈕。照著填寫表格,勾選私有程式碼庫。你可不想讓其他人來偷窺你的Facebook的殺手級應用的原始碼,對吧。
你現在可以離開BitBucket了,我們在已經有了所有那裡需要的東西了。

設定Git
在我們能用Git工作之前,我們需要做個一次性的配置。為了Git能跟蹤到誰做了修改,我們需要設定你的使用者名稱。我強烈建議你使用與註冊BitBucket賬號相同的使用者名稱和電子郵箱地址。傳送這些命令,相應地替換掉其中的“your_username”和“your_email@domain.com”(注意引號):

git config --global user.name "your_username"
git config --global user.email your_email@domain.com

我們也會設定推送(push)的預設值為‘simple’。要了解這是什麼意思,快速閱讀我之前釋出的關於推送的預設值(非必須)。傳送這條命令:

git config --global push.default simple

我們都設好了。你無需在你的機器上再重複這些配置,但如果你在另一臺機器上工作的話,不要忘記這些配置。如果你忘記做初始的配置,Git不會允許你提交任何東西,這會讓你困擾。

建立一個原生程式碼庫
作為例子,我們會假裝我們有一個網站(無所謂技術)存在於我們機器上的‘workspace’資料夾下的’my_site’資料夾內。在命令列中,去到你的站點的根資料夾。在OS X和Linux上:

cd ~/workspace/my_site/

在Windows上:

cd c:\workspace\my_site

我們首先需要告訴Git這個資料夾是我們需要跟蹤的專案。所以我們傳送這個命令來初始化一個新的本地Git程式碼庫:

git init

Git會在my_site資料夾內建立一個名為.git的隱藏資料夾,那就是你的原生程式碼庫。

載入(Stage)檔案
我們現在需要命令Git我們需要載入(stage)所有專案檔案。傳送:

git add .

最後的“.”符號的意思是“所有檔案、資料夾和子資料夾”。假如我們只想要把特定檔案新增到原始碼控制中去,我們可以指定它們:

git add my_file, my_other_file

提交檔案
現在,我們想要提交已載入(staged)的檔案。閱讀“新增一個時間點,在這裡你的檔案處在一個可還原的狀態”。我們提交我們的檔案時,總是附帶著有意義的註釋,描述了它們現在的狀態。我一直用“initial commit”來作為第一個提交的註釋:

git commit -m "initial commit"

就這樣。現在你隨時都可以回滾到這個提交狀態。如果你有需要檢查你現在的已載入(staged)和未載入(unstaged)檔案的狀態、提交等,你可以詢問git的狀態:

git status

建立分支
建立分支是你建立程式碼的獨立版本的動作,獨立於你的主幹分支。預設地,每次你提交到Git的檔案都會被儲存到“master(主幹)”分支。
現在我們來說說,你想要向專案裡新增一個功能,但你想要能夠回滾到現在版本,以防出現差錯,或者你決定要放棄這個功能。這就是你建立分支的時候了。建立並同時切換到你新建的分支,傳送:

git checkout -b new_feature

或者,你可以先建立一個分支然後手動切換,就像這樣:

git branch new_featuregit checkout new_feature

要看你現在專案下所有的分支,傳送這個:

git branch

現在你可以在你的專案上無所顧忌地做任何你想做的:任何時候,你都可以回到你建立分支前的狀態。注意,你同時可以有多個分支,甚至可以從一個分支上再建立一個分支。

合併分支
當你對你的新功能滿意了的時候,你想要把它加到主幹分支上。當你在你的新功能分支上時,你首先需要載入(stage)並且提交你的檔案:

git add .git commit -m "adds my new feature"

然後你移到你的主幹分支:

git checkout master

像這樣合併:

git merge new_feature

此時,你的主幹分支和你的新功能分支會變成一樣的了。

丟棄分支
相反,如果你打算丟棄你在分支裡做的修改,你首先需要載入(stage)你的檔案並且在分支裡提交:

git add .git commit -m "feature to be discarded"

然後,你移到主幹分支:

git checkout master

現在,你的程式碼處於你建立分支之前的狀態了。

刪除分支
如果你要把你的分支合併到主幹分支,從主幹(master)分支上傳送:

git branch -d new_feature

假如修改已經合併了,它只會刪除分支。假如分支沒有合併,你會得到一個錯誤資訊。刪除一個未合併的分支(通常你不想保留的修改),你需要傳送一樣的命令附帶一個大寫D。意思是“強制刪除分支,無論如何我不想要它了。”:

git branch -D new_feature

回滾到之前的提交狀態
在某些時候,你可能想要回到之前的程式碼版本。首先,你需要找到你想回到哪個版本。要看所有的完成了的提交,傳送:

git log

這會輸出你的提交的歷史記錄,像這樣:

commit ca82a6dff817ec66f44342007202690a93763949Author: your_username your_email@domain.comDate: Mon Nov 4 12:52:11 2013 -0700 changes the frontpage layout
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7Author: your_username your_email@domain.comDate: Mon Nov 4 11:40:33 2013 -0700 adds my new feature
commit a11bef06a3f659402fe7563abf99ad00de2209e6Author: your_username your_email@domain.comDate: Mon Nov 4 10:37:28 2013 -0700 initial commit

如果你想回到“adds my new feature”這個提交,簡單地用提交的ID做簽出(checkout)(我通常只用到ID開頭的9個字元)

git checkout 085bb3bcb

你也可以遷出到一個新的分支,像這樣:

git checkout -b my_previous_version 085bb3bcb

只是別太瘋狂了!你的分支越複雜,就越難確定你真正在做什麼。

推送到遠端程式碼庫
在第一次你想推送一個原生程式碼庫到遠端程式碼庫時,你需要把它新增到你的專案配置裡。像這樣做:

git remote add origin https://your_username@bitbucket.org/your_username/name_of_remote_repository.git

注意這裡的“origin”只是一個習慣。它是你的遠端程式碼庫的別名,但是你可以用其他任何你喜歡的詞。你甚至可以有多個遠端程式碼庫,你只需要給它們起不同的別名。

之後,你想要推送你的原生程式碼庫的主幹分支到你的遠端程式碼庫:

git push origin master

如果你使用Bitbucket,在這時,你會被請求輸入你的密碼。照做,你的原生程式碼庫會被推送到你的遠端程式碼庫上。

取得遠端程式碼庫的一份本地拷貝
如果你還沒有一份遠端程式碼庫的本地版本(例如,如果你在另一臺機器上開始工作,這臺機器上還沒有用過這個專案),你首先需要拷貝(clone)它。去到你的程式碼庫想要拷貝到的資料夾下,併傳送:

git clone https://your_username@bitbucket/your_username/name_of_remote_repository.git

另一方面,如果你已經在本地的專案上工作了,只是想從遠端程式碼庫上取得它最新的版本,移動到專案的根目錄下,併傳送:

git pull origin master

別名
Git允許你為你常用的命令建立快捷方式(別名)。例如,如果你不想每次都輸入git commit -m “some comment”,而是輸入git c “some comment”,你可以向你的git全域性配置裡新增一個別名來實現,像這樣:

git config --global alias.c 'commit -m'
git config --global alias.c 'commit -m'
git config --global alias.co 'checkout'
git config --global alias.cob 'checkout -b'
git config --global alias.br 'branch'
git config --global alias.m 'merge'
git config --global alias.a 'add .'
git config --global alias.s 'status'
git config --global alias.dbr 'branch -d'

進一步 當然,還有比這些更多的Git內容。如果你想要更瞭解Git,我推薦官方文件和教程,你可以在http://git-scm.com/documentation找到。
有任何建議、技巧和問題?在下面留言!


參考資料:
1.Git簡易指南:http://rogerdudler.github.io/git-guide/index.zh.html
2. 開源軟體架構翻譯計劃-Git:http://www.ituring.com.cn/article/17501?q=git


原文連結:Nico
譯文連結:15分鐘學會使用Git和遠端程式碼庫
譯者資訊:伯樂線上-cjpan
我的部落格:人微言輕

相關文章