內容標題

  1. GitHub是什麼?
  2. 建立專案
  3. Pull
  4. Clone
  5. Pull v.s. Clone
  6. Pull request a.k.a PR
  7. 小結語
  8. 參考資料

GitHub 是什麼

GitHub 是最大的 git server。 在裡面,你可以看到他人的開源碼,並與他人交流合作,同時也能貢獻自己的專案個他人,而他人也能建立回饋或幫助你更好的完成,建立互動。

那他跟 git 有什麼差別呢?git 是工具,GitHub 是一個 server (網站)

建立專案

首先我們要先在 GitHub 建立我們自己的帳戶。建立完成後,會要求填一些資訊,填完後就可以開始了!當我們登入進去後,在做手邊會看到一個 Repositories,使用者可以在這裡建立專案,並上傳或更改,這裡我們點一下綠色的 new

drawing
接著我們來填入資訊。首先是最上面的 Repository name,這邊使用者可以填入他們希望這個專案要叫什麼名字,例如我這邊填入 git-practicing但要記住如果有空格,git 會自動把空格取代成 - 。中間會有一個 Description,這是用來簡介我們的專案,不一定要填入。接著可以設定這個專案要私人還是公開的,這邊我把他設成公開。最下面的是關於這個專案的一些注意事項或是介紹,但不是直接輸入,而是由 README.md 來呈現,這邊我們就不勾起來了。至於 .gitignorelicence 我們之後會介紹。所以看起來會像這樣:

drawing
因為我們專案裡還沒有檔案,所以會跳出 Quick setup,而裡面的內容就是我們接著要做的:

drawing
現在我們可以在自己的本地端建立專案,接著把專案 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 的頁面,就會看到資料都上傳了:

drawing

  • 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

drawing
從圖上我們就可以看到有兩個 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
drawing
之後,回到 terminal,選定自己某個資料夾並輸入:

 # 後面的網址是剛剛複製的那長串
 $ git clone https://github.com/Justin900429/C_Plus_Practice.git

此時在那個資料夾就可以看到剛剛那些東西了!

Pull v.s. Clone

其實使用 clonepull 的差別就在與資料夾有沒有連接遠端。像我們剛剛第一次抓下來,還沒有做連結,就要使用 clone,之後當作者更新,我們也想看到最新的,此時用 git pull 就好!另外,我們使用 git remote add 也是和遠端做連結喔!

Pull Request a.k.a PR

如果今天使用者在 GitHub 上看到一些很有興趣的專案,想要跟他一起合作或維護,於是就需要用到 PRGitHub 有個規定,想要跟他人合作,需要做幾件事:

  1. Fork 一份他人的專案到自己的 GitHub 上,使自己能有完整權限更改內容
  2. 改完後,如果是遠端改就不用 Push,但如果是本地端修改完成,就需要 PushGitHub
  3. 此時向作者提出自己改動 (也就是 PR) 哪些,當作者審核過後,就可以把使用者的修改 Merge 到他的專案
  • Fork
    其實 Fork 有點像複製,跟 Clone 不太一樣的事,前者是複製到 GitHub 上,後者是複製到本地端

    當我 Fork 完後,我的 GitHub 上就會出現這個 Repo

    drawing
    之後就可以 Clone 回來自己的本地端了!
  • Pull Request
    當我更改完後 push 回我的 GitHub 時,此時就要在 Fork 來的那份,點 Pull request,並點選 New pull equest,此時就可以發 PR 給原作者了,記得要把自己做了那些改變,並且結果為何都寫清楚喔!但要不要接受還是要看作者的意願!

小結語

今天我們分享 GitHub 的一些功能, 明天決定介紹 Markdown 的語法!

參考資料

  1. 為你自己學 Git (高見龍 著)
  2. missing semester from MIT
#Git







你可能感興趣的文章

【隨堂筆記】基礎演算法概論

【隨堂筆記】基礎演算法概論

實作 Redux(四):共享結構的物件提高性能

實作 Redux(四):共享結構的物件提高性能

Filter 應用CORS

Filter 應用CORS






留言討論