Git:修订间差异
无编辑摘要 |
无编辑摘要 |
||
第371行: | 第371行: | ||
* [https://coding.net/ Coding] |
* [https://coding.net/ Coding] |
||
* [[gitlab]] |
* [[gitlab]] |
||
⚫ | |||
⚫ | |||
⚫ | |||
== 参考文献 == |
== 参考文献 == |
||
第388行: | 第392行: | ||
*[https://backlogtool.com/git-guide/tw/ 連猴子都能懂的Git入門指南]{{zh-tw}} |
*[https://backlogtool.com/git-guide/tw/ 連猴子都能懂的Git入門指南]{{zh-tw}} |
||
{{div col end}} |
{{div col end}} |
||
⚫ | |||
⚫ | |||
⚫ | |||
{{-}} |
{{-}} |
2019年10月22日 (二) 16:54的版本
原作者 | 林纳斯·托瓦兹 |
---|---|
開發者 | 濱野純、林纳斯·托瓦兹 |
当前版本 | 2.23.0(2019年8月16日 | )
预览版本 | 2.23.0-rc2[1](2019年8月9日 ) |
源代码库 | |
编程语言 | C、Perl、sh[2] |
操作系统 | POSIX, Windows |
类型 | 版本控制 |
许可协议 | GNU通用公共许可证 第二版,GNU宽通用公共许可证 2.1版[3] |
网站 | https://git-scm.com/ |
git(/ɡɪt/[4],ⓘ)是一个分散式版本控制软件,最初由林纳斯·托瓦兹創作,於2005年以GPL釋出。最初目的是为更好地管理Linux核心开发而设计。应注意的是,这与GNU Interactive Tools[5](一个类似Norton Commander界面的文件管理器)有所不同。
git最初的开发动力来自于BitKeeper和Monotone[6][7]。git最初只是作为一个可以被其他前端(比如Cogito或Stgit[8])包装的后端而开发的,但后来git内核已经成熟到可以独立地用作版本控制[9]。很多著名的软件都使用git进行版本控制[10],其中包括Linux核心、X.Org服务器和OLPC内核等项目的开发流程[11]。
命名来源
“git”,該詞源自英國俚語,意思大約是「混帳」。林纳斯·托瓦兹自嘲地取了這個名字。[12][13]
“ | I'm an egotistical bastard, and I name all my projects after myself. First Linux, now git. | ” |
git的官方wiki也給出了多種關於這個名字的解释。[14]
歷史
自2002年開始,林纳斯·托瓦兹決定使用BitKeeper作為Linux內核主要的版本控制系統用以维护程式碼。因為BitKeeper為专有软件,這個決定在社群中長期遭受質疑。在Linux社群中,特別是理查德·斯托曼與自由軟體基金會的成員,主張應該使用開放原始碼的軟體來作為Linux核心的版本控制系統。林纳斯·托瓦兹曾考慮過採用現成軟體作为版本控制系統(例如Monotone),但這些軟體都存在一些問題,特別是效能不佳。現成的方案,如CVS的架構,受到林纳斯·托瓦兹的批評[15]。
2005年,安德魯·垂鳩寫了一個簡單程式,可以連接BitKeeper的儲存庫,BitKeeper著作權擁有者拉里·麥沃伊認為安德魯·垂鳩对BitKeeper內部使用的协议进行逆向工程,決定收回无偿使用BitKeeper的授權。Linux內核開發團隊與BitMover公司進行磋商,但無法解決他們之間的歧見。林纳斯·托瓦兹決定自行開發版本控制系統替代BitKeeper,以十天的時間編寫出git第一個版本[16][17]。
版本
版本 | 最初发布日期 | 最新修订版本 | 最新修订版本发布日期 |
---|---|---|---|
0.99 | 2005-07-11 | 0.99.9n | 2005-12-15 |
1.0 | 2005-12-21 | 1.0.13 | 2006-01-27 |
1.1 | 2006-01-08 | 1.1.6 | 2006-01-30 |
1.2 | 2006-02-12 | 1.2.6 | 2006-04-08 |
1.3 | 2006-04-18 | 1.3.3 | 2006-05-16 |
1.4 | 2006-06-10 | 1.4.4.5 | 2008-07-16 |
1.5 | 2007-02-14 | 1.5.6.6 | 2008-12-17 |
1.6 | 2008-08-17 | 1.6.6.3 | 2010-12-15 |
1.7 | 2010-02-13 | 1.7.12.4 | 2012-10-17 |
1.8 | 2012-10-21 | 1.8.5.6 | 2014-12-17 |
1.9 | 2014-02-14 | 1.9.5 | 2014-12-17 |
2.0 | 2014-05-28 | 2.0.5 | 2014-12-17 |
2.1 | 2014-08-16 | 2.1.4 | 2014-12-17 |
2.2 | 2014-11-26 | 2.2.3 | 2015-09-04 |
2.3 | 2015-02-05 | 2.3.10 | 2015-09-29 |
2.4 | 2015-04-30 | 2.4.12 | 2017-05-05 |
2.5 | 2015-07-27 | 2.5.6 | 2017-05-05 |
2.6 | 2015-09-28 | 2.6.7 | 2017-05-05 |
2.7 | 2015-10-04 | 2.7.6 | 2017-07-30 |
2.8 | 2016-03-28 | 2.8.6 | 2017-07-30 |
2.9 | 2016-06-13 | 2.9.5 | 2017-07-30 |
2.10 | 2016-09-02 | 2.10.5 | 2017-09-22 |
2.11 | 2016-11-29 | 2.11.4 | 2017-09-22 |
2.12 | 2017-02-24 | 2.12.5 | 2017-09-22 |
2.13 | 2017-05-10 | 2.13.7 | 2018-05-22 |
2.14 | 2017-08-04 | 2.14.5 | 2018-09-27 |
2.15 | 2017-10-30 | 2.15.3 | 2018-09-27 |
2.16 | 2018-01-17 | 2.16.5 | 2018-09-27 |
2.17 | 2018-04-02 | 2.17.2 | 2018-09-27 |
2.18 | 2018-06-21 | 2.18.1 | 2018-09-27 |
2.19 | 2018-09-10 | 2.19.2 | 2018-11-21 |
2.20 | 2018-12-09 | 2.20.1 | 2018-12-15 |
2.21 | 2019-02-24 | 2.21.0 | 2019-02-24 |
2.22 | 2019-06-07 | 2.22.0 | 2019-06-07 |
2.23 | 2019-08-16 | 2.23.0 | 2019-08-16 |
格式: 舊版本 舊版本,仍被支援 当前版本 最新的预览版 |
主要功能
git是用于Linux内核开发的版本控制工具。与CVS、Subversion一類的集中式版本控制工具不同,它采用了分布式版本库的作法,不需要服务器端软件,就可以運作版本控制,使得源代码的发布和交流极其方便。git的速度很快,这对于诸如Linux内核这样的大项目来说自然很重要。git最为出色的是它的合并追踪(merge tracing)能力。
实际上内核开发团队决定开始开发和使用git来作为内核开发的版本控制系统的时候,世界上开源社群的反对声音不少,最大的理由是git太艰涩难懂,从git的内部工作机制来说,的确是这样。但是随着开发的深入,git的正常使用都由一些友善的命令来执行,使git变得非常好用。现在,越来越多的著名项目采用git来管理项目开发,例如:wine、U-boot等[18]。
作为开源自由原教旨主义项目,git没有对版本库的浏览和修改做任何的权限限制,通过其他工具也可以达到有限的权限控制,比如:gitosis、CodeBeamer MR。原本git的使用范围只适用于Linux/Unix平台,但在Windows平台下的使用也日渐成熟,這主要归功于Cygwin、msysgit环境,以及TortoiseGit这样易用的GUI工具。git的源代码中也已经加入了对Cygwin与MinGW编译环境的支援且逐漸完善,為Windows使用者帶來福音。
实现原理
git和其他版本控制系统(如CVS)有不小的差别,git本身关心檔案的整体性是否有改變,但多數的版本控制系统如CVS或Subversion系统則在乎檔案内容的差异。git拒绝保持每个文件的版本修订关系。因此查看一个文件的历史需要遍历各个history快照;git隐式处理文件更名,即同名文件默认为其前身,如果没有同名文件则在前一个版本中搜索具有类似内容的文件。
git更像一個檔案系统,直接在本機上取得資料,不必連線到主机端获取資料。 每个开发者都可有全部开发历史的本地副本,changes从这种本地repository复制给其他开发者。这些changes作为新增的开发分支被导入,可以与本地开发分支合并。
分支是非常轻量级的,一个分支仅是对一个commit的引用。
git是用C语言开发的,以追求最高的性能。git自动完成垃圾回收,也可以用命令git gc --prune
直接调用。
git存储每个新创建的object作为一个单独文件。为了压缩存储空间占用, packs操作把很多文件(启发式类似名字的文件往往具有类似内容)使用差分压缩入一个文件中(packfile),并创建一个对应的索引文件,指明object在packfile中的偏移值。新创建的对象仍然作为单独文件存在。repacks操作非常费时间,git会在空闲时间自动做此操作。也可用命令git gc
来直接启动repack。packfile与索引文件都用SHA-1作为校验和并作为文件名。git fsck
命令做校验和的完整性验证。
Git服务器典型的TCP 监听端口为9418。
庫目录
- hooks:存儲鉤子的文件夾
- logs:存儲日誌的文件夾
- refs:存儲指向各個分支的指針(SHA-1标识)文件
- objects:存放git對象
- config:存放各種設置文檔
- HEAD:指向當前所在分支的指針文件路徑,一般指向refs下的某文件
数据結構
Git有两种数据结构:可变的索引(index或stage或cache)用于缓冲工作目录信息与下一次提交的版本信息;不变的、仅追加的对象数据库。
对象数据库包含4类对象:
- blob (二进制大对象)是一个文件的内容。Blobs没有适当的文件名、时间戳、或其他元数据。一个blob的内部名字是它的内容的hash。
- tree对象等效于目录。包含文件名列表以及文件的类型比特、到blob或tree对象的引用。tree对象是源树(source tree)的快照。用默克树实现。
- commit对象链接tree对象在一起而成为history. 包含顶层源目录的tree对象名字、一个时间戳、log信息、0个或多个父commit对象的名字。
- tag对象是一个容器,包含了到另一个对象的引用,也可以增加关于另外对象的元数据。通常它保存需要追溯的特定版本数据的一个commit对象的数字签名。
每个对象用其内容的SHA-1 hash来标识。对象放入它的hash值得前两个字符标识的目录中,其余hash字符作为这个对象的文件名。
Git数据库中不变引用的对象将会被垃圾回收清除。Git命令可以创建、移动、删除引用。"git show-ref"列出所有引用。某些引用类型:
- heads: 引用一个本地对象,是commit的指针。每个head可以指任意一个这样的指针。可以包含任意数量的heads。而"HEAD"(全部大写),仅仅指的是当前有效的head。默认情况下,在每个仓库下都有一个head,叫做master。
- remotes: 引用远程repository中的一个对象
- stash: 引用一个还没有committed的一个对象
- meta: 例如一个bare repository中的一个配置, 用户权限; refs/meta/config命名空间等[19]
- tags:
移植性
在Windows平台上有msysgit與TortoiseGit可資利用。TortoiseGit還提供有GUI。
现在git也提供windows版本下载。
Visual Studio 自 2013 版本开始内置 Git 功能。
GIT GUI客户端
- GitHub Desktop:可用于第三方Git仓库网站[20]
- Git for Windows
- TortoiseGit
- SourceTree
- GitEye
使用
使用git的專案
有不少的專案目前都使用git:[21]
- Amarok[22]
- Android[23]
- Arch Linux
- Aquamacs Emacs
- BlueZ[24]
- Btrfs[25]
- Clojure
- CakePHP
- Debian[26]
- Digg[27]
- DragonFly BSD[28]
- Drupal[29]
- Elinks[30]
- Fedora
- FFmpeg [31]
- Freenet
- git[32]
- GIMP
- GNOME[33][34]
- GPM
- GStreamer[35]
- gThumb[36]
- GTK+[37]
- Hurd[38]
- jQuery[39]
- Laika (EHR testing framework)[40]
- LilyPond (music typesetting)[41]
- Linux kernel
- Linux Mint[42]
- LMMS Music Production Software [43]
- Maemo[44]
- MeeGo[45]
- Merb[46]
- MooTools[47]
- One Laptop Per Child (OLPC)[48]
- OpenFOAM
- openSUSE[49]
- Perl[50]
- PHP[51]
- phpBB[52]
- PostgreSQL
- Prototype.js[53]
- Qt[54]
- Reddit[55]
- rsync
- Ruby on Rails[56]
- Samba[57]
- SproutCore[58]
- Sugar[59]
- SWI-Prolog[60]
- VLC[61]
- Wine[62]
- Xiph[63]
- X.org Server[64]
- x264[61]
- YUI[65]
支持git的源码存取服务
以下是部分知名的支持git的源码存取服务:
- BerliOS
- Beanstalk
- Bitbucket
- CodePlex
- GitHub
- gitorious
- GNU Savannah
- Google Code
- JavaForge
- Pikacode
- SourceForge
- 码云 Gitee
- CSDN CODE
- Coding
- gitlab
参见
参考文献
- ^ Junio C Hamano. git v2.23.0-rc2. [2019-08-09].
- ^ http://git.kernel.org/?p=git/git.git;a=tree[永久失效連結]
- ^ git's LGPL license at github.com. github.com. 20 May 2011 [12 October 2014].
- ^ git - Definition and pronunciation. Oxford Learner's Dictionaries.
- ^ [1]
- ^ Linus Torvalds. Re: [ANNOUNCE] git wiki. linux-kernel (邮件列表). 2006-05-05. "Some historical background" on git's predecessors
- ^ Linus Torvalds. Re: Kernel SCM saga. linux-kernel (邮件列表). 2005-04-07.
- ^ Linus Torvalds. Re: Kernel SCM saga. linux-kernel (邮件列表). 2005-04-08 [2008-02-20].
- ^ Linus Torvalds. Re: Errors gittifying GCC and Binutils. git (邮件列表). 2006-03-23.
- ^ Projects that use git for their source code management. [2008-02-20].
- ^ OLPC wiki. Project hosting. [2008-02-20].
- ^ “a person, especially a man, who is stupid or unpleasant”(愚蠢或令人不爽的人,尤指男人)[2]
- ^ After controversy, Torvalds begins work on git. InfoWorld. 2005-04-19 [2008-02-20]. ISSN 0199-6649.
- ^ gitFaq: Why the 'git' name?
- ^ LinusTalk200705Transcript
- ^ Linux-Kernel Archive: Kernel SCM saga Archive.is的存檔,存档日期2012-06-30
- ^ 王立恆. Git十歲了!Git之父Linus Torvalds說古,大談Git開發秘辛. iThome. 2015-04-10 [2016-05-10].
- ^ [3]
- ^ Gerrit Code Review – Project Configuration File Format
- ^ Using GitHub for Windows with non-GitHub repositories
- ^ Projects that use git for their source code management. [2008-02-20].
- ^ Getting Started/Sources/Amarok git Tutorial - KDE TechBase
- ^ Using Repo and git (Android Open Source Project) 互联网档案馆的存檔,存档日期2010-01-09.
- ^ BlueZ » git access
- ^ Btrfs source repositories - btrfs Wiki. Btrfs.wiki.kernel.org. [2009-06-15].
- ^ git.debian.org git
- ^ digg.git - part 1 | Digg About. [2010-04-27]. (原始内容存档于2010-02-11).
- ^ TypicalgitUsage - dragonflywiki[永久失效連結]
- ^ [4]
- ^ Download
- ^ Get FFmpeg. Ffmpeg.org. [2009-06-15].
- ^ git - Fast Version Control System. [2010-04-24].
- ^ Lucas Rocha. Mailing List Announcement. [2009-03-19].
GNOME to migrate to git version control system...
- ^ git - GNOME Live! 互联网档案馆的存檔,存档日期2012-04-10.
- ^ gstreamer Wiki - gitDeveloperGuidelines 互联网档案馆的存檔,存档日期2013-02-06.
- ^ gthumb - GNOME Live!
- ^ GTK+ - Download 互联网档案馆的存檔,存档日期2010-07-03.
- ^ source repositories
- ^ Downloading jQuery - jQuery JavaScript Library
- ^ CCHIT's laika at master - gitHub 互联网档案馆的存檔,存档日期2010-04-20.
- ^ LilyPond, music notation for everyone. [2019-10-16]. (原始内容存档于2018-12-11).
- ^ The Linux Mint Blog » Blog Archive » Mint to use Launchpad for translations, bugs, blueprints and github for code hosting and version control
- ^ LMMS - Linux MultiMedia Studio
- ^ Maemo - gitorious 互联网档案馆的存檔,存档日期2009-10-08.
- ^ MeeGo - gitorious 互联网档案馆的存檔,存档日期2011-01-29.
- ^ Ruby on Rails: Merb 互联网档案馆的存檔,存档日期2010-04-30.
- ^ MooTools - a compact javascript framework
- ^ OLPC wiki. Project hosting. [2008-02-20].
- ^ openSUSE - gitorious. (原始内容存档于2010-05-27) (英语).
- ^ Léon Brocard. Mailing List Announcement. [2008-12-22].
The Perl Foundation has migrated Perl 5 to the git version control system...
- ^ PHP. PHP migrates to git. PHP Group. 2012-03-20 [2012-03-20].
- ^ phpBB. phpBB moves source code versioning from Subversion to git. phpBB Group. 2010-03-07 [2010-03-07].
- ^ Prototype JavaScript framework: Contribute
- ^ Qt now open for community contributions. 2009-05-11 [2009-06-22]. (原始内容存档于2009-05-14).
- ^ Reddit Goes Open Source. [2010-02-26].
- ^ "Rails is moving from SVN to git". [2008-04-03].
- ^ Using git for Samba Development - SambaWiki 互联网档案馆的存檔,存档日期2015-10-15.
- ^ SproutCore Documentation 互联网档案馆的存檔,存档日期2009-07-16.
- ^ Sugar Labs project hosting
- ^ Accessing SWI-Prolog source via <a href="http://git-scm.com/">git</a>
- ^ 61.0 61.1 git - VideoLAN Wiki
- ^ gitWine - The Official Wine Wiki
- ^ Xiph git
- ^ X.Org Wiki - Development/git
- ^ YUI 2 and YUI 3 Source Code Now on gitHub. [2009-01-20].
外部链接
- git官方网站(英文)
- git快速入门(英文)
- git Man Page(英文)
- git用户手册(英文)
- git Community Book(英文)
- 使用git管理源代码
- git# (gitSharp)(英文)
- GNU Interactive Tools
- git从入门到精通P
- 連猴子都能懂的Git入門指南(繁體中文)