---
# System prepended metadata

title: GitHub相關
tags: [github]

---


## 安裝、登入 git
:::success
:::spoiler **git 安裝**
1. [**至git官網**](https://git-scm.com/)

2. 點擊`Downloads`
   ![image](https://hackmd.io/_uploads/SkkF0Mg1C.png)

3. 依電腦選擇安裝的系統類別
   ![image](https://hackmd.io/_uploads/By920zgyC.png)

4. 依電腦選取下載的版本
   ![image](https://hackmd.io/_uploads/S1WW1QgJ0.png)
   
5. 下載後安裝Git
   >![image](https://hackmd.io/_uploads/Skg-Vy7l1R.png)
   >
   >>`預設編輯器`建議選取已安裝的`VSCode`
   >>![image](https://hackmd.io/_uploads/Hkm31mgk0.png)

- 若需變更`預設編輯器`指令, 於命令列輸入以下指令指定誰為預設編輯器
   ```
   git config --global core.config "code -w"
   ```

6. 確認安裝
   開啟`cmd`輸入`git --version`, 出現版本訊息為安裝成功
   ![image](https://hackmd.io/_uploads/BJaufme1R.png)
:::
:::success
:::spoiler **git登入**
首次安裝並使用git時, 會在commit時顯示以下失敗訊息
![image](https://hackmd.io/_uploads/BkAAkVl1C.png)

由於本地端git未進行登入, 遠端的guthub需要知道上傳的人是誰
所以會要求先填寫資料進行登入

1. 依系統要求填寫信箱 姓名
   ```
   -- global 的部分依需求調整, 若填寫了--global代表全域
   該電腦進行的git動作皆以該登入帳戶進行動作

   git config --global user.email "信箱帳號"  
   git config --global user.name "使用者姓名" 
   ```
:::
## 安裝、登入 NET.Framework
:::info
:::spoiler **NET Framework 安裝**
1. [**搜尋至NET.Framework官網**](https://dotnet.microsoft.com/en-us/download/dotnet-framework)

2. 點選版本
   ![image](https://hackmd.io/_uploads/SyYLVLek0.png)

3. 點選`運行應用`
   ![image](https://hackmd.io/_uploads/HkD4EUe1R.png)

4. 安裝
   ![image](https://hackmd.io/_uploads/BJ7GBLe1A.png)

:::
:::info
:::spoiler **NET Framework 登入**
1. 首次`push`時, 可能會需要登入確認身分
   ![image](https://hackmd.io/_uploads/BJY8sLx1C.png)

   可以選擇`瀏覽器登入`
   或`code終端登入`
   

:::

## 遠端庫和本地端相關操作
:::success
:::spoiler **1.建立專案的遠端庫**
1. [**進入Github建立新儲存庫**](https://github.com/new)

2. **填寫儲存庫資訊, 並點擊`Create Repository`建立儲存庫**
   - [x] `Repository` **儲存庫名稱**(不可中文)
   - [ ] `Description (optional)` **描述說明**
   - [x] `Public || Private` 設置**公開**或**私人**
   - [ ] `Add a README file` 是否建立**說明文件**

3. **進入該檔案右上角綠色Code複製網址**

   新的儲存庫未有檔案時, 顯示如圖
   點擊右側`複製圖示`複製網址
   ![image](https://hackmd.io/_uploads/Hyy4zeyJA.png)
:::
:::success
:::spoiler **2.建立本地端與遠端庫的節點連接**
1. **本地端建立專案用資料夾**
   並以`VSCode` 或 `GitBashHere` 開啟

2. **輸入`git init`執行git初始化**

3. **和本地端專案連結** , 輸入
   ```
   git remote add 遠端節點名稱 github儲存庫網址(步驟3)
   ```
   GitHub遠端庫預設節點名稱為`origin`
   ```
   範例:
   git remote add origin https://github.com/帳號/專案名稱.git
   ```
:::
:::success
:::spoiler **3.將遠端庫的資料更新至本地端(pull)**
1. 開啟已建立連結的資料夾 (見:2.建立本地端與遠端庫的節點連接)
2. 以`VSCode`或`GitBash`開啟終端機
3. 輸入`git pull 遠端節點名稱 分支名稱`
   ```
   範例:
   git pull origin master
   ```
4. **將資料確認放到哪個本地分支**
   ```
   git checkout master(可自訂義的分支名稱)
   ```
   
- **補充** : GitHub遠端庫預設分支為`main` , 可在遠端庫左上角看見目前的分支為何
  ![image](https://hackmd.io/_uploads/ry-2TWv1R.png)
:::
:::success
:::spoiler **4.將本地端資料更新至遠端庫(push)**
1. 建立檔案或修改內容後可輸入`git add 欲上傳的檔案名稱` , 如:
   ```
   git add index.php
   ```
   欲上傳所有檔案可用 .
   ```
   git add .
   ```
2. 將欲上傳的Add檔案, 增加註解說明此次變更內容, 輸入:
   ```
   git commit -m "修改註記"
   ```

3. 將所有已commit的檔案上傳至預設的節點和分支, 輸入:
   ```
   git push
   ```
   欲上傳至指定節點或分支可用
   ```
   git push 節點名稱 分支名稱
   ```
   
- **補充1** : `git status` 可檢查已被納入add的檔案有哪些
- **補充2** : 不確定檔案分支、節點, 可用
  `git branch`查詢分支 , `git remote`查詢節點名稱
- **補充3** : GitHub遠端庫, 預設節點為`origin` , 預設分支為`master`
- **補充4** : ==首次==`push`執行`commit`時, 若未指定分支
  自動以該遠端庫設置的分支, 建立分支
:::




:::success
:::spoiler **專案說明(README. md)**
- **開啟編譯過的內容, 對本地端`README.md檔`進行編寫**
    可在`README.md`填入該專案的說明, 而`README.md`有專屬語法
    可於`VSCode`以快捷鍵開啟雙視窗, 顯示編譯過的內容
    快捷鍵 : `CTRL+K 放開 按V`

- 遠端庫未勾選`README.md`, 可在`VSCode`自行建立`README.md`
  編寫完內容後用`push`進行上傳
:::
:::success
:::spoiler **遠端庫和本地端不同步, 導致無法上傳**
- **前情提要** : 
  遠端庫已有資料、檔案、commit紀錄
  本地端也有資料、檔案、commot紀錄
  但遠端庫與本地端兩個資料是不同的, 不同步


- **方案一** : 以本地端為主, 刪除遠端專案 重建新專案 , 將本地端push上去(不建議)

- **方案二** : 確定使用本地端進度, 捨棄遠端庫進度, 將本地端資料強制覆蓋掉遠端資料
  於`push`後方加上`-f`,  意思force(強制), 如 : 
  ```
  git push 節點 main -f
  ```

- **方案三** : 將遠端庫資料pull下來, 以人工方式將兩份資料作對比調整至本地端資料後
  再用`-f`強制`push`上去

- **補充** : 若因檔案衝突, 會顯示要留哪些資料等四種選項, 依需求選擇
  - **選擇本地更改** : `---Accept Current Change`
  - **選擇遠端更改** : `---Accept incoming Change`
  - **接受兩者改變** : `---Accept both Change`
  - **顯示比較變化** : `---Compare Change`

:::
## 相關指令
:::info
:::spoiler **節點(remote)相關指令**
- `git remote -h` 查詢remote的相關指令 : 
- `git remote` 檢查已設定的節點, 顯示出所有節點名稱
- `git remote -v` 顯示節點詳細資料
  (pull和push的位置, 通常是同一個網址, fetch==pull)
:::
:::info
:::spoiler **分支(branch)相關指令**
- `git branch` 顯示可用分支名稱
- `git branch 自定義分支名稱` 建立分支
:::
:::info
:::spoiler **切換(checkout)**
- `git checkout 欲切換的分支名稱` 切換至指定分支
:::
## git clone 複製專案
:::success
:::spoiler **將他人專案複製下來(git clone)**
1. 至GitHub取得專案的下載網址
   ![image](https://hackmd.io/_uploads/HJ_Y9GDy0.png)

2. 於資料夾開啟`git bash` 輸入 `git clone 下載的網址`

- **補充1** : 此時輸入`git remote`會顯示以預設的節點`origin`作為節點
- **補充2** : `git remote -v` 可顯示檔案原作者的網址連結
:::
:::success
:::spoiler **無原作者開放之權限, 如何push**
- **前情提要** : 
  若修改clone下來的內容後, 因沒有原作者開放的權限, 
  以無法push更新至原作者的遠端庫, 只能push自己的帳號下 

1. `git remote add 新節點 自己的新專案網址`
    
2. `git push 新節點 main`
:::
:::success
:::spoiler **查看原作者的後續更新內容**
1. 輸入 `git remote -v ` 顯示該專案的所有節點資訊

2. 選擇原作者節點 (預設 : `origin`)

3. 輸入 `git pull origin main` 將原作者內容pull下來
:::

## GitHub 其它功能
:::warning
:::spoiler **Github Page : 將GitHub專案內容以靜態html渲染出來**
1. 進入專案 --> 上方`Settings` --> `pages`
   ![image](https://hackmd.io/_uploads/BJm2CQP10.png)
     
   ![image](https://hackmd.io/_uploads/ryoC0XvkC.png)

2. 點開並選擇分支
   ![image](https://hackmd.io/_uploads/r1jIxED1C.png)
   

3. 選擇資料夾
   ![image](https://hackmd.io/_uploads/HkbogNvkC.png)

4. 點擊`Save`後, 上方顯示網址(生成與認證需要時間)

- **其他補充** :
  - `custom domain` == 收費網址
  - 一個專案可以建立一個page
  - 設置完GitHubPage後, 網址如下
    `github使用者帳號.githu.io/專案名稱`
    例 : https://popob2.github.io/POPOB2/PHP_Basic_1
:::
:::warning
:::spoiler **在瀏覽器以VSCode網頁模式編輯專案**
1. `GitHub` --> 指定專案 --> 鍵盤按`>`鍵, 開啟網頁編輯模式
   ![image](https://hackmd.io/_uploads/BkGNUQDy0.png)
:::


## 狀態
### 暫存區
:::danger
- **已更新至暫存區, 會被commit上去(已Add)**
  顯示綠字, 右側為A
  ![image](https://hackmd.io/_uploads/rkFttmxy0.png)

- **未更新至暫存區, 不會被commit上去(未Add)**
  顯示綠字, 右側為U
  ![image](https://hackmd.io/_uploads/Sk0cF7e1C.png)

- 取消暫存
  ```
  取消所有暫存
  git reset HEAD -- .

  取消一個指定檔案暫存
  git reset HEAD -- 檔名

  取消數個指定檔案暫存
  git reset HEAD -- 檔名 檔名 檔名
  ```
:::

## git基礎洨知識
### 
:::danger
:::spoiler
- **remote** : 本地指向哪個遠端庫的通道
  此例可知 : 建立A通道 從A庫獲取A資料至本地修改, 建立B通道將修改後的資料上傳至B庫
  ```
  一個檔案兩個remote

  git remote add 通道名稱A 遠端庫網址A
  我使用pull 通道A ,從遠端庫網址A 獲取專案至本地
  
  git remote add 通道名稱B 遠端庫網址B
  我使用push 通道B ,將修改過的本地資料 更新到遠端倉庫B
  ```
  
:::
  
