---
# System prepended metadata

title: Git introduction
tags: [NTURT, electrical_system, tutorial]

---

# Git introduction
###### tags: `tutorial` `electrical_system` `NTURT`

git最近開始不能用密碼QQ，要改用token，以下教學給大家參考
https://stackoverflow.com/questions/68775869/support-for-password-authentication-was-removed-please-use-a-personal-access-to

### Git vs Github

* git：是一種版本控制的工具
* github：是一個可以讓你存放code的網站

因此git其實可以**只在本地端使用**->沒有github帳號也可以用

### Install git on windows 

可以參考以下教學，看到安裝完成部分即可

https://phoenixnap.com/kb/how-to-install-git-windows

安裝完成後打開git bash，輸入

```bash
git config ––global user.name "your github_username"
git config ––global user.email "your email_address"
```

### Basic git command 

#### 將repo下載到本地

1. 先到github上找到自己要下載的repo

2. 點選code

![](https://i.imgur.com/vtTyeYY.png)

3. 點選複製

![](https://i.imgur.com/rrmx2Dx.png)


4. 到自己想放repo的位置，按右鍵點選git bash

5. 輸入以下指令

```bash
git clone "剛剛複製的那段"
```

這樣就可以把repo下載到本地了

<hr>

#### 接受他人的改動

若有人對repo進行了改動並上傳至github，可以輸入

```bash
git pull
```

便可以接收他人的改動

<hr>

#### 將自己的改動上傳至github

如果對於當前repo有所新增/修改，可以輸入

```bash
git add .  # "." 代表當前資料夾，若只有要新增特定檔案可以改成檔案名稱
git commit -m "你這次做了什麼改動"
git push
```

這樣應該就可以上傳至github

note: 若在自己push之前有其他人也push了，要先把他pull下來才可以push



##### commit message撰寫

我想在這邊提一下如何寫commit message，首先，我們要分出好的及壞的commit message

* 好的commit message：在「一年後」讓維護人員進入狀況
* 壞的commit message：在「一個月內」讓維護人員找不出程式異動的原因

因此希望大家可以遵照以下格式，方便專案的維護

```
<type>: subject
```

type的部分，以下定義出幾種type

- feat: 新增/修改功能 (feature)。
- fix: 修補 bug (bug fix)。
- docs: 文件 (documentation)。
- style: 格式 (不影響程式碼運行的變動 white-space, formatting, missing semi colons, etc)。
- refactor: 重構 (既不是新增功能，也不是修補 bug 的程式碼變動)。
- perf: 改善效能 (A code change that improves performance)。
- test: 增加測試 (when adding missing tests)。
- chore: 建構程序或輔助工具的變動 (maintain)。
- revert: 撤銷回覆先前的 commit 例如：revert: type(scope): subject (回覆版本：xxxx)。

<hr>

#### Branch

branch算是多人合作專案中相當重要的一環，因為常常會有不同的部分需要進行，若是同時在一個repo上作業可能導致code動不起來等等問題，因此使用branch將可以與其他人分開進行開發，分別完成後再進行merge合在一起。

常見指令：

```bash
git branch # 可以查看目前有哪些branch
git branch "branch name" # 建立一個新的branch
git checkout "branch name" # 切換至指定branch
git merge "branch name" # 將指定branch與目前所在branchc合併
```

note: 如果要切換branch，必須先將目前branch commit或是復原至目前最新commit，若要復原，可以輸入

```bash
git restore .
```



<hr>

### Conflict

如果自己跟其他人改了同一個地方，或是要把其他的branch merge進來時，git可能會判斷有些地方發生了conflict，要解決conflict的方法我目前試過最方便的是利用visual studio code，因此這邊介紹利用VScode來解決conflict的方法，也請大家下載VScode。

1. 若在pull後看到有顯示錯誤訊息，那基本上就是發生conflict了

   ![](https://i.imgur.com/ZS8p0aL.png)


2. 用VScode打開資料夾，可以看到是main2.py這個檔案發生問題

   ![](https://i.imgur.com/wJkdKob.png)

   

3. 打開檔案，可以看到發生問題的部分，我們可以選擇Accept Current Change/ Accept Incoming Change/ Accept Both Change

   ![](https://i.imgur.com/6BzNiLB.png)


4. conflict解除完成