學習目標: GitHub 是什麼,利用 GitHub 建立專案或將本地端檔案傳到 GitHub
GitHub 是什麼
他是一個商業網站,是目前全球最大的 Git Server,有許多的開放原始碼的專案都是使用 Github 進行程式碼的管理。
可以想像成「 提供存放使用 Git 專案倉庫(Repository) 的服務,在這裡可以認識到其他厲害的開發者(例如:唐鳳!)可以幫忙參與別人的專案也可以貢獻自己的開發,因此這裡同時也最大的開源社群。
關於 GitHub 的帳號創建可以參考:GitHub — 建立帳戶及設定
在 GitHub 上面開啟新專案
GitHub 遠端與本地端進行串接
這邊有兩種方式開始專案,其實最主要的是最後兩行指令,將檔案加入到 GitHub。
git remote
- 與遠端檔案庫(remote repo)操作有關的指令
- 加入遠端節點:
$ git remote add origin https://github.com/miahsu0330/testGit.git
[補充說明] originorigin 只是一個遠端的代名詞,會取這個名字是因為如果從 Server Clone 下來會是這個代稱。所以如果把上面那句指令翻成中文的話:「為目前所在本地端檔案庫增加一個叫做 origin 的遠端檔案庫」
git push
- 把本地端檔案庫(local repo)推上遠端檔案庫(remote repo)
- 將本地端檔案庫(local repo)推上一個叫做 origin 的遠端檔案庫(remote repo)master 分支:
$ git push -u origin master
#運行時可能會需要輸入 Github 上的 帳號密碼
$ git remote add origin https://github.com/miahsu0330/practice-git.git$ git push -u origin masterUsername for 'https://github.com': miahsu0330Password for 'https://miahsu0330@github.com':
- 參數:
-u
設定 upstream ,在 Git 裡面每一個分支可以設定一個「上游」
Q:為什麼要設定 upstream 呢?
A:如果設定好每次要 Push 時就不用再次輸入「上游」的名稱,Git 就會知道要推往哪個遠端節點,反之如果沒設定,就要每次都輸入遠端節點的名稱。
回到 Github 網站,重新整理後就會看到剛剛輸入的 practice-git
到這裡就完成本地端跟遠端的串接了~
[補充說明]:.md 是什麼
.md 這個檔名不太知道是什麼就上網查了一下,Markdown 是一種輕量級的標記式語言,他的目標為「易寫易讀」,在以前電子郵件中常用的寫法,而 Github 裡被當作專案裡預設的說明。參考資料:
Markdown — 易編易讀,優雅的寫文吧!
Markdown Cheatsheet 中文版
將遠端資料拉回本地端
作法一、git pull
- 將遠端分支資料拉回並合併本地分支
- 寫法:
$ git pull original <branch-name>
- 實際操作:
step1. 切換到新分支:$ git checkout <new_branch>
step2. 從遠端更新程式碼:$ git pull
作法二、git fetch + git merge
- 這種做法是將「拉回」、「合併」這兩個動作分開執行。
- 步驟:
step1. 取得遠端資料分支資料拷貝回本地:$ git fetch
step2. 切換到本地端 master 分支:$ git checkout master
step3. 將本地分支與本地端 master 分支進行合併:$ git merge origin/master
Q:有時候推不上去….
有時候 Push 的時候會出現錯誤
這是因為遠端的版本比你電腦裡的這份更新,因此 Git 不讓你推上去。
解法:先拉回再推
step1. 將遠端分支資料拉回並合併分支: $git pull
step2. 發生檔案衝突,修改檔案內容
step3. 把檔案加入暫存區:$ git add .
step4. 更新本地端分支版本: $ git commit -m '與線上版本不同,解決衝突'
step5. 將本地分支資料推上遠端分支: $ git push
Q:要怎麼 Pull 遠端的 Branch 下來
A:只要在本地端使用 git checkout <branch-name>
,本來不存在的 branch 就會從遠端拉下來了
從 GitHub 下載 Repository 到本地
前面介紹了 Push 及 Pull 都是使用於已有的專案
有時候在 GitHub 上看到有趣的專案,想要下載回來看看,可以按 clone or download,最簡單的方式是直接下載 zip (下載內容),這邊要介紹的方法是 clone 。
git clone
- 複製其他人 GitHub 上的專案,下載的檔案會包含了專案所有的紀錄、分支、標籤等。
- 寫法:
$ git clone <SSH/HPPTS>
- 實際操作:
step1. 複製 URL :https://github.com/borkdude/clj-kondo.git
step2. 把 Repository 的內容下載到本地端:$ git clone https://github.com/borkdude/clj-kondo.git
[補充說明] 使用 Clone 的 Repository 是沒有權限修改的喔!
將別人的 Repository 複製一份成為自己的 Repository
你看了看別人的專案真的很有興趣,想要貢獻一點心力,但我們是沒有權限去修改別人的 Repository !因此我們可以使用 Fork 這個指令將別人的 Repositroy 複製到自己的 GitHub 上。
step1. 到想要 Fork 的原作專案頁面。
step2. 按下 Fork 按鈕,就會將原作專案複製一份到你的帳號底下。
step3. clone 到本地端修改。
接著你就開始修改,覺得自己寫的很棒,想要回給作者,那要怎麼通知原作呢?在 GitHub 上有個專為這個時刻運用的機制:Pull Request(PR)。
step4. Push 回自己的專案。
step5. 在自己的專案頁面按下 「New pull request」發 PR 給原作。
step6. 填寫 PR 的相關資訊,讓原作知道你大概做了什麼事。
step7. 按下「Create pull request」發送 PR 給原作。
如果原作覺得 ok 就會在他的頁面按下「Merge pull request」合併你的 commit。
其實這種不只可以運用在開源專案上,在公司的專案管理也可以用相同的方式來管理每個人的 Commit,這邊可以參考 GitHub 建議的管理專案流程。
Git Flow
當進行多人開發時,會有各種開發及調整的需求,一個沒注意就會發生蓋檔或衝突的問題。
為了解決這些問題,在 2010 年的時候,就有人提出一套「Git Flow」來進行規範。
因此不管是不是開發人員只要是有使用到 Git 都應該了解基本的概念及規則。
Git Flow 主要分成五條支線,以下分別說明每條支線的功能:
master
主要是放穩定可立即上線的版本,因此不會在這條支線上做直接的 commit 都是由其他分支合併過來。
Develop
是所有開發基礎的分支。
Hotfix
緊急修正穩定版本的支線,因此修正完後會合併到 master,同時也會合併到 Develop,避免開發版上線時問題又出現。
Release
為上線前測試的分支,測試完後會合併到 master 及 develop。
Feature
開發新功能的分支,為 Develop 切分出來的支線,待開發完畢就會合併回 Develop。
現今也發展出許多不同的 Flow,畢竟 Git flow 已是十年前的規範,並且分工的不同也會影響 Flow 的運用,因此如果要練習 Git Flow,最好是在實作上學習。
重點整理
- Git 是一個程式,而 GitHub 是一個商業網站,主要是提供存放遠端檔案庫(remote repo)的服務,與 GitHub 相似的網站像是: bitbucket 、 GitLab。
origin
:是遠端檔案庫的代名詞- 本地端檔案庫 ➡️ 遠端檔案庫:
$ git push origin <branchName>
- 遠端檔案庫 ➡️ 本地端檔案庫: 方法一、
$ git pull origin <branchName>
方法二、$ git fetch origin <branchName>
+$ git merge origin/<branchName>
- 複製別人 GitHub 上的專案到本地端檔案庫:
$ git clone <https/SSH>
#注意只是複製在本地端無法 push 回去(因為你遠端上根本沒有相對應的檔案庫) - 複製別人 GitHub 上的專案到自己 GitHub 上:使用 GitHub 上面提供的 Fork 功能。
- Git Flow 是一種協作的規範,來減少團隊協作間的 Git 衝突,但在實務上還是會依據專案投入的人力及職別而變化出不同的規範。