文章目錄
git入門與實踐(1)
1. 什麼是git?
Git is a free and open source distributed version control system
Git是一個免費的開源分佈式版本控制系統
官網:https://git-scm.com/
Git是一個版本管理控制系統(縮寫VCS),它可以在任何時間點,將文檔的狀態作爲更新記錄保存起來,也可以在任何時間點,將更新記錄恢復回來。在編輯新文檔覆蓋舊文檔,會發出警告,這就避免了自己不小心覆蓋掉別人寫的文檔。使用工具維護文檔,會比人爲方便得多。使用git的核心目的就是管理項目的更新迭代,管理項目的版本,在實際的開發過程中,已經對多個文件進行了更改,突然發現功能的實現思路是有問題的,需要對功能進行重寫,但是由於修改的文件過多,已經不能通過編輯器的撤銷操作,退回到修改之前的狀態,使用git就能很好解決這些問題了。在開發新功能之前,可以將項目的狀態保存起來,如果在開發的過程中發現有問題,就可以輕鬆的將代碼恢復到之前的狀態。git其實就是將項目開發不同階段的狀態保存起來,以後可以回退到任何階段。
2. 版本控制
2. 1 版本管理
版本管理是一種記錄文件變化的方式,以便將來查閱特定版本的文件內容。
保留文件所有的修改歷史記錄,可以方便地撤銷之前對文件的修改操作。
2. 1. 1 人爲維護文檔版本的問題
-
文檔數量多且命名不清晰導致文檔版本混亂
-
每次編輯文檔需要複製,不方便
-
多人同時編輯同一個文檔,容易產生覆蓋
保留文件所有的修改歷史記錄,可以方便地撤銷之前對文件的修改操作。
2. 2 版本控制系統
它可以帶來哪些好處呢?如:小迪最近在開發一個項目,完成了之後,產品經理就來找小迪,做一些修改,第一天可能我還很有耐心。結果第二天他又來了,改完…第三天又來了…改了n多天,他告訴小迪,拿出第5天修改的就可以了,剩下的都不要了。心中一定飄過了100只cnm,發現之前修改的過程文件都沒有留!
那如果開發過程中遇到此類問題怎麼解決呢?每次修改都保存一個文件,標註日期和版本號。如果開發週期長,也非常考驗我們本機的內存了。但如果產品經理要的是某一天哪個步驟的的工作呢?就不好解決了,這時候就需要版本控制系統來解決了。
git的歷史記錄就相當於我們平時使用的編輯器,我們頻繁的刪除、修改、更新都會有記錄,一般情況下時間週期較長的項目,但是我們也不需要每次修改都保存記錄,就像小迪之前使用autim designer
(畫單片機用的軟件),這樣對內存是個考驗,到時候去尋找也是問題。所以git採用主動提交的方式。
3. 安裝
官網:https://git-scm.com/
3. 1 windows
下載安裝有一堆選項,默認安裝即可
使用許可聲明
選擇安裝路徑
在輸入框內輸入想要安裝到的本機路徑,也就是實際文件夾位置,或點擊“Browse…”選擇已經存在的文件夾,
然後點擊“Next”按鈕繼續,進入下圖界面:
選擇安裝組件
上圖紅框內的選項是默認勾選的,建議不要動。綠色框1是決定是否在桌面創建快捷方式的。綠色框2是決定在所有控制檯窗口中使用TrueType字體和是否每天檢查Git是否有Windows更新的。這些根據自己需要選擇。
點擊“Next”按鈕進入下圖界面:
選擇開始菜單頁
這個界面是創建開始菜單中的名稱,不需要修改,
直接點“Next”按鈕繼續到下圖的界面:
選擇Git文件默認的編輯器
選擇默認編輯器,我日常使用Notepad++作爲編輯器,勾選使用Notepad++(還可選擇Nano、Vim、Vs code、Vs code內側版本編輯器)作爲 Git 的默認編輯器
點擊“Next”按鈕進入下圖界面:
調整您的PATH環境
這個界面是調整您的PATH環境。
第一種配置是“僅從Git Bash使用Git”。這是最安全的選擇,因爲您的PATH根本不會被修改。您只能使用 Git Bash 的 Git 命令行工具。但是這將不能通過第三方軟件使用。
第二種配置是“從命令行以及第三方軟件進行Git”。該選項被認爲是安全的,因爲它僅向PATH添加了一些最小的Git包裝器,以避免使用可選的Unix工具造成環境混亂。
您將能夠從Git Bash,命令提示符和Windows PowerShell以及在PATH中尋找Git的任何第三方軟件中使用Git。這也是推薦的選項。
第三種配置是“從命令提示符使用Git和可選的Unix工具”。警告:這將覆蓋Windows工具,如 “ find 和 sort ”。只有在瞭解其含義後才使用此選項。
我選擇推薦的選項第二種配置
點擊“Next”按鈕繼續到下圖的界面:
選擇HTTPS後端傳輸
這個界面是選擇HTTPS後端傳輸。
第一個選項是“使用 OpenSSL 庫”。服務器證書將使用ca-bundle.crt文件進行驗證。這也是我們常用的選項。
第二個選項是“使用本地 Windows 安全通道庫”。服務器證書將使用Windows證書存儲驗證。此選項還允許您使用公司的內部根CA證書,例如通過Active Directory Domain Services 。
我使用默認選項第一項
點擊“Next”按鈕繼續到下圖的界面:
配置行尾符號轉換
這個界面是配置行尾符號轉換。
第一個選項是“簽出Windows風格,提交Unix風格的行尾”。簽出文本文件時,Git會將LF轉換爲CRLF。提交文本文件時,CRLF將轉換爲LF。對於跨平臺項目,這是Windows上的推薦設置(“ core.autocrlf”設置爲“ true”)
第二個選項是“按原樣簽出,提交Unix樣式的行尾”。簽出文本文件時,Git不會執行任何轉換。 提交文本文件時,CRLF將轉換爲LF。對於跨平臺項目,這是Unix上的建議設置(“ core.autocrlf”設置爲“ input”)
第三種選項是“按原樣簽出,按原樣提交”。當簽出或提交文本文件時,Git不會執行任何轉換。不建議跨平臺項目選擇此選項(“ core.autocrlf”設置爲“ false”)
我選擇第一種選項
點擊“Next”按鈕繼續到下圖的界面:
配置終端模擬器以與Git Bash一起使用
這個界面是配置終端模擬器以與Git Bash一起使用。
第一個選項是“使用MinTTY(MSYS2的默認終端)”。Git Bash將使用MinTTY作爲終端模擬器,該模擬器具有可調整大小的窗口,非矩形選擇和Unicode字體。Windows控制檯程序(例如交互式Python)必須通過“ winpty”啓動才能在MinTTY中運行。
第二個選項是“使用Windows的默認控制檯窗口”。Git將使用Windows的默認控制檯窗口(“cmd.exe”),該窗口可以與Win32控制檯程序(如交互式Python或node.js)一起使用,但默認的回滾非常有限,需要配置爲使用unicode 字體以正確顯示非ASCII字符,並且在Windows 10之前,其窗口不能自由調整大小,並且只允許矩形文本選擇。
我選擇默認的第一種選項
點擊“Next”按鈕繼續到下圖的界面:
配置配置額外的選項
這個界面是配置配置額外的選項。
第一個選項是“啓用文件系統緩存”
。文件系統數據將被批量讀取並緩存在內存中用於某些操作(“core.fscache”設置爲“true”)。 這提供了顯著的性能提升。
第二個選項是“啓用Git憑證管理器”
。Windows的Git憑證管理器爲Windows提供安全的Git憑證存儲,最顯着的是對Visual Studio Team Services和GitHub的多因素身份驗證支持。 (需要.NET Framework v4.5.1或更高版本)。
第三個選項是“啓用符號鏈接”
。啓用符號鏈接(需要SeCreateSymbolicLink權限)。請注意,現有存儲庫不受此設置的影響。
我勾選默認的第一、第二選項,
點擊“Next”按鈕繼續到下圖的界面:
配置實驗選項
這個界面是配置實驗選項。
啓用實驗性的內置添加 -i / -p。(新!)使用實驗性的內置交互式add(“ git add -i”或“ git add -p”)。這使其速度更快(尤其是啓動!),但尚未被認爲是可靠的。
默認不勾選
直接點擊“Next”按鈕繼續到下圖的安裝進度界面:
安裝進度指示
安裝進度結束之後,會出現下圖的完成Git安裝嚮導界面:
安裝完成
在這個界面,可以勾選是否啓動啓動Git Bash和是否查看發行說明,然後點“Finish”按鈕退出安裝界面。
啓動測試
到此,Git的安裝完成,可以在開始菜單中看到Git的三個啓動圖標(Git Bash、Git CMD(Deprecated)、Git GUI)。
Git Bash,是Git配套的一個控制檯,點擊打開如下圖:
Git CMD(Deprecated),是通過CMD使用Git(不推薦使用),點擊打開如下圖:
Git GUI,是Git的可視化操作工具,點擊打開如下圖:
3. 2 mac
下載無選項,直接安裝即可,也可通過命令行進行安裝
4. 簡單的命令-入門運用
4. 1 git init
git init
初始化創建倉庫
會常見出一個隱藏的.git文件夾,所有的操作歷史將存入這裏
在windows下查看隱藏文件
在mac下 需要shift+command+.
顯示隱藏文件夾
注意:git不光可以管理項目的文件,所有類型的文件都可以被管理。
4. 2 git status
git status
查看當前倉庫所在目錄的文件狀態
Untracked 未追蹤的
當前的文件沒有被git追蹤,即當前文件沒有被git記錄。
注意:如果編輯命令的時候忘了單詞,可以用tab鍵
,系統自動提示。
4. 3 git add filename
git add filename
使文件加入追蹤
Changes to be committed
改變成可被提交的狀態了
4. 4 git commit
git commit
提交(並且附帶:對此次操作的描述信息)
(由於小迪的電腦已經配置過了,就懶得再重弄了,但顯示如下)
每次提交必須要記錄,姓名和郵箱,通過這種方式,能快速找到是由誰來提交的。
git config --globe user.email “[email protected]”
--globe
代表全局設置,即設置一次就夠了。
git config --globe user.name “張三”
git config --global -l
這時候就打開了,小迪配置好的默認編輯器vs code
,默認是vim
(對中文支持不太友好,容易亂碼)
修改默認編輯器:
git config core.editor notepad
git config --global core.editor "code -w" # 設置vscode
可以在編輯器裏添加描述:
注意:#
代表註釋,我們千萬別把記錄寫在這裏面,該文件下面的註釋,只是提示給用戶看的!
新建了1個1.txt文件
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch master
#
# Initial commit
#
# Changes to be committed:
# new file: 1.txt
#
再去查看狀態,沒有任何可提交了。
4. 5 git log
git log
查看提交記錄
我們可以修改1.txt內容:
注意:養成好習慣,不管做什麼操作,都git status
一下,看下狀態
我們發現文件狀態又變化了:
modified
:已修改的狀態。
對於當前的文件,git進行了追蹤,追蹤後對比記錄發現文件與之前不一樣了,git就認爲文件被修改了。
我們輸入git commit
,發現並沒有運行成功。
Changes not staged for commit
未準備提交的更改
此時需要先git add filename
,使文件加入追蹤
git log
爲什麼明明已經追蹤過的文件,修改完後還需要git add filename
,使文件加入追蹤?
4. 6 補充:默認編輯器vim基本使用
4. 6. 1 輸入
我們剛打開文件進入的界面是不能直接編輯文件的,因爲我們處於normal模式下,而要輸入的話,需要進入insert模式,才能進行編輯了。摁下 i
鍵,進入insert模式而當我們編輯完之後,摁下esc
鍵,就可以回到normal模式了。
在這我們介紹一下vim的模式,主要有3種,normal mode/insert mode/visual mode。normal模式是我們默認處在的模式,主要是我們輸入命令,對文本進行操作的。而insert模式,這是像我們一般的編輯器一樣,輸入。
而且當我們進入insert模式後,做完一些操作,最好鍵入
esc
命令,回到normal模式,至於原因,我們後面會看到的
還有其他的命令,這裏不多言了。
命令 | 作用 |
---|---|
o | 在下方新開一行,並進入insert模式 |
O | 在下方新開一行,並進入insert模式 |
a | 在光標後一個字符開始編輯 |
A | 在光標所在行行尾開始編輯 |
I | 在光標所在行開頭開始編輯 |
4. 6. 2 移動
vim是不能用鼠標操作的(此處說的是原生版本),我們要移動光標的話,似乎只能用方向鍵了。但是方向鍵經常比較難摸到,就比較麻煩了。
所以,我們下面介紹一些更好的vim移動方式。
注意:移動部分的命令都是在normal模式輸入。
- j、k、h、l
命令 | 作用 |
---|---|
j | 光標向下移動一行 |
k | 光標向上移動一行 |
h | 光標向左移動一行 |
l | 光標向右移動一行 |
而且這幾個鍵在我們右手的鍵位上,很方便就可以摁到。但是,h
和l
不建議常用,因爲移動效率太低了,每摁一下就移動一格。我們下面介紹更便捷的移動操作。
- w、e、b
命令 | 作用 |
---|---|
w | 向後移動一個單詞,從詞頭到詞頭 |
e | 向後移動一個單詞,從詞尾到詞尾 |
b | 向前移動一個單詞,從詞頭到詞頭 |
這種以單詞爲單位的移動,要比h\l那種以一格爲單位的移動快很多,而且有效率。而且h/l是無法跨行的,也就是當我們用摁h鍵,移動光標到行首時,光標是無法移動到上一行尾的,而b鍵可以。
- Ctrl+d、Ctrl+u
上面講的是單詞的移動,但是如果在我們看文章或代碼時,用的更多的是翻頁,j
和k
鍵每次只能移動一行,是無法滿足我們的需求的。下面就講到翻頁了。
命令 | 作用 |
---|---|
Ctrl+d | 向下翻半頁 |
Ctrl+u | 向上翻半頁 |
而且是每次翻半頁,不用擔心一翻頁,就不用擔心找不到之前看到哪了。
- gg 、G
上下翻頁固然很方便,但是我們經常看文檔或寫文檔時,會想要跳回文章的開始部分。這個時候,如果文章很長,那麼用翻頁回去就太累了。vim這麼可以這麼不方便呢,hhhh。所以,我們是有一個回到頂部按鈕的,那就是gg
。而跳到文章尾部,則是G
。
4. 6. 3 退出
摁下esc
鍵,就可以回到normal模式了,輸入:wq
即可退出。如果提示沒有文件名,則輸入:wq filename
。w
代表保存文件,q
代表退出。所以,當你如果進入vim時,沒有指定文件名時,vim會在你退出保存時提示你加上一個文件名(上面那個filename只是代表文件名)。或者可以不保存,輸入:q!
強制退出。
5. git add到底做了啥?
git add
在剛剛我們提過,它是添加一個文件,讓git對它進行追蹤,那爲什麼追蹤之後,我們再次提交的時候,還需要git add
呢?add操作到底做了什麼?
5. 1 文件的三種狀態
已修改、已暫存、已提交
它們分別對應的用途如圖所示:
已修改:被修改的文件
已暫存:等待被提交的文件
已提交:提交到本地倉庫的文件
注意:未被git追蹤的文件不參與以下三種狀態,稱之爲未追蹤狀態:Untracked
5. 1. 1 已暫存(stage)
之前我們輸入git commit
,發現並沒有運行成功。
Changes not staged for commit
未準備提交的更改,到底是什麼意思呢?
5. 2 工作區域
工作目錄、暫存區域、Git倉庫
5. 3 git工作流
工作目錄中修改或創建文件都在工作目錄中,如果想把修改記錄到git倉庫中,必須首先經過的就是暫存區域,之後進入了暫存區域,才能提交到git倉庫裏。
- 在工作目錄中修改文件
- 暫存文件
- 提交更新、找到暫存文件
5. 3. 1 基本工作流程小結
git倉庫 | 暫存區 | 工作目錄 |
---|---|---|
用於存放提交記錄 | 臨時存放被修改文件 | 被Git管理的項目目錄 |
6. git 使用小結
6. 1 Git 使用前配置
在使用 git 前,需要告訴 git 你是誰,在向 git 倉庫中提交時需要用到。
- 配置提交人姓名:
git config --global user.name 提交人姓名
- 配置提交人姓名:
git config --global user.email 提交人郵箱
- 查看git配置信息:
git config --list
也可直接在計算機的中配置文檔中手動修改:
C:\Users\Administrator
注意
- 如果要對配置信息進行修改,重複上述命令即可。
- 配置只需要執行一次。
6. 2 提交步驟
git init
初始化git倉庫git status
查看文件狀態git add 文件列表
追蹤文件git commit -m 提交信息
向倉庫中提交代碼git log
查看提交記錄
6. 3 撤銷(恢復記錄)
-
用暫存區中的文件覆蓋工作目錄中的文件:
git checkout 文件
-
比如在開發項目中的某個功能,功能開發一半的時候,將工作區的文件添加到了暫存區中。然後回到工作目錄中繼續開發,過了一會發現,後來開發的代碼存在問題。需要將代碼恢復到功能開發一半時的狀態,這個時候如何恢復呢?就可以利用暫存區中的文件覆蓋工作目錄中的文件的方式了。
我們再修改其內容,但是此時假如發現有問題,需要回退之前暫存區的代碼。
git checkout 1.txt
再打開文件夾,就恢復到之前的狀態了。
-
-
將文件從暫存區中刪除:
git rm --cached 文件
-
將 git 倉庫中指定的更新記錄恢復出來,並且覆蓋暫存區和工作目錄:
git rest --hard commitID
7. 擴展
7. 1 cmd 命令
# 打開某一個盤面,如C盤
C:
# 打開文件夾
cd 文件夾路徑
# 清空操作界面
cls
# 新建一個文件
New-Item a.txt
New-Item mytest.txt -Type file
# 新建一個文件夾
mkdir 新建文件夾
7. 2 git命令
7. 2 .1 當需要添加暫存區的文件過多的時候
gir add .
添加所有改動文件及未追蹤的文件
7. 2 .2 每次進入vim模式輸入描述很費勁
git commit -m ‘描述’
合併提交和描述,一步完成操作
7. 2 .3 每次提交都要輸入add命令很麻煩
git commit -a -m ‘描述’
從工作目錄提交到暫存區後,直接提交
假如修改一下文件內容:
但是假如我們添加一個文件,再用此種方式提交發現出問題了!
注意:只要該文件是未被追蹤的,就說明一件事情,git根本不會對它進行管理。從而就沒有提交這種說法了。即git會完全無視它,提交命令也沒有用。因此如果是未追蹤的文件是不能省略步驟的,還是得一步步來。
7. 3 中文亂碼
-
文件名亂碼
git config --global core.quotepath false
-
編輯描述亂碼
- 進入setting
- 找到environment
- 添加:set LANG=zh_CN.UTF-8
win10操作系統,還是推薦大家使用terminal吧!cmder我用了很多辦法,也沒解決中文亂碼的問題。
(後續待補充)