---
# System prepended metadata

title: 四 、 Git Hub 為何物 ？
tags: [GIT101, Lidemy心得, 進度筆記, 2020六月第三週]

---

# 四 、 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=→@ＩＧ&message=JhenYu&?style=for-the-badge&logo=appveyor=Slack&color=FF004C)](https://www.instagram.com/haku2zas/?hl=zh-tw)