Git Tool Part 2

針對Git的使用.在Git中文操做指南手冊中.講解大量關於GiT的細節操做.但是對於從SVN或是TFS轉換的不少開發人員來講.不少並無更多學習週期時間.那麼如何才能短期內抓住Git核心枝幹.短期內快速進入Git並在代碼中集成使用工具呢.? 因爲Git中富含大量的Git 命令.細節太多.原本打算在本篇中介紹一些Git經過命令的方式基本操做.等寫了大概四分之一.發現徹底和最初寫這篇文章初衷徹底背離了.css

其實本篇的目的很簡單.與其陷入在在長長的篇幅中介紹Git Command基本用法 還不如直接採用Windows 平臺開發人員最熟悉的GUI界面工具操做更爲直觀.Git原理理論和操做用法也是很是系統.若是你以爲有必要創建一個系統知識結構.固然也有很好的資源能夠當作平常查看手冊:html

Git 系統資源:linux

Git中文操做指南 Download Link[http://vdisk.weibo.com/s/1UJq4]git

Git Command指令在線文檔: [http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/zh_cn/index.html]github

<<Git Community Book中文版>>:[http://gitbook.liuhui998.com/]bash

注:如上在線文檔或圖書版權源做者擁有.本文只是添加引用.如轉載請註明出處.服務器

做爲Windows 平臺開發人員最經常使用的開發工具莫過於Visual Studio系列.可是惋惜的Git做爲從Linux平臺的舶來品..NET開發人員更習慣於使用用戶界面,因此在進行平常任務的時候更習慣使用操做基於具備IDE的界面.框架

做爲一個Visual Studio用戶.在使用Visual SouceSafe/Team Foundation Server、Subversion或甚至Mercurial的過程當中.已經創建了使用源碼控制習慣.更多的開發人員但願在Solution解決方案目錄中就直觀看到本身的SouceCode被版本管理工具所控制着.不管在代碼修改或添加都能直接得到狀態反饋.因此在Visual Studio使用Git需求就一直成爲Git一塊」硬傷」.ssh

如何在Visual STudio系列開發工具中使用Git版本控制工具?分佈式

<1>Visual Studio 構建Git部署環境

Well,談到這裏在上章節中Git Tool Part 1中提到可以適用Windows 平臺的Git工具主要具備兩個模擬*nix like運行環境的工具:cygwinmsys;Git在cygwinmsys下都有相應的移植版本.不過就使用體驗來講我的以爲msys平臺下的msysGit最好用.在GUI圖形工具上有Git extentions ,仍是TortoiseGit.更加傾向於前者.

Linux開源社區也考慮到不少Windows平臺開發人員的需求.在後來工具支持上推出能夠Visual Studio系列開發工具集成Git版本控制系統 插件-Gitextensions.這是目前Visual Studio系列開發工具惟一支持Git具備GUI操做界面的插件.

至此在Visual Studio IDE開發工具構建Git版本控制工具組合就誕生了:

Visual Stuido Git版本控制工具組合:

Git 命令行(MsysGit) + Git Extensions + Git Source Control Provider [Only Support Visual Studio 2010]

Git 命令行通常採用BitBash工具來直接採用命令操做.

Git Extensions:則是直接Visual Studio 開發工具中集成Git GUI操做工具.

Git Souce Control Provider:爲Visual STudio 提供Git版本控制支持.

首先安裝MsysGit能夠在[http://code.google.com/p/msysgit/]下載到最新的FullInstall版本.安裝步驟請參考GitHub上Wiki[https://github.com/msysgit/msysgit/wiki/InstallMSysGit].默認編輯工具是Vim/

因Git Extensions工具是基於Git 命令行,能夠在安裝MsysGit以後經過[http://code.google.com/p/gitextensions/]下載安裝;在安裝過程當中因已經安裝MsysGit版本[可選也可不選].因此只需選擇集成KDiff3工具便可:

另外關於Git Extension傳輸協議選擇:

OpenSSH 客戶端,提供 Git 訪問 ssh 協議的版本庫.Git自身支持多種協議.在此選擇默認安裝OpenSSH.在GitExtension安裝完成後.經過Start->Git Extension安裝目錄.打開Git Extension.找到Setting設置設置選項頁Git:

通常狀況若是安裝順序沒有問題.安裝Git Extension工具後都會自動找到對應Git命令行工具安裝路徑,git命令行工具備兩種,一種是 cygwin 下命令行,一種是 msysGit 命令行,git extensions 能夠配置使用哪種命令行工具。因Git Extension是基於命令行操做的.在執行請檢查該設置是否指向正確Git命令行安裝工具路徑.

最後須要安裝Git Source Control Provider,打開Visual STudio 2010開發工具.找到Tools->Extension Manager選擇Online Gallery選項頁搜索:Git Source Control Provider 看到:

下載安裝.固然也能夠不用打開Visual Studio 也能夠經過[Git Source Control Provider]地址直接下載安裝便可.安裝完成後找到Tools->Options->Souce Control選項中把Git Souce Control Provider做爲默認版本控制工具:

至此在Visual Studio 2010搭建好了Git版本控制須要環境.

<2>Git在Visual Studio 基本操做

構建好Git在Visual Studio 2010開發工具版本控制.經過一個具體的Windows phone Application 來演示一下Git基本操做,首先在硬盤上開闢一個獨立的文件夾CodeDevelopment:在該項目源碼放在該目錄下 新建解決方案以下.看看初始狀態:

在初始狀態下並無繼承Git版本控制.若是在Setting目錄下設置Git.能夠經過右鍵點擊文件能夠看到Git操做的選項:

如要對某個項目執行Git版本控制管理.只需到此項目所在的目錄建立一個倉庫.也就是Git-New Repotiory操做,執行完成後能在項目目錄下看到多了Git文件目錄:

初始化後,在當前目錄下會出現一個名爲 .git 的目錄,全部 Git 須要的數據和資源都存放在這個目錄中。不過目前,僅僅是按照既有的結構框架初始化好了裏邊全部的文件和目錄,但咱們尚未開始跟蹤管理項目中的任何一個文件.和.git同處一個目錄的全部文件,如今就歸入了這個版本庫的範圍以內.能夠在改目錄下執行Git命令.也可以看到Visual STudio多了兩個View窗口:

當建立完一個倉庫發現解決方案的代碼文件並無相似SVN或TFS發生狀態變化-即經過文件前小圖標標識狀態.不知道爲什麼這可能Git Extension一個Bug.這時只有經過重啓VS工具才能看到文件跟蹤的狀態:

well.是否可TFS和SVN體驗一致.Well來看看庫當前狀態右鍵點擊項目找到Git->GitBesh經過Git指令:Git Status執行

這說明你如今的工做目錄至關乾淨。換句話說,當前沒有任何跟蹤着的文件,也沒有任何文件在上次提交後更改過。此外,上面的信息還代表,當前目錄下沒有出現任何處於未跟蹤的新文件,不然 Git 會在這裏列出來。最後,該命令還顯示了當前所在的分支是 master,這是默認的分支名稱.在沒有進入代碼修改以前.能夠提交解決方案最原始的版本.經過右鍵點擊解決方案找到Git->Commit執行第一次版本提交:

執行後看到Commit頁面,因如今文件都沒有添加到Git暫存區.因此若是直接提交會提示:

因此在執行操做以前能夠把全部文件添加到Git暫存區,添加MEssage 直接提交:

點擊提交Commit按鈕 提交成功:

如今在代碼修改Mainpage頁面PageTitle爲chenkai.後再次提交.就能直接看到修改的差別:

關於咱們建立沒有作任何操做直接執行提交操做時提示. 實際上是說明Git在執行提交操做必要的流程.在工做目錄下面的全部文件都不外乎這兩種狀態:已跟蹤或未跟蹤。已跟蹤的文件是指原本就被歸入版本控制管理的文件,在上次快照中有它們的記錄,工做一段時間後,它們的狀態多是未更新,已修改或者已放入暫存區。而全部其餘文件都屬於未跟蹤文件。它們既沒有上次更新時的快照,也不在當前的暫存區域.文件在整個Git版本控制狀態週期:

Git的暫存區是在版本未在提交以前存儲位置.從上圖能夠看出.整個提交流程目錄變化位置:工做目錄->暫存區->版本庫.暫存區的目的至關於實際編碼和真正提交到Git執行版本追蹤之間一個緩衝地帶.這有什麼好處呢.?很簡單.暫存區的文件能夠任意的在工做目錄和版本庫實現自由的交互.這樣設計目的用戶在操做過程可能會出錯.暫存區也就給了用戶撤銷原來操做的可能.在文件沒有進行任何操做以前通常經過Git Add指令吧文件添加到暫存區.在執行Commit操做時文件狀態就有暫存區提交成爲Git版本受控制的版本庫中.

在Commit頁面能夠看到一個鍵便捷的操做:

實現從工做目錄到暫存區文件批量操做.其實Stage的操做內部封裝就是Git add指令.固然也能夠經過AddFiles 執行這種批量操做:

固然在Git中執行提交操做依然能夠跳過暫存區操做.儘管使用暫存區域的方式能夠精心準備要提交的細節,但有時候這麼作略顯繁瑣。Git 提供了一個跳過使用暫存區域的方式,只要在提交的時候,給 git commit 加上 -a 選項,Git 就會自動把全部已經跟蹤過的文件暫存起來一併提交:這就是從工做目錄->版本庫直接操做.能夠打開命令行:

能夠看到,提交後它會告訴你,當前是在哪一個分支(master)提交的,本次提交的完整 SHA-1 校驗和是什麼(463dc4f),以及在本次提交中,有多少文件修訂過,多少行添改和刪改過.提交成功後.看一下文件狀態:

由原來的加號變鎖.標識當前全部的文件已經第一次提交到版本庫.若是當前再次修改MainPage.xaml則能夠看到文件狀態發生改變:

紅色對勾標識當前文件已經發生了修改.而淺×××的感嘆號.標識當前文件狀態由工做目錄已經存放暫存區等待提交.假如咱們在正常編譯操做.執行屢次提交.可能某一次版本提交時會出現手工操做失誤.好比在此次版本提交以往提交某些文件,或是忘記修改某些文件.可能須要撤消剛纔所作的某些操做,請注意,有些操做並不老是能夠撤消的,因此請務必謹慎當心,一旦失誤,就有可能丟失部分工做成果。可使用 --amend 選項從新提交.:

   1:  $ git commit --amend

令將使用當前的暫存區域快照提交。若是剛纔提交完沒有做任何改動,直接運行此命令的話,至關於有機會從新編輯提交說明,而所提交的文件快照和以前的同樣,若是剛纔提交時忘了暫存某些修改,能夠先補上暫存操做,而後再運行 --amend 提交:

   1:  $ git commit -m 'initial commit'
   2:  $ git add forgotten_file
   3:  $ git commit --amend 

ok.如今修改MainPage.xaml。在把這個文件追加上一個版本中添加Add Files操做後執行Git命令以下:

well順利提交.有時咱們經過Git Extension集成的命令經過Add Files 方式把當前全部工做的目錄的文件添加到暫存區.也就是添加Git版本跟蹤. 可能爲了減輕操做的負擔.對於有些應用程序編譯中自動生成的文件.相似日誌.或編譯的文件並不須要Git版本管理.須要把這些文件從暫存區剔除掉.取消暫存區文件.能夠執行以下Git命令:

   1:   git reset HEAD <file文件名稱>...

在咱們執行提交屢次能夠Git Extension中查看提交的版本.固然也能夠經過命令Git Log方式查看一樣的效果:

能夠看到最後一次提交版本Message.總共提交三次版本.固然也能夠在Git History看到圖形化的提交歷史版本:

當咱們修改完成以後.在編輯過程達到一個滿意的過程.,git 是分佈式版本系統,都有一個 git 版本庫的拷貝,爲了和遠程其餘版本庫同步,須要進行同步操做.同步操做通常分爲拉取pull.另一個推送Push.針對Git的服務器.若是比較大的組織結構能夠企業內部構建本身的Git服務器.若是是小型團隊.徹底沒有必要這麼麻煩.如今依然很好第三方託管服務相似GitHub.

首先須要創建一個GitHub帳號.就很少說了打開後能看到操做流程以下:

因已經配置過Git環境.因此直接建立一個Create Repository:

填寫項目名稱.描述和HomePage是可選項.固然最關鍵是能夠設置GitHub託管的項目是否公開或私密狀態.建立庫Repository完成能夠看到具體操做Git指令的流程以下:

首先須要見車Git Bash是否設置對應的全局的用戶名和Email:

設置完成後須要在GitHub針對託管的項目添加一個公鑰,若是沒有公鑰則能夠經過Bit Extension工具自動生成一個匹配的公鑰和私鑰文件並保存在本地,帶卡Bit Extension 找到:

打開操做General 生成一對公私密鑰,並保存本地硬盤目錄中:

保存上面的公鑰字符串和公鑰key文件爲public文件,密鑰爲private.ppk文件.保存完成後須要到GitHub控制面版頁面把該公鑰添加上去:

添加成功後.在指令操做流程頁面就能夠GitHub對外公開該項目訪問路徑:git@github.com:chenkai/GitBaseOperator_Demo.git,對於Github上對外訪問路徑格式通常是:通常是 git@github.com:yourName/yourProject.git 格式. 這時咱們能夠把已經修改的應用程序經過Visual Studio 中Git Push到GitHub上:

這時會提示一個窗體:

首先點擊Manage添加默認的添加項目信息. 找到 Default Pull:

添加遠程的Github項目信息.並save,在選擇Remote REspositories設置對應項目Reposity的基本信息並Save:

關閉窗體回到Push主頁面就會看到對應默認項目是BitBaseOperator_Demo.ok此時點擊Push開始推送代碼到Github上:

肯定.在調用Git.Exe是須要容許其對外訪問輸入yes:

開始推送 若是提示出錯相似以下:

提示當前權限不容許操做.遠程鏈接中斷.好吧這個問題折騰我很久.後來在官方社區看到解決方法.其實這主要是GitBash經過cmd命令進入命令行輸入界面的。正確的操做是,在git附帶的bash(GitBash能夠在開始菜單的git目標裏面找到)裏面運行命令,就能夠一切正常。固然若是以爲這種界面操做麻煩也能夠根據官方給出的純指令的方式操做吧代碼Push到GitHub上操做流程以下或是參加以下小白解決方案[ttp://help.github.com/win-set-up-git/]:

github的官方文檔

#1. Check for SSH keys. $ cd ~/.ssh #2. Backup and remove existing SSH keys. $ lsLists all the subdirectories in the current directory $ mkdir key_backupmakes a subdirectory called "key_backup" in the current directory $ cp id_rsa* key_backupCopies the contents of the id_rsa directory into key_backup $ rm id_rsa* #3. Generate a new SSH key. $ ssh-keygen -t rsa -C "your_email@youremail.com" #4. Add your SSH key to GitHub. #5. Test everything out. $ ssh -T git@github.com

Git Bash中執行push令以下:

Push指令:
$ git remote add origin git@github.com:testinguser/yourproj.git $ git push origin master

在實際操做還有另一種狀況.也會致使這種狀況出錯.出錯的緣由是由於公私密鑰保存位置不在默認目錄下.致使在Push時提示須要提示提供公鑰.

因此在並不推薦使用工具的方式生成密鑰,若是要保存最好不要自定義保存目錄:

 

固然最好的方式就是官方給出經過Bit Bash指令工具自動生成.操做流程以下:

首先經過本身的電子郵件生成對應的公私密鑰.保存和存儲指令一概採用默認爲空的方式保存默認目錄下.注意這個默認目錄在User建立成功能夠經過以下指令測試是否鏈接GitHub成功":

   1:  ssh -T git@github.com

測試成功成功後.在來經過Visual STudio 中Git集成Push到GitHub上:

you see Push成功.GitHub也能看到對應目錄和Code.

well.當咱們經過GitHub首先第三方代理時.經過和其餘開發人員或第三方團隊時很方便.隨時隨地就能夠把代碼Commit或是Pull一個版本,這樣分佈式結構徹底體現Git的威力.ok加入Team另一個成員修改Github上源碼並Commit一個完整版本.如今Pull下來一個最新SouceCode.在Visual Studio中:執行Pull:

分支選擇以主幹Master. 合併策略Merge默認以GitHub SouceCode爲基準覆蓋本地.

Pull 成功.

若是在GitHub看到不錯的項目能夠經過本地找到指定目錄Clone本地:

Clone操做執行本地源碼:

Git操做的細節太多了. 我這個短短的篇幅中是沒法寫完的.只能列舉一些在Visual Studio最基本的應用.展現一下Git做爲版本控制工具強項.權當拋磚引玉.

<3>Git小結

Git做爲很好的分佈式的版本控制工具.在版本控制可以優雅實現多種類型模式和Team的協做模式.機動靈活處理了版本控制各類問題.固然這篇文章我寫了兩天.主要是要重現Git大量細節操做太費時費力了.寫的很累.篇幅畢竟有限.不能全面覆蓋.只能拋磚引玉.對於Windows平臺的用戶來 這種分佈式控制版本控制工具.與強大Visual Studio集成.對Windows 平臺開發人員和平常團隊管理來講也是」福音」,極力推薦.

能夠參考上篇:Git Tool Part 1

相關文章
相關標籤/搜索