在visual studio中使用git版本系統(zz)

第一部分: 安裝 git 開發工具html

若是要使用 git 進行版本管理,其實使用 git 命令行工具就徹底足夠了,圖形化工具(不管是 git extentions ,仍是TortoiseGit),都只不過是命令行的封裝。就功能而言,他們能作的,命令行所有能夠作到;但命令行能作的,他們不必定能夠作到。命令行更加原生、本色,跨越平臺,以一當十。建議熟悉 git 命令行工具。git

但圖形化工具也有本身的優勢,就是直觀。下面推薦的組合方案是: github

Git 命令行(cygwin) + Git Extensions + Git Source Control Providervim

——這個組合能夠完全解決中文文件問題(包括中文文件名、目錄名,以及在 github 中的正常顯示)。windows

1)安裝 cygwin 命令行工具緩存

安裝教程見 http://gotgit.github.com/gotgithub/10-appendix/030-install-on-windows-cygwin.htmlbash

安裝過程當中須要安裝的軟件:服務器

git-completion: 提供 Git 命令自動補齊功能。安裝該軟件包會自動安裝依賴的 bash-completion 軟件包。app

openssh:SSH 客戶端,提供 Git 訪問 ssh 協議的版本庫。框架

vim:是 Git 缺省的編輯器。

2)安裝 git extensions

【做用】

git extensions 必須依賴於命令行工具,因此第二個安裝。

它安裝以後不但可使用,也自動在vs中加上插件,能夠在vs中很是直觀的、方便的操做。

【安裝方法】

下載網址:http://code.google.com/p/gitextensions/downloads/list 選擇GitExtensions226SetupComplete.msi那個帶Complete字樣的版本,它裏面集成了 KDiff3 工具。

下載以後,雙擊安裝,一路next,中間記得勾選 msysGit 和 KDiff3。

git extensions 安裝以後自帶一個很全面的教程。

【配置】

咱們知道,目前git命令行工具備兩種,一種是 cygwin 下命令行,一種是 msysGit 命令行,git extensions 能夠配置使用哪種命令行工具,以下圖,咱們選擇使用 cygwin,而不是 msysGit

第一個是:「用戶運行git的命令」

第二個是:全局配置文件,請點擊「Change HOME」按鈕,將目錄改成 cygwin 的目錄。

另外,git extensions 會把 cygwin 默認的編輯器 vi 改爲它本身的,你能夠在「全局設置」中改回來。

補充1:git extensions 的配置文件放在註冊表中,若是卸載,這些配置仍然保留,你能夠再次安裝發生問題,能夠檢查註冊表中相關配置項,是否有問題。

補充2:在安裝 git extensions 過程當中,咱們勾選了 msysGit,如今安裝完畢,其實你能夠卸載 msysGit了,不過也能夠保留,由於 msysGit 安裝目錄下自帶 git 的全部命令的幫助文檔。

3)安裝 Git Source Control Provider

【做用】

Git Source Control Provider 是 vs 的一個擴展插件,但必須依賴於 git extensions,因此第三個安裝,它的做用是,能夠顯示文件狀態、顯示文件歷史等,讓 vs 中文件操做更加方便。

項目網址:http://gitscc.codeplex.com/

源碼:https://github.com/yysun/Git-Source-Control-Provider

視頻教程:www.youtube.com/watch?v=efS0kKvfi6k

【安裝方法】

在vs菜單中點擊「工具」的「擴展管理器」

而後在線搜索git,出現第一個結果就是 Git Source Control Provider,而後點擊「下載」

而後點擊vs菜單的「工具」的「選項」,展開左側的「Source Control」,在右側的「當前源代碼管理插件」中選擇「Git Source Control Provider」,而後點擊「肯定」

啓用 Git Source Control Provider 以後,全部文件顯示出狀態圖標。你能夠在文件上右鍵進入 Git 菜單進行操做。

下面經過建立一個全新的測試項目,來演示如何在 vs 中可視化操做 git 版本庫。若是完成了基本操做,你能夠參與到實際的github項目,好比"我記錄開發框架"和「我記錄網站綜合系統(集成了「SNS/門戶CMS/論壇/博客/相冊/微博/wiki」等應用程序的互聯網產品)」已經託管到github,網址是 https://github.com/wojilu/wojilu

1、建立版本庫

用 vs 新建一個項目,而後點擊「Git」菜單中的「Initialize new repository」

彈出窗口,讓你選擇須要歸入git版本管理的目錄——

初始化以後,在項目目錄下,出現一個 .git 的隱藏文件夾,這個文件夾就是git版本庫。

和.git同處一個目錄的全部文件,如今就歸入了這個版本庫的範圍以內。

如今你在這個目錄下,能夠執行 git 命令了。

