iT邦幫忙

2021 iThome 鐵人賽

DAY 10
1

還記的這篇主題嗎?因為 Flask 是用 Python 寫的,所以前面講了那麼多有關 Python 的東西也還可以理解,那為什麼突然出現一個跟 Python 都沒有關係的 git 呢?

因為這系列主要是讓你之後再進行多人的專案開發或維護的時候,能夠更快的進入狀況,減少出包(被從頂樓丟出去實測自由落體)的機會。而在多人的專案開發或維護時,常用的版本控制軟體就是 git。

安裝準備

開始使用 git 前要準備什麼?當然是安裝 git 啊!那要怎麼安裝 git 呢?有兩個方式:

1. 安裝 cmder(個人推薦)

推薦原因:因為 cmder 內建 git 指令 + 可以使用 Linux 指令 (個人覺得比 windows 的指令好用,我知道 powershell + git 也可以做同樣的事,不過黑色背景比較潮)。那 cmder 要怎麼安裝呢?

  1. cmderDownload Full (Full 版本確定有 git 指令,Mini 我不知道)。

  2. 把下載下來的東西解壓縮後放在你想放的位置(我是放在 C:/cmder/ 下面)。

  3. 設定環境變數:設定 -> 系統 -> 關於 -> 進階系統設定 -> 環境變數 -> 系統變數 -> Path -> 新增 -> C:/cmder/ (剛剛放的位置)




  4. 開啟 CMD(內建的命令提示字元),輸入 set PATH=C: ,讓環境變數立即生效,不用重開機

  5. 關閉 CMD 再重啟,輸入 echo %PATH% ,查看是否有增加 C:\cmder (恩,對,某窗戶就反骨,斜線就要跟其他人不一樣)。

  6. 開啟 cmder,等待初始化結束。

  7. 安裝完成

  8. 輸入 git --version 查看 git 版本(如有有提示需要升級就直接輸入 git update-git-for-windows 即可)。

有關 cmder 要設定的

  • λ 改成 $ (推薦)
    推薦原因:不改會有畫面殘留文字的問題,雖然不影響指令輸入,而且下個 cls 或 clear 就不見了。

    打開 vender/clink.lua

    local lambda = "λ"
    

    改成

    local lambda = "$"
    
  • 使用 lua Config (看個人喜好)
    讓你的 cmder 看起來更好看的

    1. 下載 cmder-powerline-prompt
    2. 將下載的所有 .lua 檔放入 C:/cmder/config
    3. 重啟 cmder。

    * 設定完會變回 λ,要改的話參考下面方式:

    powerline_core.lua

    plc_prompt_lambSymbol = "λ"
    

    改成

    plc_prompt_lambSymbol = "$"
    

2. 安裝 git (不想要搞太麻煩可以選擇這個方式)

git官網下載 好以後,安裝就可以了(應該會出現超多可以選的東西,但是不要理它,放心大膽的下一步到底就對了)














按下 install 等待安裝完就可以了

git 設定

本地設定

  • 查看個人設定

      # 查看個人設定
      $ git config --list
    
  • 設定個人資料(基本上要設定 user.nameuser.email 才可以)

      # 設定名稱
      $ git config --global user.name <name>
    
      # 設定 email
      $ git config --global user.email <email>
    

遠端設定

先申請一個 Github 或 Gitlab 帳號(它要啥填啥就對了,應該沒問題吧?)

然後因為 Github 無法在採用密碼認證 所以要先設定好 SSH(雖然也可以用GPG 或其他的東西,但是我的肝表示用熟悉的 SSH 就好了)。

首先先產生一組rsa公私鑰(email記得改成自己的),先打開 cmder 輸入:

$ ssh-keygen -t rsa -b 4096 -C "<your_email@example.com>"

# 輸入 keys 檔案要放的位置與名稱,沒有要改就 Enter
> Enter file in which to save the key:

