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

3. 依電腦選擇安裝的系統類別

4. 依電腦選取下載的版本

5. 下載後安裝Git
>
>
>>`預設編輯器`建議選取已安裝的`VSCode`
>>
- 若需變更`預設編輯器`指令, 於命令列輸入以下指令指定誰為預設編輯器
```
git config --global core.config "code -w"
```
6. 確認安裝
開啟`cmd`輸入`git --version`, 出現版本訊息為安裝成功

:::
:::success
:::spoiler **git登入**
首次安裝並使用git時, 會在commit時顯示以下失敗訊息

由於本地端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. 點選版本

3. 點選`運行應用`

4. 安裝

:::
:::info
:::spoiler **NET Framework 登入**
1. 首次`push`時, 可能會需要登入確認身分

可以選擇`瀏覽器登入`
或`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複製網址**
新的儲存庫未有檔案時, 顯示如圖
點擊右側`複製圖示`複製網址

:::
:::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` , 可在遠端庫左上角看見目前的分支為何

:::
:::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取得專案的下載網址

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`


2. 點開並選擇分支

3. 選擇資料夾

4. 點擊`Save`後, 上方顯示網址(生成與認證需要時間)
- **其他補充** :
- `custom domain` == 收費網址
- 一個專案可以建立一個page
- 設置完GitHubPage後, 網址如下
`github使用者帳號.githu.io/專案名稱`
例 : https://popob2.github.io/POPOB2/PHP_Basic_1
:::
:::warning
:::spoiler **在瀏覽器以VSCode網頁模式編輯專案**
1. `GitHub` --> 指定專案 --> 鍵盤按`>`鍵, 開啟網頁編輯模式

:::
## 狀態
### 暫存區
:::danger
- **已更新至暫存區, 會被commit上去(已Add)**
顯示綠字, 右側為A

- **未更新至暫存區, 不會被commit上去(未Add)**
顯示綠字, 右側為U

- 取消暫存
```
取消所有暫存
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
```
:::