好比下面就是在 git 命令行窗口中直接操做 git 命令,使用命令行,能夠完成全部的 git 版本管理操做。

不過咱們這一節主要講如何在 vs 中可視化操做 git,暫時不涉及命令行管理。

2、將文件提交到版本庫

只有將項目中的文件歸入版本庫,咱們才能享受到版本管理系統帶來的好處,好比瀏覽歷史版本,切換分支等……

1)首先,請關閉vs,而後從新打開。若是不從新打開,插件 Git Source Control 不能監控文件狀態。

從新打開以後,文件顯示狀態符號:前面顯示「+」加號,它表示這些文件的狀態是「還沒有歸入版本庫」,須要你添加。

你能夠點擊「Git」菜單中的「Commit」進行提交

出現以下提交窗口

咱們看到,這裏須要提交的文件不少,但其實,不少文件是 vs 自動生成的臨時文件,和項目內容沒有關係,不該該歸入版本管理,好比 ***.suo 文件,這時候,咱們須要將這些文件設置爲「須要忽略的文件」,讓 git 不理會他們。

2)設置忽略文件

請關閉上面的 commit 窗口,點擊 vs 菜單 「Git」中的命令「Edit .gitignore」

出現忽略文件的編輯窗口,這個窗口左側的內容區目前是空白,沒有內容。

image009

不過右側列舉了一些常見的須要忽略的文件(默認),請點擊右下側的「添加默認的忽略項」按鈕,將須要忽略的內容添加到左側內容區,而後點擊「保存」。

而後打開文件夾,你會看到項目中出現了一個名叫 .gitignore 的文件,它裏面的內容就是你剛纔保存的內容。

3)提交步驟a (加入暫存區)

再次點擊菜單「Git」中的「Commit」提交命令,如今提交窗口中顯示須要提交的文件大大減小,好比 ***.suo 文件就已經被 git 忽略掉了。

這時候若是直接點擊「提交」命令,則出現以下提示窗口,意思是「尚未文件在暫存區中。須要暫存並立刻提交全部文件嗎?」

這句話什麼意思呢?這裏涉及到 Git 的一個暫存區( stage )的概念,在 Git 中有三個保存文件的區域:

1)工做目錄,就是你在硬盤上操做的這些目錄和文件;

2)Git 版本庫,就是前面說的 .git 隱藏文件夾。版本庫裏面又分紅「暫存區」和真正的版本庫。

a)暫存區(stage),其實至關於在提交以前的一個緩衝區;

b)版本庫內容區,裏面存放了文件的歷史內容、各個分支等……

總之,將一個文件提交到版本庫其實就是這樣的流程——

1.工做目錄 --> 2.暫存區  --> 3.版本庫 )

爲何 Git 須要一個暫存區呢?這是爲了方便 commit 提交過程當中的反悔撤銷等精細的操做。一旦加入暫存區(stage),即加入了 .git 中,但還沒有提交到版本庫,有了這個緩存,提交操做過程變得更加靈活。

總之,你的提交過程分紅兩步:先 add 加入 暫存區(stage),而後提交(commit)。若是用命令行表示,就是

第一步:git add fileName

第二步:git commit -m "提交描述文字"

這兩個步驟對應到上圖,就是左側的兩個窗口,左側上部是工做目錄,左側下部是暫存區,兩個窗口之間用「暫存(stage)」命令分隔,以下圖。

你能夠選定一個文件,點擊途中左側的箭頭,將此文件加入暫存區;也能夠點擊右側雙箭頭,將全部文件加入暫存區。

這個點擊雙箭頭的命令,其實和以下 Add Files 命令(項目中右鍵進入Git菜單)是相同的,都是將全部文件加入暫存區。特別說明:若是文件名或目錄名是中文,請使用 Add Files 命令代替此處的stage操做。

4)提交步驟b (真正提交commit)

將文件所有加入暫存區以後,以下圖所示,請在右下窗口中輸入提交說明信息,請務必認真填寫,不要留空。每一次提交都要有明確的說明,這是之後版本瀏覽、管理的關鍵線索。

填寫「提交信息(m)」以後,就能夠點擊「提交」按鈕了,以後會彈出以下窗口,表示提交成功。

上面的操做很是直觀,但若是用git命令行,其實只要簡單的兩行命令便可:

git add .

git commit -m "個人第一次提交"

兩種方式各有優缺點。

這時候咱們再看項目中文件的狀態,文件前面的「+加號」變成了「鎖」,表示文件已經成功歸入了版本庫。

3、瀏覽版本庫

1)準備工做,咱們在版本中添加修改2個文件,而後提交2次。

2)如何查看歷次提交記錄?請打開「Git」菜單中的「Browse」命令