# 設定通行密碼,沒有要改就 Enter
> Enter passphrase

# 再輸入一次通行密碼,沒有一樣 Enter 就好
> Enter same passphrase again:

再輸入

# id_rsa 是預設名稱
# 沒附檔名的是私鑰,給自己用的
# .pub 是公鑰,給外部系統用的,這邊要打開的就是公鑰
$ notepad .ssh/id_rsa.pub

然後再點右上角的倒三角形->Settings->SSH and GPG keys->New SSH key,記事本全選複製後貼到 Key 那欄裡面(Title 隨便填,不填也沒差),最後在按Add SSH key 就可以了,這時可以透過下面的指令測試有無設置成功。

$ ssh -T git@github.com
# 成功的話就會像下面這樣
> Hi <your name>! You've successfully authenticated, but GitHub does not provide shell access.

windows 中 ssh-agent 設定

ssh-agent 是用來管理 SSH 的私鑰,如果前面設定了通行密碼,每次使用都需要輸入。ssh-agent 可以免除重複輸入密碼的麻煩。這邊只講如何設定。

* Windows 10 1709之前沒有內建 Open ssh,要使用必須自行安裝
* Windows 10 1803~21H1(目前最新)的 ssh-agent 有內建,但是是關閉的(???),可以透過 cmder 輸入 winver 來確認版本

PowerShell 的系統管理員 MODE

# 查看 ssh 位置
$ Get-Command ssh

# 查看 ssh-agent 狀態
$ Get-Service ssh-agent | select -property Status,Name,DisplayName,Starttype

# 改變 ssh-agent 狀態
$ Set-Service ssh-agent -StartupType Manual

# 啟動 ssh-agent
$ Start-Service ssh-agent

# 取得 ssh-agent 狀態
$ Get-Service ssh-agent

# 新增私鑰
$ ssh-add <私鑰 Path>/<私鑰 Name>

# 列出管理中的私鑰
$ ssh-add -l

# 讓 git 使用 Windows 的 ssh-agent,不使用 git 自帶的
$ git config --global core.sshCommand "'C:/Windows/System32/OpenSSH/ssh.exe'"

重要
強烈建議您將私密金鑰備份至安全的位置,然後在將它新增至 ssh-agent 之後,從本機系統將它刪除。

如果您失去私密金鑰的存取權,就必須建立新的金鑰組,並在您互動的所有系統上更新公開金鑰。

Git 介紹與使用

Git 主要功能是控管每個檔案的版本關係,自然會記錄有關檔案狀態的東西(我不太知道如何形容)。

Git 中檔案的狀態(可以這樣說嗎?)可分為 4 種,而每個檔案版本所在的區塊也有 4 種。根據我個人的理解,把它們組合起來看會長這樣:

先稍微介紹一下很明顯的檔案區塊的4種:
Working Directory (在此簡稱: W): 現在存在於資料夾內的、編輯器可以打開的位置。
Staging Area (在此簡稱: S): 暫存狀態。
Local Repository (在此簡稱: L): 本地(自己的電腦上的)倉庫。
Remote Repository (在此簡稱: R): 遠端(不在自己的電腦上的)倉庫。

再來稍微介紹一下檔案狀態的4種:
Untracked: 未被追蹤。
Unmodified: 追蹤中,未修改。
Modified: 追蹤中,已修改。
Staged: 追蹤中,待提交。

好,首先是檔案區塊, Working Directory 很容易懂,你看到的、可以修改的檔案都屬於它; Staging Area 裡面都是追蹤中、會提交進倉庫的檔案; Local Repository 就是在本地(自己的電腦上)的倉庫; Remote Repository 就是遠端(不在自己的電腦上)的倉庫;基本上修改完畢都必須提交進倉庫儲存,檔案區塊大概就是這樣。

