# <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>