# 四 、 Git Hub 為何物 ? ###### tags: `GIT101` `進度筆記` `Lidemy心得``2020六月第三週` ## Repository(共享專案) Git 可以讓大家多人協作共用專案 , 把這個專案上傳上去 , 可以共享這個專案 。 在專案底下開個 .git 資料夾 , 相關的東西放進去 , 就可以達成多人協作 。 ## Git vs GitHub Git 是版本控制的程式 , Git Hub 最主要是可以放 Git Repository 的地方 。 ## GitHub 基本功能 顯示你有幾個檔案: ![](https://i.imgur.com/9SgyBbx.png) 顯示你有幾個 Branch: ![](https://i.imgur.com/iYdfLu2.png) 點 Commits 後 , 最右邊的編號可以看到這個 Commit 改了甚麼東西 。 點檔案後可以看到是誰最後修訂程式碼。 issues: 對專案有問題可以提出、留言、討論的地方 。 Explore: 可以看他人的專案 。 ## 上傳你的專案到 GitHub 新建 Repository: ![](https://i.imgur.com/nySwSgM.png) Create a new repository 底下會有 Repository name 要你輸入專案名稱 。 Description: 要你為這個專案描述 。 Private 選項是要收費的 , 因此可選 Public 。 都好了後可以 Create repository(創建專案) 。 ![](https://i.imgur.com/DwpXjdQ.png) ...or create...: 還沒有建立專案的話 , 可以照著步驟做 。 ...or push...: 有專案(repository)的話 , 可以用 `git remote add origin https://github.com/帳號ID/test.git` 直接遠端加入一個專案到 GitHub 上 。 `git push -u origin master` 把本地專案推上去 "-u" 表示設定到 origin master 。 設定好後會推上去你在 GutHub 的專案(推上去前會要登入你的帳號密碼) , 如下: ![](https://i.imgur.com/FczTISi.png) 推上去後可以去你的 GitHub 專案位置看一下同步狀況: ![](https://i.imgur.com/1HKKRml.png) 檔案檔案都有出來則表示成功 。 ## Git Push ! ### 修改檔案後如何同步到 GitHub ? 假設你今天修改了一個檔案叫 "code.js" , 用 `git status` 查看會發現它還沒被 staged ,於是你 趕緊用`git commit -am "GitHub"` 指令去 commit 它: ![](https://i.imgur.com/GKSCbca.png) 再用指令 `git push -u origin master` "推"上 GitHub: ![](https://i.imgur.com/WjfQaHC.png) 好了後發現檔案在6/19號新增了 , 並且於修改的時間點上點 GitHub , 或最右邊的 ID 可以進去看修改了些甚麼: ![](https://i.imgur.com/VUSPNRj.png) ### 如果你有 branch也想同步到 GitHub ? 假設你新增了一個 branch 叫做 "hey" , 這時候上傳的指令即為 `git push origin hey` : ![](https://i.imgur.com/RYUNRpj.png) 同樣可以看到你在 GitHub 上有幾個 branches: ![](https://i.imgur.com/r53awuN.png) ### 如何從 GitHub 線上將 Repository pull 下來 ? 在 GitHub 上也可以改檔案 , 點你欲修改的檔案旁會有個鉛筆 , 進行修改: ![](https://i.imgur.com/JctMv7L.png) 修改好後 , GitHub 會幫你產生 Commits , 同時你也可以描述這個檔案有甚麼更動 , 好了後按下 Commit changes ~ ![](https://i.imgur.com/VToULwh.png) 同時可以在 GitHub 上看到你修改過的檔案 , 會顯示 Update: ![](https://i.imgur.com/KqjTPPa.png) 此時也因為本地自己電腦的檔案並不是最新的 , 因此需要從 GitHub Pull 下來! 使用指令 `git pull origin master` 將檔案"拉"回本地電腦 , 如果有衝突就解決! ![](https://i.imgur.com/8iHBzdX.png) ### 衝突解決法: 假設你今天在 GitHub 有人跟你本機的電腦都修改了同一份檔案 , 而你在本機電腦操作 CLI 並把檔案"拉"回來的時候發現: ![](https://i.imgur.com/ztbmNgB.png) 有個衝突(CONFLICT)產生 ! 這時候就可以用 `vim 你修改的檔案名稱` 去看哪裡出了問題: ![](https://i.imgur.com/TH7Aqtl.png) 假設我將第六行修改成這樣: " You:yooooooooooo~ 123123456456 " 。 解決後記得合併 Branch: 用 `git add 名稱` 將檔案 staged 再用 `git status` 看狀況 , 確定沒問題後 , 將檔案加入專案 `git commit -am "專案名稱"` 並將檔案"推"上 GitUub `git push origin master` ![](https://i.imgur.com/NaZL9TK.png) 如此在 GitHub 上看見的檔案即為你剛剛修改好後的檔案 ! ### 看到不錯的 Repository 要怎麼下載回來 ? 以中文文案排版指北為例 , 其可在 GitHub 上 Clone or Download , 把檔案從伺服器複製一份現有的 Repository 或是直接下載: ![](https://i.imgur.com/EgsjKv5.png) 如果用 Clone with SSH , 則需要在 USER 電腦上用指令 `git clone git@github.com:xxxxx` 將檔案下載回來 。 ### 如果下載 Repository 時錯誤怎辦 ? ![](https://i.imgur.com/7oT50at.png) 這是因為沒有 SSH Keys ! 你需要設定一個金鑰匙來讓 GitHub 認得你的電腦; push 或是 clone 時,因為 GitHub 還不認得我的帳號是這台電腦的 User,所以要設定 SSH 的公開金鑰來讓 GitHub 認識 , 每台電腦只要設定一次 ,需開啟 CLI 輸入: `$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"` 來創造一個 SSH 鑰匙! 輸入後會發現: ![](https://i.imgur.com/Vavm25B.png) Generating public/private rsa key pair. 表是根據 e-mail 帳號創造新的 SSH Key 。 Enter file in which to save the key (/c/Users/Haku/.ssh/id_rsa): 表示要 User 確認儲存位置 , 沒問題就按下 Enter 。 Enter passphrase (empty for no passphrase): Enter same passphrase again: 需要 User 輸入密碼和再一次輸入相同密碼 , 如果不設定 , 按 Enter 跳過即可 。 如果要把 SSH-Key 金鑰加入 ssh-agent , 以後使用這個金鑰就不用輸入設定的密碼 。 開啟 ssh-agent: `eval "$(ssh-agent -s)"` 將金鑰加入 ssh-agent: `ssh-add -K ~/.ssh/id_rsa` 再次輸入密碼就成功 add-in ! 而在 User 電腦中 , .ssh/ 下會有 id_rsa 、 id_rsa.pub 分別表示私人金鑰與公開金鑰 , 如果需要在 GitHub 上下載他人 Repository 則需要自己的 ssh 以及他人 ssh , 因此必須公開金鑰: `cat ~/.ssh/id_rsa.pub` 輸入後會看到以 "ssh-rsa" 開頭且後面接好幾行的亂碼(?) , 並以"個人信箱"作結尾 , 公開金鑰 , 將其複製後 , 去 GitHub 網站找個人設定 , 並找到 SSH and GPG keys , 並把複製內容貼上 , 就可以上傳公開金鑰到 GitHub 上了 。 成功後再去 clone 公開的 repository 就會看到: ![](https://i.imgur.com/2KorhNQ.png) ### 假設想在 GitHub 跟他人或團隊一起合作專案? 如果在本地 commmit 後無法推上 GitHub 的話 , 如果真的覺得專案有地方可以更正的話 , 可以 fork: ![](https://i.imgur.com/nf8WZud.png) 按下後 , 會告訴你在 forking , 會被帶到有辦法寫入資料的新專案頁面。 之後你就能在你 clone 回來的專案底下 , 進行修改檔案後 , commit 這個專案 , 並把專案 push 到 GitHub 上你的帳號上 。 流程大致是: 第一步 , clone 合作專案; 第二步 fork 下來 , 這樣就有權限修改(管理員也可以給他權限); 最後 , 修改檔案並 commit 好後 , 把專案 push 上去 ! [![](http://img.shields.io/static/v1?label=SlackMe&message=JhenYu&?style=for-the-badge&logo=appveyor=Slack&color=0095FF)](https://lidemy.slack.com/app_redirect?channel=U014VGFNE6S) [![](http://img.shields.io/static/v1?label=Linkedin&message=JhenYu&?style=for-the-badge&logo=appveyor=Slack&color=00BFFF)](www.linkedin.com/in/jhen-yu-shih-082b29129) [![](http://img.shields.io/static/v1?label=→@IG&message=JhenYu&?style=for-the-badge&logo=appveyor=Slack&color=FF004C)](https://www.instagram.com/haku2zas/?hl=zh-tw)