我一直建議在命令行中使用Git或者SVN。由於這樣可能更加了解他們的工做方式,也不容易遺漏重要的問題和提醒。html
在Windows習慣的驅使下,大多數人是不會看彈出的對話框中有什麼信息的,通常都是直接關掉。可是,版本庫給咱們的提示信息都是很是重要的,有的是衝突,有的是提交失敗,等等,這些都被略過了。linux
我碰到的關於版本庫使用問題主要包括下面這些:git
其實若是在命令行中使用 Git 或者 SVN ,以上的問題應該都不會存在。由於命令行會事無鉅細的給咱們提示,尤爲是Git的命令行,會很是聰明的猜想咱們的意圖並給咱們提示。
使用者要正確的使用命令行,就必須去仔細閱讀版本庫的文檔。這樣就能進一步瞭解版本庫的工做原理,減小在使用中的錯誤。github
另外,Git的不少功能,尤爲是高級功能,只有命令行能實現。編程
但並不是全部程序猿都願意使用命令行工具,尤爲是被Windows慣壞了的那批。windows
因此,有了TortoiseSVN和TortoiseGit。緩存
Git自帶GUI界面。使用 git gui
命令能夠打開它。在這個界面中能夠完成commit、merge、push、pull等等經常使用操做。bash
使用 gitk
能夠打開查看Git版本庫歷史,在 git gui
中也有菜單能夠打開它。服務器
我的覺得,徹底能夠不用安裝TortoiseGit,對於絕大多數程序猿來講,這個界面已經足夠了。session
可是,和「關於命令行」中說的那句話同樣,並不是全部的程序猿都願意使用這個 界面簡陋到醜陋 的工具,尤爲是被TortoiseSVN慣壞了的那批。
那些從SVN轉換過來的程序猿,絕大多數都只用過TortoisSVN。那麼好吧,就讓界面、名字都徹底同樣的TortoiseGit登場吧!
在TortoiseGit官方網站能夠下載到它。有32bit和64bit版本,同時也有中文語言包(但我不建議你安裝)。
安裝完畢以後,若是你沒有安裝過Git,那麼還須要去下載msysGit來安裝。由於TortoiseGit其實只是一個殼,它須要調用Git命令行才能發揮做用。(如今你知道我爲何推薦你用命令行了麼?)
若是你不安裝msysGit,那麼在運行TortoiseGit的時候會彈出這個提示:
爲何TortoiseGit不像TortoiseSVN同樣,把SVN命令行工具集成在安裝包中呢?我猜測是如下幾點緣由:
msysGit的主頁提供了兩個項目:Git for Windows和msysGit,並寫明瞭它們的詳細區別。
我的認爲,Git for Windows適合絕大多數程序猿(又見絕大多數 :D)。因此,強烈建議安裝Git for Window。
msysGit使用一種很BT也很NB的方式來安裝。先安裝一個最小的MinGW/MSYS系統,而後使用git pull
全部的源碼,調用gcc在本地編譯成可執行文件。
若是本機安裝過Cygwin,那麼在安裝msysGit的時候,cygwin的bin目錄不能位於PATH環境變量中,不然msysGit會拒絕安裝。
其實,若是你不在乎Cygwin提供的Git版本比較老,你徹底能夠不安裝Git for Windows或者msysGit,直接在TortoiseGit中設置Git.exe的路徑爲Cygwin的bin目錄便可。
因爲Cygwin目前的Git版本較老,在運行TortoiseGit的時候你會獲得這個提示:
關於Cygwin、MinGW以及msysGit的關係和選擇,能夠看這篇文章:Cygwin與MinGW,如何選擇?
還有這篇轉載的文章:Msys/MinGW與Cygwin/gcc
我認爲TortoiseGit最大的問題,就是在於它使用ppk密鑰格式,而不是使用OpenSSH密鑰格式。
由於linux系統是默認使用OpenSSH的,因此Git在基於命令行的時候是使用OpenSSH格式的密鑰。
同理,gitolite這種服務器端程序使用的是OpenSSH格式的密鑰。
因此,必須將原有的OpenSSH密鑰轉換成PPK密鑰才能在TortoiseGit中使用。
在安裝TortoiseGit的時候,你能夠選擇使用Putty仍是OpenSSH做爲SSH客戶端。安裝程序中說,Putty和Windows配合得更好。
如何選擇?我分別給出它們的特色:
Putty
OpenSSH
看完上面的特色,若是你仍是選擇了Putty做爲客戶端的話,那麼須要轉換原有的OpenSSH密鑰(若是有的話);
若是你依然義無反顧選擇了OpenSSH做爲客戶端的話,我相信你已經知道如何生成、修改、配置SSH了,看來我也沒必要羅嗦 :D
可使用TortoiseGit自帶的Putty Key Generator來轉換原來的OpenSSH密鑰到ppk格式。
打開該程序,選擇 Conversions->Import Key
命令將OpenSSH 私鑰 導入界面中,而後點擊 Save private key
按鈕將密鑰保存成ppk格式。建議在 Key comment
中輸入說明,不然密鑰多了很難分辨。至於密碼,爲了方即可以不設置。
爲了同時支持服務端和客戶端,咱們能夠在生成一個密鑰的時候,同時生成該密鑰的ppk格式和OpenSSH格式。而每一個密鑰對都包含 公鑰 和 私鑰,兩對一共是4個文件。這樣就能夠知足全部狀況了。
打開Putty Key Generator,選擇 Generator
按鈕,晃動鼠標生成一個密鑰,而後這樣處理:
Save private key
按鈕將密鑰保存成 ppk格式私鑰;Save public key
按鈕將密鑰保存成 ppk格式公鑰;Conversions->Export OpenSSH Key
按鈕將密鑰保存成 OpenSSH格式私鑰;若是使用Putty做爲TortoiseGit的SSH客戶端,那麼就不能使用OpenSSH的 ~/.ssh/config 來定義使用不一樣的端口和密鑰訪問SSH,而是須要使用 PuTTY Session。這篇文章進行了詳細講解: 在TortoiseGit中使用SSH host
也許是你一時 手賤……唔,手快選擇了 putty 做爲客戶端,某天又良心發現想用 OpenSSH ,是否必須重裝一次 TortoiseGit 來從新選擇一次呢?
我曾經這樣作過,直到我找到這個設置:
是的,只須要把 ssh客戶端 改爲 git for windows 提供的 ssh.exe 便可。若是用 Cygwin,那麼這個程序在 cygwin/bin
目錄中。
Windows(\r\n)、Linux(\n)和MacOS(\r)三個主流系統的換行符各不相同,這樣在跨平臺合做的時候就容易出現換行符的問題。
Git提供了 autocrlf
和 safecrlf
兩個參數來解決這個問題。但這兩個參數若是沒用好,就會影響開發。
例如,出現這種狀況:
A和B兩個開發人員,A使用LF(\n)作換行符,B使用CRLF(\r\n)作換行符,且都沒有開啓 autocrlf
參數,那麼A在遷出B的文件,並使用本身的編輯器打開以後就會發現,雖然沒有對文件作任何修改,但它的狀態是modified。這是因爲A的編輯器自動將B的文件中的全部換行符替換成了(LF),這與版本庫中的(CRLF)不一樣。
讓咱們來看看 autocrlf
參數的做用:
1
2
3
4
5
6
7
8
|
git config --global core.autocrlf true
git config --global core.autocrlf input
git config --global core.autocrlf false
|
這些選項在TorgoiseGit中也能夠設置。
個人建議是在不管在什麼系統下編程,都把全部人的編輯器的換行符模式設置成Unix格式,而後把autocrlf設置成false,這樣一勞永逸。
畢竟除了Windows記事本這類軟件外,已經不多有文本編輯器不支持換行符設置了。
若是你把換行符搞亂了,在一個文件中既包含windows風格的換行符也包含unix風格換行符,那麼 safecrlf
就能夠發揮做用了:
1
2
3
4
5
6
7
8
|
git config --global core.safecrlf true
git config --global core.safecrlf false
git config --global core.safecrlf warn
|
我在Cygwin下以命令行的形式使用Git,同時也使用TortoiseGit。
在使用TortoiseGit簽出使用cygwin提交的項目時,發現全部的文件權限都改變了:
1
2
3
4
|
diff --git a/launch4j/spritesheet_conterver.xml b/launch4j/spritesheet_conterver.xml
old mode 100755
new mode 100644
|
這是由於msysgit是一個類Unix模擬器,須要擁有Unix形式的文件訪問權限。而因爲Windows的種種限制,信息不能復原,從而致使原來的755成644了。
解決方法:
1
2
|
git config --global core.filemode false
git config core.filemode false
|
這個選擇的在TortoiseGit中沒有界面來設置,只能用命令行或者手動修改git配置文件。
在文件名和路徑名中包含中文的時候, git status
的顯示是這樣的:
1
2
3
4
5
6
7
8
|
git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
"\344\275\240\345\245\275.txt"
nothing added to commit but untracked files present (use "git add" to track)
|
要解決這個問題,只須要告訴 git 不對 0x80
以上的字符進行轉義便可:
1
|
git config --global core.quotepath false
|
查看 官方說明 :
The commands that output paths (e.g. ls-files, diff), when not given the -z option, will quote 「unusual」 characters in the pathname by enclosing the pathname in a double-quote pair and with backslashes the same way strings in C source code are quoted. If this variable is set to false, the bytes higher than 0x80 are not quoted but output as verbatim. Note that double quote, backslash and control characters are always quoted without -z regardless of the setting of this variable.
使用後效果以下:
1
2
3
4
5
6
7
8
|
git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
你好.txt
nothing added to commit but untracked files present (use "git add" to track)
|
由於 Mac OS X 已經自帶了 git 工具,絕大多數狀況下,不須要使用 GUI 工具。
若是必定要使用,那麼建議使用下面兩款:
個人選擇主要參考 The Best Mac Git Gui 以及 Git 官網的 GUI Clients 。
原文地址:https://blog.zengrong.net/post/1722.html