前言
git 是目前時下最流行的版控軟體
版控軟體可以紀錄我們對這個資料夾裡所有檔案的行為
-
可以讓你回到過去救回檔案
-
可以讓你回到某個檔案之前修改的版本
-
可以讓你與伙伴協作開發
-
可以讓我們擁有同一軟體但不同走向的多條發展道路
-
身為工程師或程式開發者絕對不能措過使用 git 來管理你的程式專案
-
身為一般使用者也絕對有必要透過 git 來防止資料的誤刪與修改
有其他電腦或主機的話,透過 git 也可以達到異地備援的功能
使用 git 可以避免傳統複製貼上的空間與時間浪費
讓你很清楚每個版本與每次修改的差異性
若想與他人一起協作則更不能沒有 git 的幫助,讓你們就算同時修改同一個檔案也不會互相蓋來蓋去
git 通常推薦使用指令來操作,對於全盲視障者在讀取資訊上完全沒有介面障礙的問題
這麼好的免費開放軟體,就讓我們一起來 git 一下吧
原理
多數的版控軟體記憶我們操作的每個步驟,當想要還原時從第一個步驟開始一路走下來,
所以可以還原到各個時間點。
git 比較不同,他是類似 snapshot 的方式,中文好像叫做快照吧,因此他擁有每個版本的完整資料。
假設現在我們的第一個版本有 a, b, c 三個檔案, 第二版修改 a, 第三版刪除 b, 第四版修改 c 並新增 d.
此時:
- 第二版的 a 是新的,而 b 跟 c 都是指向第一版的 b 跟 c
- 第三版的 a 是指向第二版的 a 而 c 則是指向第一版的 c
- 第四版的 a 是指向第二版的 a 而 c 跟 d 都是新的
所以 git 不需要每次都從最原始的第一個步驟開始依據一個個步驟把資料還原,而是每個版本都有完整的快照,
也因為是指向的方式,所以重複的資料不會多占空間。
git 屬於分散式架構,不需要網路或他臺主機也可以在本機獨立運作,通常在該資料夾下有個 .git 的資料夾就是用來紀錄 git 的相關資訊
因為 git 最初是由 linux 核心的開發者所撰寫出來的,所以也模訪了 linux 的架構,
像是資料夾的結構、下指令的參數語法,以及點開頭的檔案或資料夾代表隱藏檔等,
這些都是 linux 的 bash 風格。
但就算沒用過 linux 的使用者也不用擔心,就讓我們從頭開始吧。
安裝
git windows 版的載點:
基本上可以一直按下一步裝到好
在開始功能表輸入 git 應該可以找到 git bash
這個程式,之後我們都會在這個環境裡操作 git 指令
按 enter 進入 git bash 後會看到 $
這是 git 指令列的提示符號
這個環境很像寫程式時的交互模式,也就是類似系統提供的指令列模式
讓我們在這個環境操作幾個指令看看,
在錢號後面輸入指令後按 enter 執行,使用小鍵盤7往上可以看結果:
$ which git
/mingw64/bin/git
$ git --version
git version 2.25.0.windows.1
第一個指令是查詢 git 這個程式路徑在哪裡
第二個指令是查詢 git 的版本
在 官網 有介紹一些圖形介面的工具,有興趣的人可以試看看哪一套對 NVDA 來說比較無障礙。
為了怕大家對指令產生害怕情緒,
這裡列出一些指令列模式常用到的指令,在 git bash 也同樣適用:
- cd 資料夾名稱
切換至該資料夾 - cd
切換回家目錄 - pwd
列出當前路徑 - ls
列出當前的檔案與資料夾列表,後面也可以接路徑 - mkdir 資料夾名稱
在當前路徑下新建一個空資料夾 - touch 檔案名稱
在當前路徑下新建一個空檔案 - rm -r 資料夾名稱
刪除資料夾 - rm 檔案名稱
刪除檔案 - cp 檔案 目的路徑
複製檔案到某資料夾下 - mv 檔案 目的路徑
搬移(剪下)檔案到某資料夾下 - clear
清除畫面 - exit
結束 git bash
如果你還是很擔心,那我們在下篇文章會來實際操作幾個指令,讓你不再害怕。
bash基本指令操作
bash 指令雖然不是 git 本身的指令,但在 git bash 操作 git 的過程中可能都會用到
在 上一個單元,我們列出了這些常用指令與參數,在這裡,還是來實際操作一下以加深印象。
讓我們在開始功能表輸入 git 應該會自動跳出 git bash 直接按 enter 執行進入 git bash 環境。
如果沒有跳出來,只好打完整點,或者自己到應用程式的列表去尋找該程式。
Administrator@DESKTOP-NI8E3B8 MINGW64 ~
$
一開始進入 git bash 會看到這兩行,第一行是目前的 windows 使用者名稱與電腦名稱,並且使用小老鼠符號隔開。
MINGW64 算是預設的名稱,切換視窗時可以發現他也是視窗名稱。
行尾有個 ~
波浪號表示家目錄,通常是使用者的資料夾,隨著所在路徑的改變也會跟著改變。
在 git bash 中,路徑都是以 /
正斜線來隔開,如果是 D 槽則是以 /d
來表示,
這稱為絕對路徑,就是從最前面的根目錄開始寫起,/
就是代表根目錄。
第二行,也就是游標所在行,前面有一個錢號,這是 git bash 的指令列提示符號,在輸入指令時不需輸入該符號喔。
查看當前路徑,看看到底家目錄在哪裡
$ pwd
/c/Users/Administrator
切換到 D 槽
$ cd /d
由此可知,切換成功是沒有訊息的
那切換到一個不存在的資料夾看看
$ cd ooqq
bash: cd: ooqq: No such file or directory
既然沒有,那我們就來建一個
$ mkdir ooqq
沒消息就是好消息,建立成功
來看看檔案與資料夾列表有沒有這個資料夾了
$ ls
01/ 03/ 05/ 07/ 09/ 11/ 13/ 15/ log t.html
02/ 04/ 06/ 08/ 10/ 12/ 14/ child.mp3 ooqq/
由上面的輸出可以發現:
- 在名稱最後有正斜線的表示資料夾
- 這是簡短輸出,一行會有好幾個並且由名稱一定順序列出且對齊
那看一下詳細版的:
$ ls -l
total 3780
drwxr-xr-x 1 Administrator 197121 0 五月 4 2019 01/
drwxr-xr-x 1 Administrator 197121 0 五月 4 2019 02/
drwxr-xr-x 1 Administrator 197121 0 七月 24 2019 03/
drwxr-xr-x 1 Administrator 197121 0 五月 4 2019 04/
drwxr-xr-x 1 Administrator 197121 0 五月 4 2019 05/
drwxr-xr-x 1 Administrator 197121 0 五月 4 2019 06/
drwxr-xr-x 1 Administrator 197121 0 五月 4 2019 07/
drwxr-xr-x 1 Administrator 197121 0 五月 4 2019 08/
drwxr-xr-x 1 Administrator 197121 0 五月 4 2019 09/
drwxr-xr-x 1 Administrator 197121 0 五月 4 2019 10/
drwxr-xr-x 1 Administrator 197121 0 五月 4 2019 11/
drwxr-xr-x 1 Administrator 197121 0 五月 4 2019 12/
drwxr-xr-x 1 Administrator 197121 0 五月 4 2019 13/
drwxr-xr-x 1 Administrator 197121 0 七月 24 2019 14/
drwxr-xr-x 1 Administrator 197121 0 七月 25 2019 15/
-rw-r--r-- 1 Administrator 197121 3767570 七月 9 2013 child.mp3
-rw-r--r-- 1 Administrator 197121 30569 四月 13 2019 log
drwxr-xr-x 1 Administrator 197121 0 一月 24 22:23 ooqq/
-rw-r--r-- 1 Administrator 197121 12152 二月 11 2019 t.html
太詳細就不說了,主要有權限、擁有者、大小、日期、名稱等。
d
是資料夾 directory
而 -
是檔案
讓我們進入 ooqq 然後新增一個空檔案:
Administrator@DESKTOP-NI8E3B8 MINGW64 /d
$ cd ooqq
Administrator@DESKTOP-NI8E3B8 MINGW64 /d/ooqq
$ touch abcd.txt
Administrator@DESKTOP-NI8E3B8 MINGW64 /d/ooqq
$ ls
abcd.txt
之前只留下 $
那行方便講解,連續下指令就把原始畫面都貼上對照。大家可以注意一下路徑的變化。
下了一堆指令了,想讓畫面清爽一點就清一下畫面:
$ clear
實際上會連 $ clear
那行都清掉,只留下提示符號那兩行。
那我們複製上一層也就是根目錄的 child.mp3 過來這裡
$ cp ../child.mp3 .
$ ls
abcd.txt child.mp3
..
代表上一層,.
代表當前路徑,先輸入來源再輸入目的。
從當前路徑開始寫起的叫做當前路徑,當然你也可以下絕對路徑 cp /d/child.mp3 /d/ooqq
另外,這裡也支援按 tab 鍵自動補齊功能,剛剛輸入 chi
直接按 tab 就可以自動幫我們補齊,就算遇到很長的指令或檔名也不怕打錯囉
利用搬移指令把 abcd.txt
改名成 defg.txt
$ mv abcd.txt defg.txt
Administrator@DESKTOP-NI8E3B8 MINGW64 /d/ooqq
$ ls
child.mp3 defg.txt
讓我們把剛剛複製過來的 child.mp3
刪掉
$ rm child.mp3
Administrator@DESKTOP-NI8E3B8 MINGW64 /d/ooqq
$ ls
defg.txt
如果想利用搬移指令 mv
移動檔案或資料夾,語法跟 cp
一樣,這部分留給大家去練習了。
既然玩好了,那就把 ooqq
整個資料夾刪掉吧,因為我們還在裡面,記得要先退出來:
$ cd ..
Administrator@DESKTOP-NI8E3B8 MINGW64 /d
$ rm -rf ooqq
小心一下刪除指令,刪掉了可能救不回來喔,r
是資料夾,f
是強制刪除,就是不要再問我了。
在 git bash 的外部指令與檔名不分大小寫,但內部指令像 cd 或指令的參數還是有大小寫的區別,特別是 git 本身的指令參數。
外部指令是指在 git bash 裡存在執行檔的,因為是對應到檔名,git bash 檔名不分大小寫,所以外部指令也不分大小寫。
如果在指令還沒打完按 tab 鍵會幫你補到 .exe
這一種的一定是外部指令,使用 which 指令
可以看到該執行檔的路徑。
最後,我們終於可以離開 git bash 回家過年囉。
$ exit
vim
vim 是 vi 這個出道超過 40 年老牌 linux 文字編輯器的加強版
他是 git 的預設編輯器,雖然在 git 內也可以使用 notepad (計事本) 來編輯檔案
但 vim 由於是預設的,所以或許有些人會不小心進入而不知該如何操作與離開,甚至不小心改動到檔案的狀況
所以我們簡單介紹一下,至少讓大家可以打字、存檔與離開。
不小心進入也不至於慌了手角。
模式切換
vim 跟大多的 windows 編輯器不一樣的地方在於有分模式
一般 windows 編輯器一打開就可以打字,但 vim 跟 NVDA 在網頁上的編輯區一樣是有分模式的,
在 vim 中比較常見的兩個模式為 normal 與 insert 也就是普通與插入模式。
normal 模式
普通模式又稱指令模式,他是一進入 vim 的預設模式,在這個模式當中,就像 NVDA 的瀏覽模式一樣,是不能輸入文字的
主要是可以進行一些動作,例如、複製、剪下、貼上、存檔、離開、刪除等等。
- :w 按 enter 可以存檔
- :q 按 enter 可以離開檔案,也就是關閉檔案
如果沒有存檔會先跳出提示,不會直接關閉檔案 - :wq 按 enter 存檔後離開檔案
注意,冒號 :
是必須的。
從 normal 模式有三種方式可以切換到 insert 模式:
- i 就是 insert 游標會在該字上等待輸入
- a 就是 append 游標會在該字的後一個字元等待輸入
- o 會直接往下插入一行,游標移到該空行的第一格等待輸入
insert 模式
插入模式又稱編輯模式,主要用來輸入文字。
在 insert 模式按 esc 鍵(跳離鍵) 或按 ctrl+[ 可切回 normal 模式
結語
vim 的指令非常多,可以做很多有趣的事,不過我們重點是 git 所以就先簡單介紹到這裡,
之後有用到再補充就好。
個人設定
每次提交 git 時都會有紀錄,而這些基本的紀錄訊息有部分來自於我們的設定。
例如提交者姓名、電子信箱等,透過這些資料,我們可以知道是誰做了什麼事情。
特別是在一個專案中,可能有好幾個開發者,從紀錄中我們可以很清楚知道要找誰協調問題。
通常個人設定都只要設定一次即可,以後都會套用這樣的設定。
設定姓名與電子郵箱
在 git bash 中輸入以下兩行指令:
$ git config --global user.name "NVDA TW"
$ git config --global user.email "nvda@forblind.org.tw"
我們分析一下上面的指令:
git
指令當然都是以 git 開頭的。config
通常用來配制設定檔--global
是全域設定,也就是沒有特別設定就以此為預設值的意思- 因為可以做的設定其實有很多,所以我們這邊指定
user.name
設定使用者姓名與user.email
設定使用者電子郵箱 - 最後設定的值使用雙引號包夾是因為可能會有空格,不使用引號的話,空格會被當成是下一個參數,這樣就會發生錯誤
- 每個參數間的空格都是必要的,這樣程式才能正確區分不同參數
確認當前設定
設定完當然需要確認一下有沒有成功,我們可以輸入:
git config --list
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
http.sslbackend=openssl
http.sslcainfo=C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
core.autocrlf=true
core.fscache=true
core.symlinks=false
core.editor="C:\\Program Files\\Notepad++\\notepad++.exe" -multiInst -notabbar -
nosession -noPlugin
credential.helper=manager
user.name=NVDA TW
user.email=nvda@forblind.org.tw
前面有其他的設定,我們主要先看最後兩行就好。
的確有成功設定了
設定檔
如果不想打指令設定也可以使用編輯器直接打開設定檔來進行設定
不管是使用指令或圖形介面來設定,最後程式都會把資訊寫進設定檔當中
個人設定檔位在目前登入 windows 帳號下的 .gitconfig
這個檔案
以我這邊為例,使用者帳號是 administrator
那設定檔的完整路徑就在 C:\Users\Administrator\.gitconfig
以上是 windows 的路徑,其實剛進入 git bash 還沒切換資料夾的話,預設直接就是在自己的帳號下了
而在 git bash 顯示設定檔的路徑長這樣 /c/Users/Administrator/.gitconfig
讓我們以 vim 來看一下設定檔的內容:
$ vim ~/.gitconfig
[user]
name = NVDA TW
email = nvda@forblind.org.tw
- ~ 表示家目錄,也就是自己帳號下的意思,這樣就不需要輸入那麼長的路徑了
- . 開頭的資料夾或檔案,在 linux 的世界裡是隱藏檔,linux base 不是以副檔名來與檔案做關連的
專案設定
基本上有 --global
就會有 --local
進入到某個專案後,將上述指令的 --global
參數換成 --local
後,在該專案下就會使用 local 所設定的值。
因為每個專案下會有一個 .git
的資料夾,因此在不同專案下使用 local 來設定時,
這些區域設定或稱專案設定會寫入 .git/config
這個設定檔案中。
所以在 global 設定檔不會看到各個專案的 local 設定
預設編輯器
其實在安裝 git 時就有這個選項,錯過了也沒關係,我們一樣可以下指令來變更,例如把 vim 改成 emacs:
$ git config --global core.editor emacs
重點是系統要有安裝這個編輯器,如果是其他的編輯器要先確認在 cmd 環境下怎麼打指令啟動,像是包含程式的路徑跟參數等等
內建的編輯器像 notepad 也就是記事本,應該可以直接設定
這邊提供 notepad++ 的設定:
git config --global core.editor "C:/Program Files/Notepad++/notepad++.exe" -multiInst -notabbar -nosession -noPlugin
別名(alias) 設定
慢慢的會發現 git 的指令除了參數多外,有些指令與參數的英文單字還滿長的
如果想要加快輸入又想避免容易打錯字的話,除了善用 tab
鍵讓系統來幫我們自動補齊外,
我們還可以設定一些縮寫別名來加快我們的輸入。
像是 branch 或 checkout 都是經常輸入且字母有點長的指令,提供以下設定供參:
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.st status
那以後輸入 git co
就相當於 git checkout
了,
不要小看少打幾個字,長期累積下來可是很可觀的。
不過也不要設定得太簡略,上面的設定 co 或 st 等等都還連想得出是什麼字的縮寫,
例如只有一個 m 到底是 master 還是 merge 或者其他,時間久了大概就搞不清楚了,
還要再去查的時間完整指令都打完了。
整串的指令縮寫也沒問題:
$ git config --global alias.l "log --oneline"
以此類推,上面的設定完成後,輸入 git l
相當於 git log --oneline
如果還不知道有哪些指令,那就等我們開始使用 git 一段時間再來設定別名吧。
別名設定檔
注意到了嗎,一樣是使用 --global
來設定的,因此設定檔都是 .gitconfig
$ vim ~/.gitconfig
[alias]
co = checkout
br = branch
st = status
l = log --oneline
好了,這些設定就很夠用囉,下一篇就真的要開始 git 了。
最後更新:2020-03-26 23:19:31
From: 122.116.71.150
By: 阿慶