git版本管理工具,[轉]Windows環境中使用版本管理工具 Git

 2023-11-01 阅读 23 评论 0

摘要:Git 是一個分布式版本控制工具 Git --- The stupid content tracker(傻瓜內容跟蹤器),Linus 是這樣給我們介紹 Git 的。 git版本管理工具。Git 是用于 Linux 內核開發的版本控制工具。與常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式

Git 是一個分布式版本控制工具

Git --- The stupid content tracker(傻瓜內容跟蹤器),Linus 是這樣給我們介紹 Git 的。

git版本管理工具。Git 是用于 Linux 內核開發的版本控制工具。與常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本庫的方式,不必服務器端軟件支持,使源代碼的發布和交流極其方便。 Git 的速度很快,這對于諸如 Linux kernel 這樣的大項目來說自然很重要。 Git 最為出色的是它的合并跟蹤(merge tracing)能力。

實際上內核開發團隊決定開始開發和使用 Git 來作為內核開發的版本控制系統的時候,世界開源社群的反對聲音不少,最大的理由是 Git 太艱澀難懂,從 Git 的內部工作機制來說,的確是這樣。但是隨著開發的深入,Git 的正常使用都由一些友好的腳本命令來執行,使 Git 變得非常好用,即使是用來管理我們自己的開發項目,Git 都是一個友好,有力的工具。現在,越來越多的著名項目采用 Git 來管理項目開發,例如:wine, U-boot 等。

作為開源自由原教旨主義項目,Git 沒有對版本庫的瀏覽和修改做任何的權限限制,通過其他工具也可以達到有限的權限控制,比如:gitosis、CodeBeamer MR。原本 Git的使用范圍只適用于 Linux / Unix 平臺,但逐步并成熟了在 Windows 平臺下的使用,主要歸功于Cygwin與msysgit環境與TortoiseGit這樣易用的 GUI 工具。其實 Git 的源代碼中已經加入了對 Cygwin 與 MinGW 編譯環境的支持并被逐步完善,對于 Windows 使用者是個福音。

Windows為用戶提供的環境?============================

Git是一個分布式的版本控制系統,最初由Linus Torvalds編寫,作者把他描述為一個“傻瓜式的版本管理系統”,用作Linux內核代碼的管理。在推出后,Git在其它項目中也取得了很大成功,尤其是在Ruby社區中。目前,包括Rubinius和Merb在內的很多知名項目都使用了Git。Git同樣可以被諸如Capistrano?和?Vlad the Deployer這樣的部署工具所使用。使用GIT系統,不需要像SVN那樣搭建一臺SVN服務器來存放代碼庫。

?

winre環境、一、為什么選擇Git

