# Git & GitHub 入門
###### tags: `Git` `GitHub`
教學資源:
[Git文件](https://git-scm.com/book/zh-tw/v2)
[鐵人賽Git 版本控制](https://ithelp.ithome.com.tw/users/20139195/ironman/4770)
[為你自己學 Git](https://gitbook.tw/)
[六角學院Git、GitGub](https://youtube.com/playlist?list=PLYrA-SsMvTPOZeB6DHvB0ewl3miMf-2tj)
[Git 與 Github 版本控制基本指令與操作入門教學](https://blog.techbridge.cc/2018/01/17/learning-programming-and-coding-with-python-git-and-github-tutorial/)
## :pushpin:什麼是 Git?
**git是一個分散式版本控制軟體(Version Control System)**,於2005年釋出。最初目的是為了更好地管理Linux核心開發而設計。但是隨著開發的深入,以及他的許多優點深受人們喜愛,因此越來越多的專案採用git來管理開發。
:::info
- Git 是一個版本控制軟體,藉由它產生一個**儲存庫( git Repository)**
- GitHub 支援 git 程式碼存取和**遠端托管儲存庫**的平台服務,GitHub 的本體是一個 Git 伺服器
:::
### 版本控制
Git在檔案新增、修改、刪除時的每個動作都可以稱為一個「版本」,而Git版本控制則是,幫你追蹤檔案所有的狀態變化。
以下為不同的版本控制:
1. 本地端版本控制 - RCS通過套用任意的補丁,重新產生出每個版本的檔案內容。
2. 集中化版本控制系統 - 有一個伺服器來管理所有版本的檔案,而許多用戶端會連到這台伺服器取出檔案來使用 ex:CVS、Subversion、Perforce。
3. 分散式版本控制系統 - 用戶端不但可以取出最新的檔案資訊,還可以將整個檔案夾備份,假如有任何一個伺服器損壞,就可以採用用戶端的資料來進行還原。
### 為什麼需要Git?
我們經常會面臨檔案新增、修改、刪除的狀況,有時在複製檔案到其他資料夾時會不小心覆蓋檔案前一個的檔案,此時就可以使用**Git回溯資料,找到過去版本的資料(就像時光機一樣!)**。
### Git優點
- 開源免費軟體
- 分散式的版本控制系統
用戶對伺服器的依賴性降低。
- 速度快、體積小
Git 採用快照方式取代複製貼上,建立和切換分支速度非常快。
- 功能強大
Git 最為出色的是它的合併追蹤(merge tracing)的能力。
### 終端機模式指令
在學習、使用 Git 的時候,會有很多機會需要在終端機(Terminal)模式下輸入指令,例如:
```
$ git --version
git version 2.21.0
```
在最前面的 $ 符號是系統提示字元,用於告訴大家==這是一個需要在終端機環境下手動輸入的指令==,而下一行則是指令執行的結果。**使用者在實際輸入指令時若輸入 $ 則會出現 command not found 的錯誤訊息**。
## :pushpin:安裝
[Windows安裝傳送門](https://git-scm.com/download/win)
[mac安裝教學](https://gitbook.tw/chapters/environment/install-git-in-windows)
安裝後輸入指令驗證安裝&版本資訊

### 測試安裝是否成功
```
$ which git
/mingw64/bin/git
$ git --version
git version 2.21.0.windows.1
```
### 終端機
* Win:Git Bash
* 開始 > 搜尋輸入Git Bash
* Mac:終端機
* 輸入「control + 空白」,關鍵字輸入「終端機」
### 個人資料設定
* 輸入姓名
`$git config --global user.name "輸入名字"`
* 輸入個人的 email
`$git config --global user.email "輸入信箱"`
* 查詢 git 設定內容
`$git config --list`
## :pushpin:終端機指令學習
|Windows|MacOS & Linux|說明|
|-|-|:-|
|==cd [路徑]==|==cd [路徑]==|前往資料夾路徑(拖拉資料夾至終端機介面)|
|cd|pwd|取得目前所在的位置|
|dir|ls|顯示資料夾裡的檔案|
|mkdir|mkdir|新增資料夾|
|無指令|touch|開新檔案|
|copy|cp|複製檔案|
|move|mv|移動檔案|
|del|rm|刪除檔案|
|cls|clear|清除畫面上的內容|
## :pushpin:Git常用指令

|指令|說明|
|-|:-|
|==`$git init`==|初始化數據庫,新增本地數據庫 |
|`ls -a` |顯示所有檔案含隱藏檔|
|`$git status`|查詢當前狀態 **要將檔案加入到指定資料夾**|
|==`$git add.`==|將所有檔案加入到索引|
|`git add ____`|將單一檔案加入到索引|
|==`$git commit -m"新增網頁環境"`==|將索引檔案變成一個更新(commit)|
|`$git log`|觀察 commit 歷史紀錄|
|`$git clone數據庫網址`|下載遠端數據庫|
|`$git push origin master`|更新遠端數據庫|
|`$ git add -p index.html`|commit部分內容|


>若在輸入 git init 出現 'git' 不是內部或外部命令、可執行的程式或批次檔。 這個錯誤指令的話
只要打開 環境變數 -> 系統變數,點擊變數 Path,新增以下兩個檔案路徑即可

## :pushpin:新增遠端數據庫repo GitGub上傳
1. 新建好 GitHub 的 Repository
2. `git remote add origin <your url>` *輸入一次即可
3. `git branch -M main` *分支
4. `git push -u origin main` *push到雲端數據庫
5. 往後檔案修改輸入
* 從新增好的遠端數據庫整合

* 從本地新增到遠端數據庫