出現提交歷史窗口——

窗口中顯示了總共三次提交,在提交歷史中右鍵,能夠看到相關的操做,好比分支、標籤(tag)等……

若是在項目中右鍵,而後點擊右鍵菜單的「Git - History」

還能夠圖形化的查看提交歷史

4、同步到遠程服務器

由於 git 是分佈式版本系統,每一個人在本身本機上,都有一個 git 版本庫的拷貝,爲了和遠程其餘版本庫同步,須要進行同步操做。

同步操做分紅兩種,一種是 pull 拉取,一種是 push 推送。

下面,咱們將項目推送到 github 咱們註冊的項目上去。

1)咱們點擊 以下圖的「Push」命令

出現推送窗口,接下來點擊「管理遠程」,進行 github 項目的添加操做——

出現遠程管理窗口,請依次填寫

「名稱」、

「Url地址」(通常是 git@github.com:yourName/yourProject.git 格式)、

瀏覽「私鑰文件」(你用 PuTTY 生成的 .ppk 文件)、

「加載SSH密鑰」,

而後測試鏈接,最後「保存」

系統開始抓取遠程信息,成功以後,請切換到「默認拉取行爲(獲取以及合併)」,在右側「遠程檔案庫」下拉框中選擇「origin」,「默認合併」中填寫「master」,最後點擊「保存」

2)請關閉「遠程檔案庫」窗口,再關閉「推送」窗口並從新打開(即重啓「推送」窗口),會發現剛纔設置的 gihub 遠程庫 origin 已經自動填充了——

點擊「推送」命令,開始推送,根據網速不一樣,可能須要幾秒或幾分鐘時間,請耐心等待,最後會提示推送成功。

此時訪問 github 網站,會看到你新推送的項目內容。

《vs中git基本操做圖解1》在這裏:http://www.wojilu.com/Forum1/Topic/2237 本文是第二部分。

------------------------------------


5、文件管理

【刪除文件】

在 vs 中,由於有插件的支持,因此能夠直接刪除;刪除以後,須要提交一下。提交的時候 git extensions 會將刪除操做同步到版本庫中。

以下圖,文件「xxxFile.cs」被刪除以後,在 commit 窗口中顯示刪除標記「—」:

說明:若是是在命令行中,請不要直接使用 rm操做,而是使用 git rm 命令。

【如何查看被刪除的文件?】

點擊 "Git" 菜單中的 "Browse" 命令,打開提交歷史窗口,請點擊文件還沒有被刪除的某個提交,好比下面的 "add class1",而後切換下面的窗口到「文件樹」中

在文件數中,能夠查看當前歷史中全部文件。

另外,還能夠在項目中右鍵菜單中點擊「Git - History」命令,進入相應的「Show Files」窗口中查看文件數。

【如何恢復被刪除的文件?】

在上圖中,找到須要恢復的文件,而後右鍵「另存爲」,保存到項目中便可。

【移動文件】

1)在 vs 中直接移動便可。

2)若是被移動的文件是中文名,git extensions 對話框會有bug,須要使用命令行工具。請打開命令行,進入到 .git 文件所在的目錄,輸入命令——

git add -u .

這個命令,比普通的 "git add ." 多了一個參數 -u,表示將各類變更也添加進來

【如何恢復剛作的修改?】

在提交窗口中,選中文件,點擊「重置選中的文件」,或者右下角的「復位更改」

或者在右鍵中 "Git" ->「Undo File Changes」

【修改最後一次提交信息】

對剛纔的提交後悔了?想更改最後一次提交?

新增一個提交,並點擊上面的「更改最後一次提交」,新的提交信息將覆蓋上一次提交。

警告:只有當上一次提交還沒有push到遠程版本庫的時候,纔可使用本方法;不然,對上一次提交的修改會引發混亂。

7、分支管理

在 git 中,分支很是簡單易用,建議常常建立分支。

好比,你有一個實驗性的想法,能夠建立一個分支去測試,徹底不影響正式的代碼。

再好比,要開發一個新功能,那就建立一個分支專門提交這個功能相關的代碼,若是開發完畢,將此分支合併到主分支便可。這種爲特定而新開的分支,咱們叫「特性分支(Feature Branch)」。它的一個重要優勢是:若是新功能不能如期完工,也不會影響主分支的發佈。

另外在bug修復等方面,git 的分支功能也很是方便易用。能夠說,分支功能是 git 最棒的功能之一。

1)建立分支

填寫「分支名稱」,而後點擊「建立分支」

建立以後,解決方案管理器(Solution Explore 後面顯示當前所在的分支,好比下圖顯示 branch1)

2)切換分支

注意:在切換以前,記得先提交,以保證還沒有提交的文件已經保存到版本庫中。

