內容標題
GitHub 是什麼
GitHub 是最大的 git server。 在裡面,你可以看到他人的開源碼,並與他人交流合作,同時也能貢獻自己的專案個他人,而他人也能建立回饋或幫助你更好的完成,建立互動。
那他跟 git 有什麼差別呢?git 是工具,GitHub 是一個 server (網站)。
建立專案
首先我們要先在 GitHub 建立我們自己的帳戶。建立完成後,會要求填一些資訊,填完後就可以開始了!當我們登入進去後,在做手邊會看到一個 Repositories,使用者可以在這裡建立專案,並上傳或更改,這裡我們點一下綠色的 new。
接著我們來填入資訊。首先是最上面的 Repository name,這邊使用者可以填入他們希望這個專案要叫什麼名字,例如我這邊填入 git-practicing。但要記住如果有空格,git 會自動把空格取代成 - 。中間會有一個 Description,這是用來簡介我們的專案,不一定要填入。接著可以設定這個專案要私人還是公開的,這邊我把他設成公開。最下面的是關於這個專案的一些注意事項或是介紹,但不是直接輸入,而是由 README.md 來呈現,這邊我們就不勾起來了。至於 .gitignore 跟 licence 我們之後會介紹。所以看起來會像這樣:
因為我們專案裡還沒有檔案,所以會跳出 Quick setup,而裡面的內容就是我們接著要做的:
現在我們可以在自己的本地端建立專案,接著把專案 push 過來:
# 以下是在自己的電腦上建立一個資料夾
$ git init
Initialized empty Git repository in /Users/justin/Desktop/discuss_git/.git/
# 建立 test.py 檔
$ echo "print("hello")" > test.py
# 加到 staging area
$ git add test.py
# commit 出去
$ git commit -m "test.py"
[master (root-commit) e723c13] Add test.py
1 file changed, 1 insertion(+)
create mode 100644 test.py
接著我們可以看到 Quick step 給我們的方式:
# 遠端連接到 GitHub 上面的專案。一個專案只要輸入一次就好。
$ git remote add origin https://github.com/Justin900429/git-practice.git
# 將本地端的資料推送到 GitHub 的 server,當要更新遠端資料庫時就要輸入
$ git push -u origin master
接著我們重新整理 GitHub 的頁面,就會看到資料都上傳了:
git remote add
剛剛在輸入git remote add
的時候,後面跟的那長串就是我們 GitHub上專案的位置。事實上,那是有規則的,其中 [account name] 是自己的帳戶名稱,[repository name] 是 GitHub 專案的名字:https://github.com/[account name]/[repository name]
git push
我們先解釋第二行,再回頭解釋 origin 代表的是什麼。git push
可以想像就是把本地資料推到遠端,而後面就是要推到哪裡,master
指的是把本地的 master 分支推上去。當遠端分支沒有 master 分支,遠端會自動建立,但如果有,資料就會推到遠端的 master。而-u
代表的是 upstream,可以想像說我們指定某個遠端分支的最新 commit,而我們上傳到這個 commit 節點之後。之後在 push 的時候不用再打後面那些,可以直接輸入git push
。origin
我 們這邊的 origin 指的是遠端伺服器的代名詞,既然是代名詞,我們當然可以取其他的名字,整合上面的知識,這段指令就會是:
# 將本地的資料夾連結到遠端的伺服器,並將遠端伺服器的叫做 justin_is_handsome
$ git remote add justin_is_handsome https://github.com/Justin900429/git-practice.git
# 將本地 fruit 的分支內容更新到遠端 justin_is_handsome
$ git push -u justin_is_handsome fruit
Pull
假如說我現在在 GitHub 上面做修改,同時也想把遠端做的修改更新回本地端,此時就要用 pull 指令。在 GitHub 上修改內容可以直接點選右上角的筆:
此時修改完畢後變:
之後在 GitHub 上面就可以 commit 了。GitHub 上面有圖形可以讓我們看到我們的 commit,位置在 Insight -> Network:
從圖上我們就可以看到有兩個 commit,而我們本地端只有一個 commit,如果想要更新本地端,輸入:
# 把遠端的資料 pull (拉) 過來
$ git pull
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/Justin900429/git-practice
e723c13..6047c6b master -> origin/master
Updating e723c13..6047c6b
Fast-forward
test.py | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
此時我們輸入 git log --oneline
就可以看到剛剛在 GitHub 上的修改都更新到本地端了!
# 用 log 查看 commit 的狀態,並且以一行顯示
$ git log --oneline
* 6047c6b (HEAD -> master, origin/master) Update test.py
* e723c13 Add test.py
Clone
假如說今天我們在 GitHub 上看到很有興趣的專題,想要拿一份到自己的本地端,此時就可以用 git clone
了!我這邊就用我自己的來做示範,我點進去 c_plus_practice 這個資料夾,可以看到綠色按鈕寫著 Clone or download,點下去後複製長串的 http:
之後,回到 terminal,選定自己某個資料夾並輸入:
# 後面的網址是剛剛複製的那長串
$ git clone https://github.com/Justin900429/C_Plus_Practice.git
此時在那個資料夾就可以看到剛剛那些東西了!
Pull v.s. Clone
其實使用 clone 跟 pull 的差別就在與資料夾有沒有連接遠端。像我們剛剛第一次抓下來,還沒有做連結,就要使用 clone,之後當作者更新,我們也想看到最新的,此時用 git pull
就好!另外,我們使用 git remote add
也是和遠端做連結喔!
Pull Request a.k.a PR
如果今天使用者在 GitHub 上看到一些很有興趣的專案,想要跟他一起合作或維護,於是就需要用到 PR。GitHub 有個規定,想要跟他人合作,需要做幾件事:
- 先 Fork 一份他人的專案到自己的 GitHub 上,使自己能有完整權限更改內容
- 改完後,如果是遠端改就不用 Push,但如果是本地端修改完成,就需要 Push 回 GitHub。
- 此時向作者提出自己改動 (也就是 PR) 哪些,當作者審核過後,就可以把使用者的修改 Merge 到他的專案
- Fork
其實 Fork 有點像複製,跟 Clone 不太一樣的事,前者是複製到 GitHub 上,後者是複製到本地端。
當我 Fork 完後,我的 GitHub 上就會出現這個 Repo:
之後就可以 Clone 回來自己的本地端了!
- Pull Request
當我更改完後 push 回我的 GitHub 時,此時就要在 Fork 來的那份,點 Pull request,並點選 New pull equest,此時就可以發 PR 給原作者了,記得要把自己做了那些改變,並且結果為何都寫清楚喔!但要不要接受還是要看作者的意願!
小結語
今天我們分享 GitHub 的一些功能, 明天決定介紹 Markdown 的語法!
參考資料
- 為你自己學 Git (高見龍 著)
- missing semester from MIT