針對Git的使用.在Git中文操作指南手冊中.講解大量關於GiT的細節操作.可是對於從SVN或是TFS轉換的很多開發人員來說.很多並沒有更多學習周期時間.那么如何才能短時間內抓住Git核心枝干.短時間內快速進入Git並在代碼中集成使用工具呢.? 由於Git中富含大量的Git 命令.細節太多.本來打算在本篇中介紹一些Git通過命令的方式基本操作.等寫了大概四分之一.發現完全和最初寫這篇文章初衷完全背離了.
其實本篇的目的很簡單.與其陷入在在長長的篇幅中介紹Git Command基本用法 還不如直接采用Windows 平台開發人員最熟悉的GUI界面工具操作更為直觀.Git原理理論和操作用法也是非常系統.如果你覺得有必要建立一個系統知識結構.當然也有很好的資源可以當做日常查看手冊:
Git 系統資源:
Git中文操作指南 Download Link[http://vdisk.weibo.com/s/1UJq4]
Git Command指令在線文檔: [http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/zh_cn/index.html]
<<Git Community Book中文版>>:[http://gitbook.liuhui998.com/]
注:如上在線文檔或圖書版權源作者擁有.本文只是添加引用.如轉載請注明出處.
作為Windows 平台開發人員最常用的開發工具莫過於Visual Studio系列.但是可惜的Git作為從Linux平台的舶來品..NET開發人員更習慣於使用用戶界面,所以在進行日常任務的時候更習慣使用操作基於具有IDE的界面.
作為一個Visual Studio用戶.在使用Visual SouceSafe/Team Foundation Server、Subversion或甚至Mercurial的過程中.已經建立了使用源碼控制習慣.更多的開發人員希望在Solution解決方案目錄中就直觀看到自己的SouceCode被版本管理工具所控制着.無論在代碼修改或添加都能直接獲得狀態反饋.所以在Visual Studio使用Git需求就一直成為Git一塊”硬傷”.
如何在Visual STudio系列開發工具中使用Git版本控制工具?
<1>Visual Studio 構建Git部署環境
Well,談到這里在上章節中Git Tool Part 1中提到能夠適用Windows 平台的Git工具主要具有兩個模擬*nix like運行環境的工具:cygwin,msys;Git在cygwin,msys下都有相應的移植版本.不過就使用體驗來說個人覺得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