點擊Git菜單中的「Checkout branch」命令,

而後選擇須要簽出的分支:

3)合併分支

點擊下圖的「Merge」命令

而後選擇須要合併的分支:

合併以後,在你的當前分支中,就會出現目標分支的內容。

4)刪除分支

由於在git中建立分支是很容易、很頻繁的事情,因此,當某個分支沒有用處的時候,也就常常須要刪除。注意,若是分支尚未合併,那麼刪除分支會致使此分支下的全部commit丟失,因此在刪除以前請先合併分支。

方法:點擊「Git」菜單中的「Browse」,進入git日誌列表,在有分支標記的上面右鍵點擊「刪除分支」命令:

5)分支「衍合」(rebase,又叫「變基」)

將一個分支在master上衍合,會執行以下步驟:

• 此分支中全部commit都會stash臨時緩存;

• 而後刪除此分支;

•在master分支之上從新建立此分支;

• 在新建立的分支上提交剛纔緩存的全部commit;

在衍合過程當中,有可能發生合併衝突,這個每每須要你手工逐個解決。

衍合(變基)作法:先進入須要被衍合的分支,而後點擊"rebase"命令,在彈窗中 rebase on 後面選擇分支,好比在分支 branch1 中選擇master分支,表示將branch1衍合到master中( rebase on master)。

8、tag 管理

在 git 中,tag(標籤)常常用來標記版本,好比給某個提交打上 "v1.0" 的tag,以表示這是1.0版本。

1)建立tag

經過「Git」菜單的「Browse」命令,進入提交(commit)列表窗口,你能夠在任意提交(commit)上面右鍵點擊「建立新標籤」命令,好比輸入「v1.0」

建立的時候建議必定要勾選「建立帶註解的標記」,以下圖所示,填寫「消息」。由於你打上的tag,別人未必能理解它的意思和目的,有註解的 tag 更加方便協同工做。另外,tag 名稱中不容許有空格。

2)刪除 tag

tag 不能夠修改和移動,因此若是要修改或移動,請先刪除,而後添加一個新的 tag。

刪除方法:在 tag 上右鍵點擊「刪除標籤」便可。

3tag 推送

在向遠程服務器 push 推送數據的時候,默認狀態下,tag 不會被推送,你須要進入「推送標籤」(以下圖所示),而後勾選「強制推送」,才能將 tag 推送上去。

注意:tag 一旦推送到遠程服務器,就不要再改動,由於有可能致使一個相同的 tag 在不一樣用戶那裏含義不一樣,形成混亂。

4)在 github 中提供下載

Github 很是體貼,只要是打上 tag 的,都自動打包,提供下載。以下圖,我給 wojilu 託管以後的第一個commit打上了 "v1.8.5" 的 tag,在 github 中,其餘人就能夠直接下載這個版本了。

下載以後,用vs2010打開便可調試運行。

9、衝突合併

在分支合併的時候,每每發生內容衝突,大多數狀況下 git 都會幫你自動合併,省掉不少麻煩。

但有些時候,git 沒法處理,須要你手工解決。

通常有三種類型的衝突,須要你手工處理:

一個被刪除,一個被修改

會提示你:選擇修改的文件,仍是刪除的文件?

一個被刪除,一個新建立

會提示你:選擇建立的文件,仍是刪除的文件?

在兩個分支中分別做了不一樣的修改

會提示你:使用 merge 工具手工修改衝突

下面簡單介紹一下如何使用合併工具 kdiff3。

好比在分支合併中,若是有衝突,會出現彈窗提醒

點擊「是」,出現以下合併工具窗口,請選擇右上角的「Open in kdiff3」

kdiff3在啓動的時候,也會出現一個彈窗

請點擊「OK」,而後出現kdiff3的主窗口

屏幕上有四個窗口,上面三個,依次是 base/local/remote窗口,下面是output窗口

A 窗口

Base

須要合併的兩個文件的最近的共同祖先版本

B 窗口

Local

當前分支文件

C 窗口

Remote

須要合併的另外分支的文件

Output

合併以後的文件

合併方法:在Output文件中的衝突區域,右鍵選擇A/B/C的相應內容。

選擇以後,若是不滿意,還能夠在衝突區域直接編輯輸入

修改以後,保存並退出便可。

補充說明:須要注意的是,有些衝突是邏輯上的衝突,是隱含的,工具沒法自動偵測出來。好比你修改一個函數的返回值,使得他的含義變化;而別人是使用這個函數的,那麼,當你修改以後,別人的程序也許沒法正常運行,但工具並不能發現這種邏輯上的衝突。這個固然不是合併工具的問題,它須要的是程序設計者思惟的謹慎周密。

相關文章
相關標籤/搜索