# Git 與 GitHub 的邂逅 > Learing note ###### tags: `Git` `GitHub` ## Git vs GitHub 被 git 控制的一個專案叫做 **repository** * **Git**:版本控制的程式 * **GitHub**:放 Git repository 的地方(其實還有更多功能) ## Git repository 放到 GitHub (創建)流程 1. * **點右上角 + 號,按 New repository**(新建一個 GitHub 的 repository) ![first](https://i.imgur.com/cd5qub4.png) 2. * **Repository name**:輸入名稱 * **Description**:輸入描述 * **課程教學選擇 Public**,目前 Private 也免費 * **按 Create repository**:創建 repository ![second](https://i.imgur.com/IlGCiig.png) 3. * **複製第二部分內容在 git base 貼上,就會上傳(創建)成功** > 講解: **第一個部分是如果沒有任何 repository,使用此方法** **第二個部分是如果有 repository 的使用方法** >第二部分的講解: **git remote add origin https://github.com/bngandan/git-101-test.git** 意思是:架一個名為 origin 遠端的 repository 然後他的位址是後面那段網址 **git push -u origin master** 意思是:將我們檔案,放上 origin 的 master ![third](https://i.imgur.com/vjGImG0.png) ## 在 GitHub 上修改檔案 流程 1. 點開要修改的檔案,旁邊的鉛筆按鈕(Edit this file) 2. 修改完檔案,點底下 commit changes 按鈕(完成 commit,GitHub 完成存檔) ## 更新(上傳)最新 Git repository 到 GitHub 電腦裡面的 git repository 跟 GitHub repository 是一樣的,**只是要同步的話必須手動同步** * **git push -u origin master**:將 master 這個 branch 上傳到 GitHub * **git push origin master**:也是將 master 這個 branch 上傳到 GitHub ### 上傳其他 branch(ex. hey) 到 GitHub 1. **先進入到 hey 的 branch,在輸入下面那行指令** 2. **git push origin hey**:將 hey 這個 branch 上傳到 GitHub (指令最後的 hey 就是代表要上傳的 branch) > ※如果沒有上傳到 GitHub 也就是沒有 git push 的話,GitHub 是不會改變的,所以修改完必須要自行去上傳這個動作,檔案才能同步[color=#db0fab] > ※ 如果 Github 內容比本地 Git repository 還要新,就會無法上傳,必須先 pull 一份到本地 Git,更新本地才可以開始修改,修改完才能進行上傳[color=#db0fab] ## 更新(下載)最新 GitHub repository 到本地 Git GitHub 上面的資料進行修改後,與我們本地的 Git 檔案內容不一樣 **需手動下載下來將本地 Git 更新到最新的內容** * **git pull origin master**:將 GitHub 上面的 **master** 下載下來,並且與本地 Git 進行**合併、更新**(指令輸入後會顯示,已經從遠端 GitHub 的網址下載下來,更改的檔案是哪個,最後與本地 Git 進行**合併**) **狀況劇:** **從 GitHub 下載到本地 Git 怎麼一樣遇到 Conflict(衝突),如何解決?** A:我們先了解狀況,**從 GitHub 下載到本地 Git = 將 GitHub 檔案與本地 Git 檔案合併** 有沒有很熟悉,merge 遇到 conflict,一樣是檔案遇到衝突合併不了,解決方法與合併衝突一樣 來!解答請洽 [Merge 遇到 Conflict](https://hackmd.io/R8XPS2-WS6CX6gDMcEZaqw?view#%E5%90%88%E4%BD%B5%E6%99%82%E9%81%87%E5%88%B0%E8%A1%9D%E7%AA%81-conflict) ## 下載別人的 GitHub repository 到本地 Git 流程 如果今天看到別人的 GitHub repository 滿不錯,要如何下載? 1. 點(右紅色框選處),Clone or download ![](https://i.imgur.com/dYjBtA6.png) 2. 將網址複製(上圖紅色畫線處),到 git base 輸入 git clone 加剛剛複製的連結貼上 Enter,他就會將那份檔案複製一份到本地電腦 ![](https://i.imgur.com/P90aKXt.png) 3. 輸入 cd 加獲得的檔案(進入到檔案內),修改要修改的部分,一樣要 commit ![](https://i.imgur.com/ixNWsjj.png) **※ 最後不能 push 回去,為甚麼呢? A:因為這份檔案是別人的 GitHub repository 我們沒有權限** ## 想要別人 GitHub repository 修改後放自己 GitHub repository 流程 1. 點(右上 Fork) ![](https://i.imgur.com/qAASdxJ.png) 2. 選擇要 Fork 的帳號 ![](https://i.imgur.com/r8d2wr9.png) ▼顯示正在 Forking 到我們的 GitHub 中 ![](https://i.imgur.com/yqmLuDL.png) ▼會發現前面帳號變成我們的名字(成功複製一份到我們的 GitHub 中) ![](https://i.imgur.com/XyvqMkr.png) 3. 下載一份到本地 Git repository[《流程就跟下載別人的一樣》](https://hackmd.io/oxqoRnOLTjKlMGp-LpM2fw?view#%E4%B8%8B%E8%BC%89%E5%88%A5%E4%BA%BA%E7%9A%84-GitHub-repository-%E5%88%B0%E6%9C%AC%E5%9C%B0-Git-%E6%B5%81%E7%A8%8B) (這時下載的是自己 GitHub 的檔案) 4. 修改完,進行 commit,最後你會發現可以 push 回來 ![push](https://i.imgur.com/29r1zne.png) ### 關於下載別人、自己的 GitHub 檔案相關問題 **為甚麼可以 push 回自己的 GitHub 呢?** A:因為你下載的檔案,是從你自己的 GitHub 下載(等於你有權限), push 也是上傳到自己的 GitHub **為甚麼下載別人的 GitHub repository 到本地 Git 沒辦法 push 回去?** A:因為你沒有別人那份 GitHub 檔案的權限,所以無法上傳,反之你有權限就能夠 push ## 如何給別人權限? 1. 點 Settings →點 Invite a collaborator(底下綠色按鈕),授權給其他合作者 ![](https://i.imgur.com/MkPrVDr.png) 2. 輸入要授權的帳號,按下 Add 按鈕 ![](https://i.imgur.com/M2xLHJm.png) 3. 顯示目前授權的對象有誰 ![](https://i.imgur.com/jQCEOeW.png) ## 在 GitHub 執行 Merge branch 流程 優點:能夠直觀的看出哪些地方有做更動,在 Git Merge 就看不出變化 1. **點 Compare & pull request**(發起合併請求) ![](https://i.imgur.com/Wcdc2f1.png) 2. **紅色畫線處(顯示將 hey 合併到 master)**,下面能夠輸入請求標題、敘述,最底下會顯示兩個Branch 的差別 → 接下來就**按 Create pull request** ![](https://i.imgur.com/4Kr0qDN.png) 3. **顯示想要把 hey 合併到 master** ![](https://i.imgur.com/GIPZfX2.png) ▼**往下拉點 Merge pull request** (合併請求讓 hey 合併到 master) ![](https://i.imgur.com/Rh9B4L0.png) 4. **點 Delete branch**,因合併完成後 hey 的資料 master 就有了,不需要 hey 所以刪除,**master 完成更新也刪除 hey 的 Branch** ![](https://i.imgur.com/g3H32jg.png) ## 有個觀念是 GitHub flow 一個專案要如何管理 Branch 1. 要開發新功能時,先創建一個 Branch,開發完上傳 GitHub 2. 使用 GitHub 的 pull request 功能,發一個 pull request 3. 通過之後,將 Branch 進行合併 4. 最後再將開發的 Branch 刪除,只留下有合併完的 master # Git and GitHub 總結 這章節筆記內容: 1. **創建 GitHub 流程** 2. **上傳及下載的指令** **關於同步: Git repository 有更動過就 push 回 GitHub repository GitHub repository 有更動過就 pull 到 Git repository** 簡單講,只要**修改後沒有上傳、下載,另外一邊就不會同步更新** 3. **在 GitHub 上修改檔案 流程** 4. **下載別人的 GitHub repository** 6. **Fork 別人的 GitHub repository 修改後放到自己 GitHub repository 流程** 7. **如何授權自己的檔案給別人** 8. **在 GitHub 執行 Merge branch 流程** 9. **關於 GitHub Flow 的觀念**