--- title: 【軟體】版控工具 Git tags: TTennis Pickup Robot disqus: hackmd --- <h1 style="text-align: center; color: orange;"> 🛠️ 【軟體】版控工具 Git 🛠️ </h1> <h2 style="text-align: center; color: skyblue;">基本知識 & 操作</h2> <h3><font color ="magenza"> 1-1. Git 工具簡介與安裝</font></h3> 我覺得 [youtube 学习呀三木](https://www.youtube.com/watch?v=N6YQlPuAamw&ab_channel=%E5%AD%A6%E4%B9%A0%E5%91%80%E4%B8%89%E6%9C%A8) 很好懂!可以先花個 10 分鐘認識 git 和 github。 * Git 安裝:Windows 用 [Git for Windows](https://gitforwindows.org/);Lunix 就 ```sudo apt install git```。 * 註冊 [Github](https://github.com/)。 ![](https://i.imgur.com/0XnckfI.png =95%x) <h3><font color ="magenza"> 1-2. 生成 Github SSH Key</font> </h3> 出於安全性,我們需要生成一個 SSH Key 讓 Github 可以識別使用者。 只有擁有 SSH private key 的裝置才能打開存放在 Github 上的 public key。 * <font color="yellow"> step1. 開啟 cmd,輸入生成指令。</font> ```= ssh-keygen -t ed25519 -C "your_email@example.com" ``` * <font color="yellow"> step2. 連按三次 enter,產生以下圖形代表生成成功。 </font>![](https://i.imgur.com/ItaXVng.png =60%x) * <font color="yellow">step3. 到畫底線的位置找到 `id_ed25519.pub` 的文件 。</font> ![](https://i.imgur.com/PJv6pgm.png =20%x) * <font color="yellow">step4. 複製裡面的長得像亂碼的公鑰。開頭會是 SHA256,代表用 SHA-2 加密演算法。 </font> ```= SHA256:... ``` * <font color="yellow">step5. 到 GitHub 新增 SSH Key。</font> 右上角圖示下拉選單 $\rightarrow$ settings $\rightarrow$ 左側欄位 SSH and GPG keys $\rightarrow$ 藍色的 New SSH Keys。 ![](https://i.imgur.com/jdUK2lS.png =80%x) --- <h3><font color ="magenza"> 2-1. 創建 repo</font></h3> :::info 我直接**用 VSCode 操作 Git**(而不是在 Git Bash 中打指令)。 VSCode 擴展模組以按鍵代替 git 指令,操作更快速方便、學習也更快。 我會把對應的 Git 指令寫出來,在 Git Bash 中輸入的效果一樣。 ::: * <font color="yellow">step1. ```git init```:在 vscode 中的 source control ,進行初始化。</font> ![](https://i.imgur.com/avteCMG.png =40%x) * <font color="yellow">step2. ```git add .```:新增資料到暫存區 ( Storage Area )。</font> ![](https://i.imgur.com/yO2MDge.png =46%x) $\;\;\;\;\;\;$![](https://i.imgur.com/DuOwuT9.png =43%x) * <font color="yellow">step3. ```git commit -m "your commit msg"```:寫 commit 訊息。</font> ![](https://i.imgur.com/qENJGnJ.png =50%x) :::spoiler 首次用 git 會跳出 Config 錯誤 ![](https://i.imgur.com/5fpPaij.png =70%x) **解決方法如下:** 用快捷鍵 `ctrl + ~` 打開終端機,在右上方「+」的下拉選單中選 Git Bash。 ![](https://i.imgur.com/uAECiJM.png =40%x) 必須在 Git Bash 中輸入以下兩行。 指令的雙引號要留著。另外這個 email 和 name 都是指 GitHub 上的,不能亂取喔。 ```= git config --global user.name "MY_NAME" git config --global user.email "MY_EMAIL" ``` ::: * <font color="yellow">step4. 按下「publish branch」建立分支。</font> ![](https://i.imgur.com/hEN7IFE.png =40%x) :::spoiler 第一次會有些認證確認 <div style="text-align:center"> ![](https://i.imgur.com/rtGoQPl.png =45%x) ![](https://i.imgur.com/qBv98A7.png =45%x) ![](https://i.imgur.com/T31unc8.png =40%x) </div> ::: * <font color="yellow">step5. 選「publice repository」,並輸入 repo name (自訂)。</font> ```git= git remote add origin https:git@github.com:pomelo925/Python.git git push -u origin master ``` ![](https://i.imgur.com/pmLtQT5.png =60%x) :::info 1. 公開性之後可再到 Github 上設定,public 可讓他人看你的 repo。 1. vscode 可方便操作 git。但未來很多技巧還是要靠指令。 2. 遇錯記得看 error message。網上都能找到解方。 ::: <h3><font color ="magenza"> 2-2. git pull </font></h3> * <font color="yellow">step1. 到 Github 的 repo,在這裡新增 README。(更新完後遠端為新版本)</font> ![](https://i.imgur.com/3853f8N.png) readme file 通常以 markdown 撰寫,隨便寫寫即可。 ```md= # Python --- This is a sample for readme file. ``` * <font color="yellow">step2. ```git pull -u origin master```:本地端 git pull。(更新本地端的版本)</font> 到「source control」的右側「...」,選擇「提取」。 ![](https://i.imgur.com/TiPDICx.png =70%x) :::success **現在去看你的本地端資料,應該會多一個 readme 檔案喔!是不是很方便呢?** ::: <h3><font color ="magenza"> 2-3. git push </font></h3> 上個小節是在雲端更改資料,而本地端 `git pull` 下來。 但通常是在本地端更改資料,而需要 `git push` 上去雲端的 remote repo 。 * <font color="yellow">step1. 更改本地端資料,新增一個檔案 hello.txt。</font> ```= hello this is git push testing. ``` * <font color="yellow">step2. git add 並 git commit。</font> ![](https://i.imgur.com/w8VyN29.png =50%x) * <font color="yellow">step3. ```git push```:sync change</font> 按下「同步變更」就能夠成功 push 上去囉! ![](https://i.imgur.com/fKEIwx8.png =50%x) :::success **現在去看 GitHub 的 repo,重新整理後應該會看到更新!** ::: :::info **同步變更?** 今天在雲端新增 readme 後,假設我們沒有 git pull 下來;同時間我又在本地端新增了 hello.txt 檔案,這樣會出現本地和遠端版本不同的情況。 「同步變更」其實就是先「git pull」再「git push」,這樣可以避免發生上述狀況時有資料遺失。事實上,**git 規定了在 push 之前必須更新到和雲端版本相同**。必要時是可以透過 -f 來強制推送,但你必須知道自己在做什麼。 ::: <h3><font color ="magenza"> 2-4. git clone </font></h3> 假設我有了一台新裝置,想下載我放在 GitHub 上的 repo 時,要怎麼做呢? 那就是透過 `git clone` 指令下載,非常的簡單方便! * <font color="yellow">step1. 複製 repo 的網址。</font> ```py= # 範例 git@github.com:pomelo925/tel2022_DoItTomorrow.git ``` ![](https://i.imgur.com/eCKhWDz.png) * <font color="yellow">step2. 到本地端任意資料夾位置開啟 git bash。</font> 進到資料夾內,點擊右鍵,選擇「Git Bash Here」。 (或是要用 vscode 開啟也可以。) ![](https://i.imgur.com/GGSVnNO.png =60%x) * <font color="yellow">step3. git clone。</font> ``` git clone git@github.com:pomelo925/tel2022_DoItTomorrow.git ``` ![](https://i.imgur.com/rjZTes4.png =60%x) 檔案就成功下載下來囉,十分之方便 ~