Git 系列之二:Windows 下 Git 用戶端的選擇,及 msysGit 各種中文問題的解決-轉載

來源:互聯網
上載者:User
Git 系列之二:Windows 下 Git 用戶端的選擇,及 msysGit 各種中文問題的解決

在 Windows 下用 NetBeans 做 PHP 開發,首先想到的是 NetBeans 的外掛程式:NBGit。
評價:能用;若需沒有的功能,可以自訂菜單調用自訂 bat 指令碼;開發不活躍,使用沒有信心。

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

另外,TortoiseGit 只是 GUI 工具,使用它需要先安裝 msysGit,這是正宗的 Git 之 Windows 版本。msysGit 有個簡單的 GUI 工具,及簡單的 Explorer 整合;但它內建的 Bash 非常好用,深得 Linux 的真傳。

選擇:msysGit。
理由:
NBGit 不用說,功能都不完善,還需要自己定製 bat 指令碼(若此,則它同樣要依賴 msysGit);開發不活躍,很可能 NetBeans 下個版本更新就不能用了;況且,我們還有別的項目,不使用 NetBeans。

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

msysGit 的 Bash 非常好用;加上 Git 強大的 alias 功能,我們完全可以自訂一個 $ git go,使得 90% 的情況下只需要這一個命令,即使是不熟悉命令列的 Windows 使用者也會覺得很好玩;因為 NBGit、TortoiseGit 都需要 msysGit 做底層,我們直接用底層工具也避免了上層 GUI 帶來的額外的 bug。

需要的配置:

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

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

說明:使得在 Git Bash 中輸入 ls 命令,可以正常顯示中文檔案名稱

2、C:\Program Files\Git\etc\inputrc:

set output-meta onset convert-meta off

說明:使得在 Git Bash 中可以正常輸入中文,比如中文的 commit log。

3、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,在選項裡禁止分頁,則無需設定上面的選項。

4、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'鍵,進入輸入模式;然後就正常編輯;編輯完成之後,將IME切換回英文狀態,按 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 看自己的中文修訂沒問題,但,一、我們的 log 推到伺服器後會變成亂碼;二、別人在 Linux 下推的中文 log 我們 pull 過來之後看起來也是亂碼。這是因為,我們的 commit log 會被先存放在項目的 .git/COMMIT_EDITMSG 檔案中;在中文 Windows 裡,建立檔案用的是 GB2312 的編碼;但是 Git 不知道,當成預設的 utf-8 的送出去了,所以就亂碼了。有了這條之後,Git 會先將其轉換成 utf-8,再發出去,於是就沒問題了。

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

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

2、$ git diff,如果代碼裡有中文,會顯示亂碼;

3、$ git checkout 有時候需要修改/增刪很多檔案,如果某些檔案被佔用,會被 Windows 拒絕,導致失敗,甚至可能造成版本庫出現無法修複的問題。

這 3 個都是可承受的問題,前兩個應該有辦法解決;第 3 個歸功於檔案系統,只能盡量避免 checkout,實在需要的時候先登出一次,就不會有問題了。

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.