# <font face='consolas'><font size=5 color=#000080><center>**Git整理筆記**</center></font>
難度:★★進階
以前沒有用過[Git](https://git-scm.com/ "Git的官網")這套版本管理軟體。第一次接觸,雖經老師熱心指導,還是非常陌生。現在一邊使用一邊記錄整理,方便自己日後複習,也提供同學參考。
:::info
* 本文講的是Windows下git的操作,不是Linux也非Mac的Git。
* 隨著使用經驗增長,本文會不斷補充修改。
:::
## 命令列模式
* git的操作基本上是命令列模式,在Win的[命令列(command line)視窗]上輸入指令執行。
* 記得先cd到欲進版本管理的那個資料夾(目錄)。如:
![](https://i.imgur.com/5bFLcY9.png =x160)
* 所有Git的指令都在該資料夾內下達:
![](https://i.imgur.com/AXWJfID.png =x260) ![](https://i.imgur.com/BFeuuuV.png =x260)
* 目前已發現的問題:Git log時中文會變成亂碼:
![](https://i.imgur.com/9bF1liz.png =400x)
在網路上找到的其中一個solution如下:
>git config --global i18n.logOutputEncoding big5
![](https://i.imgur.com/FtrTYis.png =500x)
>[color=#99E64D]
但是我測過,執行完以上的指令之後,Git log中文依然是亂碼。問題沒有解決。
* 後來安裝[Git for Windows SDK] (安裝要很久),在SDK的界面上跑Git log,才沒有亂碼。不過上述的git config --...指令還是需要。
以下是Git SDK的界面,可以看到Git log時中文正常顯示,沒有亂碼。
![](https://i.imgur.com/hqhrUYk.png =400x)
對了,SDK界面預設的字型大小是9號字,實在太小了。看個幾分鐘眼睛就很疲勞,受不了。強烈建議安裝後立即調整字型大小。方法是在SDK視窗按滑鼠右鍵,再選Options:
![](https://i.imgur.com/Mx5tu0H.png =200x) ![](https://i.imgur.com/Dw1U2sa.png =x200) ![](https://i.imgur.com/Sm3VFxV.png =200x)
除了上面的git config --global i18n.logOutputEncoding big5指令,這個界面本身也有文字編碼系統的選項。我測試的結果是兩者都要設定Big5,才能正常顯示中文,缺一不可。
![](https://i.imgur.com/XjC7VgM.png =x250)
* 至於在Windows本身的命令列上Git log中文不變亂碼,網路上也有人提供其他解決方法。大多要修改Git的config檔,將encoding(文字編碼)改為Big5,目前我沒有測試這個部份。另外有人建議採取另外一個途徑:修改Windows的輸出輸入編碼。在命令列上輸入:
> chcp 65001
>
我試過,結果是 'It is not working'。希望不是 'It does not work'。
## 圖形界面
* [TurtoiseGit是Git的圖形化軟體],GUI操作。
* 以我淺薄的經驗,發現有些地方用起來不是那麼順。可能是對這套軟體還不夠熟練。
* 安裝後首先修改Settings。請在Windows桌面任何地方按滑鼠右鍵,選TurtoiseGit --> Settings:
![](https://i.imgur.com/s6w402b.png =x200)
* 修改字型大小(強烈建議) ![](https://i.imgur.com/dLQm6O5.png =x250)
* 改變語言(依個人需要) ![](https://i.imgur.com/Np7dynz.png =x250)
* TurtoiseGit的基本操作都要進入欲做版本管理的資料夾裡面,按滑鼠右鍵進行。
* git init(初始化)
![](https://i.imgur.com/fJD8tsa.png =x250) ![](https://i.imgur.com/MxHxxuC.png =250x)
init之後該資料夾會產生一個隱藏的子資料夾,名叫.git。這當然是Git內部的系統資料夾,不能刪除。
![](https://i.imgur.com/fcwDkwi.png =x150)
* git commit -m “原始版本。”(TurtoiseGit在commit之前好像不必做git add)
![](https://i.imgur.com/iGEtp4d.png =x300) ![](https://i.imgur.com/OrrXAUk.png =x300) ![](https://i.imgur.com/FDRGWom.png =150x)
* git log ![](https://i.imgur.com/LmO396u.png =x300)
* git checkout
![](https://i.imgur.com/9Qe9p3W.png =x350)
![](https://i.imgur.com/lh5cNoc.png =x175) ![](https://i.imgur.com/Nnd7jQN.png =x175)
* 但有時直接選Switch/Checkout...想回復之前的版本,進入之後卻會看不到所有版本。
![](https://i.imgur.com/vpDLr4Q.png =600x)
這情形看來是在已經有多個版本,但完全沒有還原過或只還原少數版本的時候出現。我對這套軟體還不熟悉,不知道這個現象是特意的設計還是bug,抑或是本人因誤解而操作不當所致。碰到這問題時,目前我找到的解決方法是暫時不要選Switch/Checkout,改選Show Relog(不是Show log),就會看到所有版本,然後對著欲還原的版本按滑鼠右鍵,再選Switch/Checkout to this...即可。
![](https://i.imgur.com/uc9y70H.png =550x)
![](https://i.imgur.com/6yCiqsm.png =x200) ![](https://i.imgur.com/cW2Y7Jz.png =x350)
![](https://i.imgur.com/ndDkEiS.png =x250)
* 也可以從Show log進入,再選某一版本然後再選Switch/Checkout to this...。不過Show log有時也不會顯示所有版本喲。以下是Show log的擷圖:
![](https://i.imgur.com/9tjiRey.png =x350)
* 以我目前的摸索,進Show Relog才保證看到所有版本。不過在所有版本都還原過後,就以進Switch/Checkout to this...為宜。進Show Relog或Show log會列出一大堆logs,而且有時會有warning(技術原因,無法擷圖):
:::warning
A branch with this name already exists. Use a different name or use the "Override branch" option。
:::
我對Git還不夠熟悉,看到以上的warning只好取消checkout,改從外層的Switch/Checkout做,就不會有warning(原因不詳)。
---
:::success
Happy Gitting!
:::
[Git官網](https://git-scm.com/)
[Git Branching學習網](https://learngitbranching.js.org/)
[命令列(command line)視窗]:https://hackmd.io/s/H1nGpNVi- "如果連命令列模式都還搞不清楚,請先看我這篇介紹。"
[Git for Windows SDK]:https://github.com/git-for-windows/build-extra/releases/tag/git-sdk-1.0.6 "到這裡安裝Git for Windows SDK。"
[TurtoiseGit是Git的圖形化軟體]:https://tortoisegit.org/download/ "到這裡安裝TortoiseGit。"
###### tags: `Git`, `TurtoiseGit`, `utf-8`, `Big5`, `中文亂碼`
<style type="text/css">
/* @import url('https://fonts.googleapis.com/css?family=Inconsolata&display=swap');
*/
body {
}
.deepRed{
color: #8B0000;
}
.magentaBold {
color: #FF00FF;
font-weight: bold;
}
#b {
color: #00008B;
}
#r {
color: #8B0000;
}
.b {
color: #00008B;
}
#dk {
color: #1E90FF;
}
.t {
color: #FF6347;
font-size: 110%;
font-weight: bold;
}
.r {
color: red;
font-weight: bold;
}
#cg120 {
color: #008248;
font-weight: bold;
font-size: 120%;
}
.classA {
color: #66E141;
font-weight: bold;
font-size: 130%;
}
.classB {
color: #41C6E1;
font-weight: bold;
font-size: 130%;
}
.classC {
color: #E1B141;
font-weight: bold;
font-size: 130%;
}
.highlight {
color: red;
font-weight: bold;
font-size: 120%;
}
.PK {
color: #E6005C;
font-weight: bold;
font-size: 115%;
}
.FK {
color: #FF8C69;
font-weight: bold;
}
.dot {
color: #DAA520; //#8B4513;
font-weight: bold;
font-size: 125%;
}
.smalldot {
color: #4CDA21;
font-weight: bold;
font-size: 125%;
}
.hi {
color: #E6005C;
font-weight: bold;
//font-size: 115%;
}
.tableTitle {
color: #B22222; //000080
font-weight: bold;
text-align: center;
}
.HeYeLv {
color: #1A6840;
// #008248;
}
.YingWuLv {
color: #5BAE23;
}
.ShenZhuYue {
color: #3C69A6;
}
.HaiQing {
color: #22A2C3;
}
.lightRed {
color: #DC143C;
font-weight: bold;
}
.Bloody {
color: #7E2723;
}
.bloody180 {
color: #7E2723;
//A63732;
font-weight: bold;
font-size: 180%;
}
.Fei {
color: #D15B3A;
}
.DaHong {
color: #FF2121;
}
.QiuHaiTangHong {
color: #EC2B24;
}
.CuiLv {
color: #20A162;
}
.MuGuaHuang {
color: #F9C116;
}
.JieHuang {
color: #D9A40E;
}
.CangHuang {
color: #806332;
}
.ChiHong {
color: #C3272B;
}
.Red {
color: #FF0000;
}
.Magenta {
color: #FF00FF;
}
.lightBack {
background-color: #FFFF99;
}
.beginner {
/* color: #008248; */
color: #20A162;
font-weight: bold;
}
.adv {
/* color: red; */
/* color: #D9A40E; */
color: #FF4C00;
font-weight: bold;
}
.pro {
/* color: #A63732; */
color: #801DAE;
font-weight: bold;
}
.fonts {
font-family: Inconsolata, Consolas, Ubuntu Mono, mononoki, Iosevka, Fantasque Sans Mono, agave, Fira Code, ProggyVector, Office Code Pro, Menlo, monospace, 華康細明體, 細明體, 微軟正黑體, 華康中圓體;
}
.font-Ubuntu {
font-family: Ubuntu Mono, Inconsolata, Iosevka, Fantasque Sans Mono, mononoki, agave, Fira Code, ProggyVector, Office Code Pro, Menlo, Consolas, monospace, 華康中圓體, 微軟正黑體, 文鼎新中黑, 華康中黑體, 華康細明體, 細明體;
}
.titleLev1 {
color: #2A2C4B;
font-family: Ubuntu Mono, Inconsolata, Iosevka, Fantasque Sans Mono, mononoki, agave, Fira Code, ProggyVector, Office Code Pro, Menlo, Consolas, monospace, 華康中圓體, 微軟正黑體, 文鼎新中黑, 華康中黑體, 華康細明體, 細明體;
font-weight: bold;
font-size: 110%;
text-align: center;
}
.titleLev2 {
color: #B54C3F;
font-family: Ubuntu Mono, Inconsolata, Iosevka, Fantasque Sans Mono, mononoki, agave, Fira Code, ProggyVector, Office Code Pro, Menlo, Consolas, monospace, 華康中圓體, 微軟正黑體, 文鼎新中黑, 華康中黑體, 華康細明體, 細明體;
font-weight: bold;
font-size: 120%;
}
.titleLev3 {
color: #22A2C3;
font-family: Ubuntu Mono, agave, Inconsolata, mononoki, Iosevka, Fantasque Sans Mono, Fira Code, Menlo, 華康中圓體, 微軟正黑體, 華康細明體, 細明體;
font-weight: bold;
font-size: 115%;
}
.titleLev4 {
color: #7E5E83;
font-family: Ubuntu Mono, Inconsolata, Iosevka, Fantasque Sans Mono, mononoki, agave, Fira Code, ProggyVector, Office Code Pro, Menlo, Consolas, monospace, 華康中圓體, 微軟正黑體, 文鼎新中黑, 華康中黑體, 華康細明體, 細明體;
font-weight: bold;
font-size: 110%;
}
.titleLev5 {
color: #207F4C;
font-family: Ubuntu Mono, Inconsolata, Iosevka, Fantasque Sans Mono, mononoki, agave, Fira Code, ProggyVector, Office Code Pro, Menlo, Consolas, monospace, 華康中圓體, 微軟正黑體, 文鼎新中黑, 華康中黑體, 華康細明體, 細明體;
font-weight: bold;
font-size: 108%;
}
.titleLev6 {
/* color: #5E878A; */
color: #C89B40;
font-family: Ubuntu Mono, Inconsolata, Iosevka, Fantasque Sans Mono, mononoki, agave, Fira Code, ProggyVector, Office Code Pro, Menlo, Consolas, monospace, 華康中圓體, 微軟正黑體, 文鼎新中黑, 華康中黑體, 華康細明體, 細明體;
font-weight: bold;
font-size: 108%;
}
.Walrus {
color: #FF2121;
font-family: Consolas, Ubuntu Mono, mononoki, Consolas, 細明體 ;
font-size: 1500%;
font-weight: bold;
}
.blockquote {
color: #1BA1E2;
font-size: 100%;
line-height: 18px;
}
.great {
color: #E50000;
/* font-weight: bold; */
}
.awful {
color: #008989;
/* font-weight: bold; */
}
.QA {
color: #1C3A90;
}
.myImg {
margin-left: auto;
margin-right:auto;
display: block;
}
.font500 {
font-weight: bold;
font-size: 500%;
}
.font300 {
font-weight: bold;
font-size: 300%;
}
.font200 {
font-weight: bold;
font-size: 200%;
}
.font150 {
font-weight: bold;
font-size: 150%;
}
.font130 {
font-weight: bold;
font-size: 130%;
}
.font125 {
font-weight: bold;
font-size: 125%;
}
.font120 {
font-weight: bold;
font-size: 120%;
}
.font115 {
font-size: 115%;
}
.font110 {
font-size: 110%;
}
.font108 {
font-size: 108%;
}
.font105 {
font-size: 105%;
}
.font100 {
font-size: 100%;
}
.font96 {
font-size: 96%;
}
.font94 {
font-size: 94%;
}
.font90 {
font-size: 90%;
}
.font88 {
font-size: 88%;
}
.font86 {
font-size: 86%;
}
.font82 {
font-size: 82%;
}
.font80 {
font-size: 80%;
}
.font75 {
font-size: 75%;
}
.font70 {
font-size: 70%;
}
.font65 {
font-size: 65%;
}
.font60 {
font-size: 60%;
}
.font50 {
font-size: 50%;
}
.trim {
margin-left: 0px;
margin-right: 0px;
broder: 0px;
padding: 0px;
}
.bold {
font-weight: bold;
}
.blur {
opacity: 0.20;
}
.statement {
color: #22A2C3;
}
.func {
color: #806332;
}
.str {
color: #EC2B24;
}
.filename {
color: #1A6840;
}
.codeFont {
font-size: 110%;
font-weight: bold;
}
.hiBold {
font-size: 110%;
font-weight: bold;
color: #EC2B24;
}
.markdown-body code { /* inline code */
font-family: Inconsolata, Consolas, Ubuntu Mono, Iosevka, Fantasque Sans Mono, mononoki, agave, Fira Code, ProggyVector, Menlo, Inconsolata, monospace;
font-size: 100%;
/* background-color: #EEEEEE; */
background-color: #E4E4E4;
}
.markdown-body pre code { /* code block */
font-family: Inconsolata, Consolas, Ubuntu Mono, Iosevka, Fantasque Sans Mono, mononoki, agave, Fira Code, ProggyVector, Menlo, Inconsolata, monospace;
font-size: 110%;
line-height: 16px;
}
.markdown-body {
max-width: 1500px;
}
.CodeMirror {
font-family: Inconsolata !important;
}
.borderlessTable {
border: 0;
}
.markdown-body table th, .markdown-body table td {
padding: 2px 3px 2px 5px !important;
// margin: 20px 30px 50px 10px !important;
border: 2px solid #ddd;
}
ul {
display: block;
/* list-style-type: disc; */
margin-block-start: 0.8em;
margin-block-end: 0.8em;
margin-inline-start: 0px;
margin-inline-end: 0px;
padding-inline-start: 15px;
padding: 0px;
}
.markdown-body ul, .markdown-body ol {
padding-left: 1em !important;
margin: 0 0 0 0;
}
</style>