注:因從 Git V1.7.10 開始引入了 Unicode 支持,因此在此版本以前會出現的亂碼問題可能在以後的版本則不須要設置,但仍存在一些亂碼問題,所以我仍然強烈推薦與 mintty 配合使用。 html
Git 是一個很是不錯的分佈式版本控制系統,雖然它最初設計在 Linux 平臺下,但如今已經被很好的移植到其它平臺。Windows 平臺下對應的 Git 工具爲 msysGit,在涉及到跨語言開發時咱們須要作一些配置來規避部分問題。但有些問題由於平臺差別並不可以很好的解決,但只要在使用時留心這些差別,咱們仍然可讓 msysGit 幾乎完美的工做。 git
set output-meta on set convert-meta off
[gui] encoding = utf-8 [i18n] commitEncoding = gbk logOutputEncoding = gbk或在 Git Bash 中運行下列代碼:
git config --system gui.encoding utf-8 git config --system i18n.commitEncoding gbk git config --system i18n.logOutputEncoding gbk並在 /etc/profile 中添加:
export LESSCHARSET=utf-8說明:
alias ls='ls --show-control-chars'若是你想 ls 也像其它環境下同樣自動着色,也能夠用下面替代:
alias ls='ls --show-control-chars --color=auto'注意: 這樣雖然能解決中文文件名或目錄的問題,可是在跨平臺開發時,不該使用中文文件名和目錄。
經過上面的設置咱們即可以順利地進行跨語言及跨平臺的開發了,但我以爲仍有必要給你們介紹 mintty,有了它,全部的跨語言問題均可以經過配置獲得完美的解決。mintty 的部署十分簡單,咱們只須要下載 mintty 對應的 MSYS 版本,並保存在 Git 安裝目錄下的 bin 目錄下,而後經過 Git Bash 運行下列代碼即可以在 mintty 執行相應的命令: github
#!/bin/sh mintty sh -l
須要注意的是,若是你 mintty 設置爲 Linux 環境開發,即 "~/.minttyrc" 對應的設置以下: bash
Locale=zh_CN Charset=UTF-8
你須要將 "/etc/gitconfig" 中的 i18n 設置節點所有設置爲 utf-8,以及 core.quotepath 設置爲 false,即: less
[core] quotepath = false [i18n] commitEncoding = utf-8 logOutputEncoding = utf-8
雖然此時關於 LESSCHARSET 的設置無關緊要,但爲了更好地交替使用 Git Bash 和 mintty,我所作的方法是保留此設置,並準備兩個版本的 gitconfig 分別對應 gitconfig.msysgit 和 gitconfig.mintty,並在 "/etc/bin" 目錄下新建 usemsysgit 和 usemintty 文件以下: 分佈式
#!/bin/sh # usemsysgit cp /etc/gitconfig.msysgit /etc/gitconfig printf 'msysGit is ready.'
#!/bin/sh # usemintty cp /etc/gitconfig.mintty /etc/gitconfig mintty /bin/bash -l
之後你須要在使用前執行相應版本的命令,若是你有更好的方法,不妨同你們一塊兒分享 :) 工具
之因此把換行問題放在最後,是由於不能用固定的換行配置去適應多種不一樣的環境,只有何種配置更適合當前環境。Git 經過設定 core.eol,core.safecrlf, core.autocrlf 的值相應地處理換行問題,具體以下: ui
core.eol -lf # 使用 LF 爲行結束類型。 -crlf # 使用 CRLF 爲行結束類型。 -native # 默認,使用本地(當前操做系統)的行結束類型。 # Windows 使用 CRLF,Linux 和 MacOS 使用 LF(MacOS 9 前使用 CR)。 core.safecrlf -true # 保證換行類型轉換爲可逆轉換(如同時包含 CRLF 和 LF 換行符時便不是可逆轉換)。 -false # 不檢查換行類型轉換。 -warn # 當換行類型轉換不可逆時顯示警告信息,但不影響操做執行。 core.autocrlf -true # 提交時自動將 CRLF 轉換爲 LF,獲取自動將 LF 轉換爲 CRLF。 -false # 不轉換換行類型(本地和源的代碼徹底一致)。 -input # 提交時轉換將 CRLF 轉換爲 LF,獲取時不轉換。
不一樣的人對於換行的配置有不一樣的理解,你能夠選擇本身認爲滿意的方式,好比我比較推薦的方案以下: google
# 換行類型爲 LF 的環境中配置。 core.autocrlf = input # 換行類型爲 CRLF 的環境中配置。 core.autocrlf = true
上面這種配置方式也是比較主流的配置方式,但當你跨平臺拷貝移動源倉庫時請記得先轉換換行類型(可經過修改配置後再獲取的方式)。還有一個問題就是若是二進制文件若是在傳輸中轉換結束類型時每每會使文件不能正常使用,所以需經過設置 gitattributes 將這些文件排出,例如當前項目中包含 HelloWorld.exe 的二進制文件,則在同級或上級目錄的 .gitattributes 文件中作以下設置(通常爲項目根目錄):。 編碼
*.exe binary參考資料: git-config(1) Manual Page gitattributes(5) Manual Page Pro Git - Pro Git 7.0 自定義 Git