對于流行的軟件版本開源管理軟件,元老級的CVS、后來新秀的SVN,今天我在CHIP.CN Dowload中看到了一篇文章:《2008年度最佳開源軟件大獎》(http://download.chip.eu/cn/standardbeitrag_cn_3640079.html)。其中提到了GIT版本管理系統。

我很奇怪,為什么SVN沒有入圍并獲獎呢?當初,我在從CVS轉移到SVN時就曾經就SVN的一系列優勢進行過一些粗淺的學習。SVN在版本庫的管理上較CVS有明顯的優勢。那么與SVN相比,GIT的優勢又在哪里呢?

windows環境。經過強大的Google,我從網上找到了這些內容:

From?Git入門教程》:http://hi.baidu.com/eehuang/blog/item/37af8d54242d6351564e00b5.html

1.?傻瓜都會的初始化,git init, git commit -a,?就完了。對于隨便寫兩行代碼就要放到代碼管理工具里的人來說,再合適不過。也可以拿git做備份系統,或者同步兩臺機器的文檔,都很方便。

2.?絕大部分操作在本地完成,不用和集中的代碼管理服務器交互,終于可以隨時隨地大膽地check in代碼了。?只有最終完成的版本才需要向一個中心的集中的代碼管理服務器提交。

3.?每次提交都會對所有代碼創建一個唯一的commit id。不像CVS那樣都是對單個文件分別進行版本的更改。所以你可以一次性將某次提交前的所有代碼check出來,而不用考慮到底提交過那些文件。(其實SVN也可以做到這點)

4. branch管理容易多了,無論是建立新的branch,還是在branch之間切換都一條命令完成,不需要建立多余的目錄。

5. branch之間merge時,不僅代碼會merge在一起,check in歷史也會保留,這點非常重要。

From gitHost.cn

1、更方便的?Merge

分布式管理必然導致大量的?Branch?和?Merge?操作。因此分布式版本控制系統都特別注意這方面。在傳統的?CVS?里面制作?Branch?和?Merge?簡直就是噩夢,Subversion?作為一個用于替代?CVS?的系統,專門改進了?Branch?操作。然而似乎人們沒有注意到,Branch?是輕松了,可是?Merge?呢?如果不能很方便地?Merge?回來,做?Branch?仍然是噩夢。事實上,我就經歷過在開發團隊里面由于隊友操作不對而在?Merge?的時候把我的許多代碼都覆蓋掉了。當時正是使用的?subversion?。雖然源代碼仍然在歷史里面,但是要去一個一個地找出被覆蓋掉的文件并恢復過來確實是一件很難忘的事情。

2、更方便的管理

傳統的版本控制系統使用中央倉庫,一些倉庫相關的管理就只能在倉庫上進行。賦予開發團隊每一個人中央倉庫的管理權限是非常不好的。但是有時候確實會比較不方便的地方。

3、更健壯的系統

分布式系統一般情況下總是比單服務端的系統要健壯,因為當服務端一旦掛掉了整個系統就不能運行了。然而分布式系統通常不會因為一兩個節點而受到影響。

4、對網絡的依賴性更低

雖然現在網絡非常普及,但是并不是隨時隨地都有高速網絡,甚至有時候根本沒有網絡可以訪問。低速的網絡會讓人心情煩躁,有時候就呆呆地盯著屏幕上的?commit?進度,什么事情也干不了。而沒有網絡連接更是致命的:你無法?commit?!這表示你進行任何改動以前都必須小心翼翼,否則你可能再也找不會你曾經寫的一些代碼了。

5、更少的“倉庫污染”

有時候你要做一個模塊,它不是太大,所以沒有必要為它新建一個?branch?,但是它又不是那么小,不可能一次提交就做好。于是便會提交一些不完整的代碼到倉庫,有時候會導致整個程序無法運行,嚴重影響團隊里其他人的開發。大多數人在這種情況下的解決辦法都是寫完之后再提交。但是作為習慣了版本控制的人來說,進行不計后果的大幅修改是經常的事情,到后來突然發現自己先前的代碼沒有提交,就后悔莫及了。如果是分布式系統的話就不會存在這樣的問題,因為本地倉庫的修改不會影響到別人的倉庫。當你完成并測試以后,就可以在郵件列表里面說:我已經把這個模塊做好了。然后感興趣的人就可以從你這里?pull?你的成果了。

雖然網上各種對Git的譽美之詞決不止于此,但是在Git的主站上,還是盡可能客觀的對Git和Subversion進行了一番比較。(GitSvnComparsion:http://git.or.cz/gitwiki/GitSvnComparsion)。另外,Subversion目前通過SVK也已經提供了一定程度上的源代碼庫分布式的管理能力。能夠實現源代碼的離線提交等功能。

?

Git與CVS 的區別

  • 分支更快、更容易。
  • 支持離線工作;本地提交可以稍后提交到服務器上。
  • Git 提交都是原子的,且是整個項目范圍的,而不像 CVS 中一樣是對每個文件的。
  • Git 中的每個工作樹都包含一個具有完整項目歷史的倉庫。
  • 沒有哪一個 Git 倉庫會天生比其他倉庫更重要。

?

GitSVN 的區別

Git?不僅僅是個版本控制系統,它也是個內容管理系統(CMS)、工作管理系統等。如果你是一個具有使用SVN背景的人,你需要做一定的思想轉換,來適應GIT提供的一些概念和特征。所以,這篇文章的主要目的就是通過介紹GIT能做什么、它和SVN在深層次上究竟有什么不同來幫助你認識它。那好,這就開始吧…

  1. GIT是分布式的,SVN不是

    這是GIT和其它非分布式的版本控制系統,例如SVN,CVS等,最核心的區別。如果你能理解這個概念,那么你就已經上手一半了。需要做一點聲明,GIT并不是目前第一個或唯一的分布式版本控制系統。還有一些系統,例如Bitkeeper,?Mercurial等,也是運行在分布式模式上的。但GIT在這方面做的更好,而且有更多強大的功能特征。

    GIT 跟SVN一樣有自己的集中式版本庫或服務器。但,GIT更傾向于被使用于分布式模式,也就是每個開發人員從中心版本庫/服務器上chect out代碼后會在自己的機器上克隆一個自己的版本庫。可以這樣說,如果你被困在一個不能連接網絡的地方時,就像在飛機上,地下室,電梯里等,你仍然能夠提交文件,查看歷史版本記錄,創建項目分支,等。對一些人來說,這好像沒多大用處,但當你突然遇到沒有網絡的環境時,這個將解決你的大麻煩。

    同樣,這種分布式的操作模式對于開源軟件社區的開發來說也是個巨大的恩賜,你不必再像以前那樣做出補丁包,通過email方式發送出去,你只需要創建一個分支,向項目團隊發送一個推請求。這能讓你的代碼保持最新,而且不會在傳輸過程中丟失。GitHub.com就是一個這樣的優秀案例。

    有些謠言傳出來說subversion將來的版本也會基于分布式模式。但至少目前還看不出來。

  2. GIT把內容按元數據方式存儲,而SVN是按文件

    所有的資源控制系統都是把文件的元信息隱藏在一個類似.svn,.cvs等的文件夾里。如果你把.git目錄的體積大小跟.svn比較,你會發現它們差距很大。因為,.git目錄是處于你的機器上的一個克隆版的版本庫,它擁有中心版本庫上所有的東西,例如標簽,分支,版本記錄等。

  3. GIT分支和SVN的分支不同

    分支在SVN中一點不特別,就是版本庫中的另外的一個目錄。如果你想知道是否合并了一個分支,你需要手工運行像這樣的命令svn propget svn:mergeinfo,來確認代碼是否被合并。感謝Ben同學指出這個特征。所以,經常會發生有些分支被遺漏的情況。

    然而,處理GIT的分支卻是相當的簡單和有趣。你可以從同一個工作目錄下快速的在幾個分支間切換。你很容易發現未被合并的分支,你能簡單而快捷的合并這些文件。

  4. GIT沒有一個全局的版本號,而SVN有

    目前為止這是跟SVN相比GIT缺少的最大的一個特征。你也知道,SVN的版本號實際是任何一個相應時間的源代碼快照。我認為它是從CVS進化到SVN的最大的一個突破。因為GIT和SVN從概念上就不同,我不知道GIT里是什么特征與之對應。如果你有任何的線索,請在評論里奉獻出來與大家共享。

    更新:有些讀者指出,我們可以使用GIT的SHA-1來唯一的標識一個代碼快照。這個并不能完全的代替SVN里容易閱讀的數字版本號。但,用途應該是相同的。

  5. GIT的內容完整性要優于SVN

    GIT的內容存儲使用的是SHA-1哈希算法。這能確保代碼內容的完整性,確保在遇到磁盤故障和網絡問題時降低對版本庫的破壞。這里有一個很好的關于GIT內容完整性的討論 –http://stackoverflow.com/questions/964331/git-file-integrity

GIT和SVN之間只有這五處不同嗎?當然不是。我想這5個只是“最基本的”“最吸引人”的,我只想到這5點。如果你發現有比這5點更有趣的,請共享出來,歡迎。

[本文英文原文鏈接:Fundamental differences between GIT & SVN?]

?

版本控制工具比較-CVS,SVN,GIT

首先介紹幾個版本控制軟件相互比較的重要依據,更詳細的比較請參考文中鏈接:

*?版本庫模型(Repository model): 描述了多個源碼版本庫副本間的關系,有客戶端/服務器和分布式兩種模式。在客戶端/服務器模式下,每一用戶通過客戶端訪問位于服務器的主版本庫,每一客戶機只需保存它所關注的文件副本,對當前工作副本(working copy)的更改只有在提交到服務器之后,其它用戶才能看到對應文件的修改。而在分布式模式下,這些源碼版本庫副本間是對等的實體,用戶的機器出了保存他們的工作副本外,還擁有本地版本庫的歷史信息。

*?并發模式(Concurrency model): 描述了當同時對同一工作副本/文件進行更改或編輯時,如何管理這種沖突以避免產生無意義的數據,有排它鎖和合并模式。在排它鎖模式下,只有發出請求并獲得當前文件排它鎖的用戶才能對對該文件進行更改。而在合并模式下,用戶可以隨意編輯或更改文件,但可能隨時會被通知存在沖突(兩個或多個用戶同時編輯同一文件),于是版本控制工具或用戶需要合并更改以解決這種沖突。因此,幾乎所有的分布式版本控制軟件采用合并方式解決并發沖突。

*?歷史模式(History model):描述了如何在版本庫中存貯文件的更改信息,有快照和改變集兩種模式。在快照模式下,版本庫會分別存儲更改發生前后的工作副本;而在改變集模式下,版本庫除了保存更改發生前的工作副本外,只保存更改發生后的改變信息。

*?變更范圍(Scope of change):描述了版本編號是針對單個文件還是整個目錄樹。

*?網絡協議(Network protocols):描述了多個版本庫間進行同步時采用的網絡協議。

*?原子提交性(Atomic commit):描述了在提交更改時,能否保證所有更改要么全部提交或合并,要么不會發生任何改變。

*?部分克隆(Partial checkout/clone):是否支持只拷貝版本庫中特定的子目錄。

?

名稱

版本庫模型

并發模式

歷史模式

變更范圍

網絡協議

原子提交性

部分克隆

CVS

Client-server

Merge

Changeset

File

Pserver,ssh

No

Yes

SVN

Client-server

3-way merge, recursive merge, octopus merge

Changeset and Snapshot

Tree

custom (svn), custom (svn) over ssh, HTTP and SSL (usingWebDAV)

Yes

Yes

Git

Distributed

Merge or lock

Snapshot

Tree

custom, custom over ssh, rsync, HTTP/HTTPS, email, bundles

Yes

No

?

主要參考鏈接:

http://en.wikipedia.org/wiki/Comparison_of_revision_control_software#cite_note-47

http://www.softeng.rl.ac.uk/media/uploads/publications/2010/03/cvs-svn.pdf

http://www.smashingmagazine.com/2008/09/18/the-top-7-open-source-version-control-systems/

http://jon.limedaley.com/plog/archives/2004/10/15/version-control-comparison

版本控制軟件中Trunk和Branch的區別:

Trunk--- 軟件開發過程中的主線,保存了從版本庫建立到當前的信息。 Branch---軟件開發過程中的分支,保存了從版本庫的某一特定點(不一定是版本庫建立時)到當前的信息。分支主要用于在不影響Trunk其它用戶情況下進行一些關于新功能的探索性或實驗性的開發,待新功能完善后它也可以合并到Trunk中。

原文地址:版本控制工具比較-CVS,SVN,GIT

?

?

二、在Windows上的使用Git

不得不說,Git是為Linux而生的。(廢話,Git的最初創建人就是Linux的創始人啊)。在Linux環境下,要使用Git,與任何Linux中的命令行工具沒有什么區別。甚至在擊鍵數上還有明顯的優勢。在Windows上要使用Git在目前看來只有兩種方法:1、使用Cygwin(一個在Windows上運行的Linux環境);2、使用msysgit(http://code.google.com/p/msysgit/)。Cygwin和msysgit的使用方法類似。Cygwin具有大量Linux的功能,如果只是想使用Git功能的話msysgit還是最簡單和快速的方法。下面的介紹將以msysgit為主進行。

為了能夠具備通過互聯網實現與別人協作開發的能力。對于項目,需要一個公開的源代碼托管服務。好在,現在已經有不少可以供我們選擇的。尤其是githost,更是一個中文的源代碼托管服務提供方。從目前看來,在Githost上落戶的項目還很少,貌似是一個新近誕生的服務提供方。如果項目對服務提供的穩定性有比較高的要求的話,還是選擇較老的git源代碼托管服務比較好吧。

如果是在局域網內工作的小組,要使用Git做源代碼管理,那就更簡單了,大家安裝好自己的Git,并指定一個人負責對Git版本庫進行管理就好了。

(一)??????GitHub簡介

GitHub是使用Ruby開發的,具有清爽的界面。GitHub提供免費的源代碼庫托管,同時也提供付費的托管服務。通過付費私有庫托管服務在財務上支持免費部分的持續運營。

GitHub提供了一套獨特的代碼庫管理界面功能,并提供項目Wiki的能力。

GitHub提供了一系列的指南,也可以到這里去看看:https://github.com/

(二)??????在Windows系統上安裝Git

下載并安裝msysgit程序:http://code.google.com/p/msysgit/

下載?Git-1.7.10-preview20120409.exe。實際上,總可以選擇最新的Git版本,以取得更好的使用效果。

安裝的過程很簡單,基本上可以使用默認設置。只是在設置路徑的時候要注意一下,為了避免與Windows路徑導致的意外情況,還是使用“Use Git Bash Only”比較安全。

Msysgit有命令行和圖形UI兩種使用方式。根據你的喜好選擇吧。要說的是,圖形UI可能不能完成所有的工作,因此在某些情況下(例如創建SSH Key),命令行還是必不可少的。

Msysgit的Bash命令行對中文的支持不好。所有的中文字符都顯示成了“?”。因此,為了避免麻煩,最好避免使用中文的文件名、目錄名和用戶名等。不知道現階段Cygwin對中文的支持如何,隨后再試試看吧。

(三)??????設定GitHub

要使用GitHub首先需要創建SSH Key。SSH將用來加密本機與遠端服務器之間的通信。同時也是識別你對代碼所做的變更的方法。SSH Key可以使用Git命令行來產生。如果你已經有一個SSH Key了,那么在這里也可以直接使用。

要使用Git創建SSH Key?首先需要打開Git Bash?命令行。

輸入命令:

ssh-keygen?-C "username@email.com" -t rsa

說明:username@email.com?需要更換成你自己的Email地址

程序將提出一些問題,接受文件默認存放位置,當要求輸入pass phrase時,如果本機安全沒有問題,也可以不輸入。找到當時制定的文件存儲位置中id_rsa.pub文件,這就是在GitHub上申請帳戶時需要使用的SSH公鑰文件。

在github.com的register中選擇Free account,在后續的界面中按照要求填入相應的內容即可完成注冊,很簡單的。

關于Git后續如何使用,還是在另外的文檔中說明吧。

?

?三、關于Git的一些聯結

1、??建立Git遠程服務器:

目前貌似還沒有在Windows上建立Git服務器的。Linux在開源上還是強大啊!

????????Hosting Git repositories, The Easy (and Secure) Way? http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way

????????Remote Git Repos on Ubuntu: The Right Way http://blog.drewolson.org/2008/05/remote-git-repos-on-ubuntu-right-way.html

???????Installing Git on a server (Ubuntu or Debian) http://www.urbanpuddle.com/articles/2008/07/11/installing-git-on-a-server-ubuntu-or-debian

2、??基于Git的源代碼托管

????????中文的Git源代碼托管,基于gitorious構建:http://www.githost.cn/projects

????????Gitorious Gitorious is another free hosting site with a custom web interface, supporting multiple repositories per project, local installations and with open source code: http://gitorious.org/

????????repo.or.cz repo.or.cz is the oldest hosting site, accommodating many hundreds of projects, with open-sourced infrastructure and aimed at open source software. It provides full push features as well as simple mirroring mode and gitweb interface with various enhancements.?:http://repo.or.cz/

???????GitHub? GitHub provides both free hosting for smaller projects and paid options for private hosting and large-sized projects. It uses a custom web interface including a wiki hosting and puts emphasis on social networking of project developers:http://github.com/

3、??關于Git的有用的聯結:

???????Git的老家:http://git.or.cz/

???????Git User's Manual (for version 1.5.3 or newer)?: ? ? ? ?http://www.kernel.org/pub/software/scm/git/docs/v1.6.0.2/user-manual.html

???????Git - SVN Crash Course: ? ? ? ?http://git.or.cz/course/svn.html

???????Everyday GIT With 20 Commands Or So: ? ? ? ?http://www.kernel.org/pub/software/scm/git/docs/everyday.html

?

四、參考文檔:

????????Getting Started with Git and GitHub on Windows: ? ? ? ? http://kylecordes.com/2008/04/30/git-windows-go/

????????中文教程:?http://www.b***/documents/gittutorcn.htm

????????簡介:?http://linuxtoy.org/archives/git.html

????????英文教程:http://www.kernel.org/pub/software/scm/git/docs/tutorial.html

????????GitHub:http://github.com

?

原文:http://www.cnblogs.com/banjia/archive/2008/09/20/1294901.html

轉載于:https://www.cnblogs.com/licheng/archive/2013/05/04/3059875.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/165872.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息