接著是檔案狀態,檔案狀態就是檔案儲存後的內容,離開 Working Directory 才會Care 版本的問題(雖然有點不精確,但大概是這樣的概念)。如果是新建一個 git 的倉庫( init 不是 clone 後面會講道),所有檔案一開始會處於 W-WS(突然出現的集合論??) 的區塊;只要加入追蹤,就會從 W-WS 的區域移到 WS 的區域;到這裡應該知道了 Untracked (W-WS)的檔案狀態了吧?再來是 Staged (S-WS)的狀態,這裡面是預備提交進入倉庫的狀態;阿剩下兩個狀態是怎麼回事?Unmodified 簡單說就是 S-WS 跟 WS 之間狀態一樣;而 Modified 就是 S-WS 跟 WS 之間狀態不一樣。

順便插入說明一下 Branch,Branch 功能主要是讓不同 Branch 可以有不同任務,例如穩定發行版、開發測試版等等;跟分支很像的功能叫 Fork,Fork 是主要是給不同人可以同時開發不同東西,不會互相影響的;而兩個都可以透過 merge 合併(雖然 Fork 要原作者同意才可以 merge ),然後自己可以 Fork 別人的專案(可以選擇 Fork 別人的不同 Branch )後 Branch,但沒有自己 Branch 自己的專案後再 Fork 的。

是不是有點概念但好像還不太懂?只要記得你可以打開來操作的檔案全部都在 Working Directory (包括 W-WS 跟 WS),Working Directory 以外的都是狀態就好,接著搭配著語法看應該就懂了!

開始

# 將現在所在的資料夾變成一個倉庫 | 資料夾內的檔案都是 Untracked (W-WS)
$ git init

# 複製一個專案到現在位置 | 專案資料夾內的檔案都是 Unmodified
$ git clone <url>

完成

# 加入追蹤 | 英文句號 . 代表全部檔案 | W-WS 移進 WS, WS 複製狀態進 S-WS
# 第一次 W-WS 移進 WS 的時候會順便複製狀態進 S-WS
$ git add <filename>

# 取消追蹤 | WS 移進 W-WS
$ git rm --cached <filename>

# S-WS 的狀態取代 WS 的狀態(對,你辛苦做好的程式只要下這個指令就會不見了)
$ git restore <filename>

# S-WS 的狀態提交給 L,順便加上一段說明了你幹了什麼的訊息
$ git commit -m "<commit message>"

# S 的狀態提交給 L,順便加上一段說明了你幹了什麼的訊息
$ git commit -am "<commit message>"

分支

Fork 請在網頁上操作

# 查看 L 有哪些 Branch
$ git branch

# 新增 L 的 Branch
$ git branch <branch name>

# 切換現在 L 的 Branch
$ git checkout <branch name>

# 合併 L 的 Branch | B 要併進去 A 要先切回 A 後 merge B
$ git merge <branch name>

遠端(推錯會自由落體的)

# 查看現在有哪些 R | 正常會出現 <remote name> <remote url> 這樣
$ git remote -v

# 把 L 的 branch 推到 R 的 | R 沒有這支 branch 會自動新增
$ git push <remote name> <remote branch>

其他

# 查看 L 的歷史紀錄
$ git log --graph

.gitignore

紀錄一些要忽略掉不想追蹤的檔案,git add . 就可以把剩下的全部加入了。

.gitignore

# 忽略 .env 檔案
.env

# 忽略 package 底下所有附檔名是 .py 的檔案
package/*.py

大概就醬。

參考資料

Generating a new SSH key and adding it to the ssh-agent

OpenSSH 金鑰管理

Windows 1803之後git for windows無法透過Start-SshAgent啓用ssh agent - 需要一直輸入passphrase的問題

那麼就大概這樣,git 真的要好好學好,推到遠端前一定要看清楚,不然真的會出大事。

大家掰~掰~


上一篇
Day 09 pipenv
下一篇
Day 11 Flask 快速開始
系列文
月光下的Flask之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言