## 安裝、登入 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 ``` :::