Git 系列之二:Windows 下 Git 客戶端的選擇,及 msysGit 各類中文問題的解決

Git 系列之二:Windows 下 Git 客戶端的選擇,及 msysGit 各類中文問題的解決

在 Windows 下用 NetBeans 作 PHP 開發,首先想到的是 NetBeans 的插件:NBGit。
評價:能用;若需沒有的功能,能夠自定義菜單調用自定義 bat 腳本;開發不活躍,使用沒有信心。git

第二個則是:TortoiseGit,SVN 小烏龜的 Git 版本。
評價:該有的功能基本都有了,仍是不錯的。windows

另外,TortoiseGit 只是 GUI 工具,使用它須要先安裝 msysGit,這是正宗的 Git 之 Windows 版本。msysGit 有個簡單的 GUI 工具,及簡單的 Explorer 集成;但它自帶的 Bash 很是好用,深得 Linux 的真傳。bash

選擇:msysGit。
理由:
NBGit 不用說,功能都不完善,還須要本身定製 bat 腳本(若此,則它一樣要依賴 msysGit);開發不活躍,極可能 NetBeans 下個版本更新就不能用了;何況,咱們還有別的項目,不使用 NetBeans。服務器

TortoiseGit 從功能上說是完善的,但它只是功能的堆砌而已,使用時徹底體會不到 GUI 帶來的便利。相反,它讓人感受很繁瑣,一個勁地點鼠標,點來點去全是跟菜單打交道,遠離了 Git 命令、遠離了 Git 輸出提示、遠離了真相。less

msysGit 的 Bash 很是好用;加上 Git 強大的 alias 功能,咱們徹底能夠自定義一個 $ git go,使得 90% 的狀況下只須要這一個命令,即便是不熟悉命令行的 Windows 用戶也會以爲很好玩;由於 NBGit、TortoiseGit 都須要 msysGit 作底層,咱們直接用底層工具也避免了上層 GUI 帶來的額外的 bug。編輯器

須要的配置:工具

一、C:\Program Files\Git\etc\git-completion.bash:ui

alias ls='ls --show-control-chars --color=auto'

說明:使得在 Git Bash 中輸入 ls 命令,能夠正常顯示中文文件名編碼

二、C:\Program Files\Git\etc\inputrc:spa

set output-meta on
set convert-meta off

說明:使得在 Git Bash 中能夠正常輸入中文,好比中文的 commit log。

三、C:\Program Files\Git\etc\profile:

export LESSCHARSET=utf-8

說明:$ git log 命令不像其它 vcs 同樣,n 條 log 從頭滾到底,它會恰當地停在第一頁,按 space 鍵再日後翻頁。這是經過將 log 送給 less 處理實現的。以上便是設置 less 的字符編碼,使得 $ git log 能夠正常顯示中文。其實,它的值不必定要設置爲 utf-8,好比 latin1 也能夠……。還有個辦法是 $ git –no-pager log,在選項裏禁止分頁,則無需設置上面的選項。

四、C:\Program Files\Git\etc\gitconfig:
[alias]
go =
 「! bash -c \」git pull && git add .; if [ \\\"$*\\\" == \\\"\\\" ]; then git commit -a; else git commit -am \\\」$*\\\」; fi; git push origin master:your-id;\」"

說明:強大的 alias,有了這個,咱們 90% 的狀況下只須要輸入 $ git go 這一個命令,免去了先拉後提交再推的繁瑣步驟。

兩種用法:
$ git go

$ git go aaa 修訂說明

命令後帶修訂說明時,會直接提交。須要注意的是,在「修訂說明」以前,有還個「aaa」,這是個 bug,參數中的第一個會被忽略,因此隨便寫一個湊數的……。

若命令行裏沒有提供修訂說明,則會自動彈出一個編輯器,等待輸入。默認的編輯器是 Vim。Vim 的使用是很簡單的,首先要明白它有兩個模式,一個是命令模式、一個是輸入模式。Vim 啓動的時候默認的是命令模式,須要先按’i'鍵,進入輸入模式;而後就正常編輯;編輯完成以後,將輸入法切換回英文狀態,按 Esc 從新進入命令模式;此時按 ‘(Shift):wq‘ 並回車,w 表示寫入保存、q 表示退出。完畢!

若實在不習慣 Vim,也能夠設置爲其它編輯器:

$ git config --global core.editor "notepad"

其中 notepad 能夠替換爲更好用的 wordpad、notepad++ 等(不過它們在命令行裏沒法直接訪問,得先設置 PATH 變量)。

以上 alias 是爲 Windows 定製的,Linux 下能夠寫得更優雅,不過鑑於使用上沒分別,就保持一致吧~。

[gui]
encoding = utf-8

說明:咱們的代碼庫是統一用的 utf-8,這樣設置能夠在 git gui 中正常顯示代碼中的中文。

[i18n]
commitencoding = GB2312

說明:若是沒有這一條,雖然咱們在本地用 $ git log 看本身的中文修訂沒問題,但,1、咱們的 log 推到服務器後會變成亂碼;2、別人在 Linux 下推的中文 log 咱們 pull 過來以後看起來也是亂碼。這是由於,咱們的 commit log 會被先存放在項目的 .git/COMMIT_EDITMSG 文件中;在中文 Windows 裏,新建文件用的是 GB2312 的編碼;可是 Git 不知道,當成默認的 utf-8 的送出去了,因此就亂碼了。有了這條以後,Git 會先將其轉換成 utf-8,再發出去,因而就沒問題了。

以上,給 Windows 下的同事在 Git Bash 裏推代碼就比較完美了。不過仍然有 3 個問題:

一、上面的 alias $ git go 有 bug,代碼修訂說明以前要輸入一串字符湊數;

二、$ git diff,若是代碼裏有中文,會顯示亂碼;

三、$ git checkout 有時候須要修改/增刪不少文件,若是某些文件被佔用,會被 Windows 拒絕,致使失敗,甚至可能形成版本庫出現沒法修復的問題。

這 3 個都是可承受的問題,前兩個應該有辦法解決;第 3 個歸功於文件系統,只能儘可能避免 checkout,實在須要的時候先註銷一次,就不會有問題了。

【TIP】該文只是解釋說明,具體操做請按《Windows 下 git 配置與使用指南》Wiki 執行。

相關文章
相關標籤/搜索