fbpx
维基百科

git

git/ɡɪt/[3] 音频,吉特)是一个分散式版本控制软件,最初由林纳斯·托瓦兹創作,於2005年以GPL授權條款釋出。最初目的是为了更好地管理Linux核心开发而设计。应注意的是,这与GNU Interactive Tools[4](一个类似Norton Commander英语Norton Commander界面的文件管理器)不同。

git
執行了建立儲存庫、新增檔案以及遠端同步的命令列工作階段。
原作者林纳斯·托瓦兹
開發者濱野純林纳斯·托瓦兹
首次发布2005年4月7日,​17年前​(2005-04-07
目前版本
  • 2.39.2 (2023年2月14日;穩定版本)[1]
源代码库
  • git.kernel.org/pub/scm/git/git.git
编程语言CPerlshTcl
操作系统POSIX, Windows
类型版本控制
许可协议GNU通用公共许可证 第二版,GNU宽通用公共许可证 2.1版[2]
网站git-scm.com 

git最初的开发动力来自于BitKeeperMonotone[5][6]。git最初只是作为一个可以被其他前端(比如Cogito或Stgit[7])包装的后端而开发的,但后来git内核已经成熟到可以独立地用作版本控制[8]。很多被廣泛使用的軟體專案都使用 git 进行版本控制[9],其中包括 Linux 核心、X.Org服务器OLPC内核等项目的开发流程[10]

歷史

自2002年開始,林纳斯·托瓦兹(Linus Torvalds)決定使用BitKeeper作為Linux內核主要的版本控制系統用以维护程式碼。因為BitKeeper為专有软件,這個決定在社群中長期遭受質疑。在Linux社群中,特別是理查德·斯托曼自由軟體基金會的成員,主張應該使用開放原始碼的軟體來作為Linux核心的版本控制系統。林纳斯·托瓦兹曾考慮過採用現成軟體作为版本控制系統(例如Monotone),但這些軟體都存在一些問題,特別是效能不佳。現成的方案,如CVS的架構,受到林纳斯·托瓦兹的批評[11]

2005年,安德魯·垂鳩(Andrew Tridgell)寫了一個簡單程式,可以連接BitKeeper的儲存庫,BitKeeper著作權擁有者拉里·麥沃伊認為安德魯·垂鳩对BitKeeper內部使用的协议进行逆向工程,決定收回无偿使用BitKeeper的授權。Linux內核開發團隊與BitMover公司進行磋商,但無法解決他們之間的歧見。林纳斯·托瓦兹決定自行開發版本控制系統替代BitKeeper,以十天的時間編寫出git第一個版本[12][13]

命名

林纳斯·托瓦兹諷刺地嘲笑git這個名字(在英式英語俚語中表示「不愉快的人」)[14][15][16]

源代碼的自述文件進一步闡述了:[17]

The name "git" was given by Linus Torvalds when he wrote the very first version. He described the tool as "the stupid content tracker" and the name as (depending on your way):

  • random three-letter combination that is pronounceable, and not actually used by any common UNIX command. The fact that it is a mispronunciation of "get" may or may not be relevant.
  • "global information tracker": you're in a good mood, and it actually works for you. Angels sing, and a light suddenly fills the room.
  • stupid. contemptible and despicable. simple. Take your pick from the dictionary of slang.

林纳斯·托瓦兹在編寫第一個版本時就使用了“git”這個名稱。 他將工具描述為“愚蠢的內容跟踪器”,並將其描述為(取決於您的方式):

  • 可以發音唸出的隨機三個字母組合,而且並未被實際用在任何 UNIX 指令上。它是“get”的錯誤發音,這點可能相關也可能無關。
  • “全球信息跟踪器”:您的心情不錯,對你而言它也確實說得通。天使唱歌,房間突然充滿光明。
  • 愚蠢的。鄙視和卑鄙的。簡單。從俚語字典中選擇。

版本

版本 最初发布日期 最新修订版本 最新修订版本发布日期
舊版本,不再支援: 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.5 2018-04-19
舊版本,仍被支援: 2.18 2018-06-21 2.18.4 2020-04-19
舊版本,仍被支援: 2.19 2018-09-10 2.19.5 2020-04-19
舊版本,仍被支援: 2.20 2018-12-09 2.20.4 2020-04-19
舊版本,仍被支援: 2.21 2019-02-24 2.21.3 2020-04-19
舊版本,仍被支援: 2.22 2019-06-07 2.22.4 2020-04-19
舊版本,仍被支援: 2.23 2019-08-16 2.23.3 2020-04-19
舊版本,仍被支援: 2.24 2019-11-04 2.24.3 2020-04-19
舊版本,仍被支援: 2.25 2020-01-13 2.25.4 2020-04-19
舊版本,仍被支援: 2.26 2020-03-23 2.26.2 2020-04-19
舊版本,仍被支援: 2.27 2020-06-01 2.27.0 2020-06-01
舊版本,仍被支援: 2.28 2020-07-27 2.28.0 2020-07-27
舊版本,仍被支援: 2.29 2020-10-19 2.29.2 2020-10-29
舊版本,仍被支援: 2.30 2020-12-27 2.30.0 2020-12-27
舊版本,仍被支援: 2.31 2021-03-15 2.31.1 2021-04-02
舊版本,仍被支援: 2.32 2021-06-06
當前版本: 2.33 2021-08-16
格式:
舊版本
舊版本,仍被支援
当前版本
最新的预览版
未来版本

主要功能

git是用于Linux内核开发的版本控制工具。与CVS、Subversion一類的集中式版本控制工具不同,它采用了分布式版本库的作法,不需要服务器端软件,就可以運作版本控制,使得源代码的发布和交流极其方便。git的速度很快,这对于诸如Linux内核这样的大项目来说自然很重要。git最为出色的是它的合并追踪(merge tracing)能力。

实际上Linux内核开发团队决定开始开发和使用git来作为内核开发的版本控制系统的时候,世界上开源社群的反对声音不少,最大的理由是git太艰涩难懂,从git的内部工作机制来说,的确是这样。但是随着开发的深入,git的正常使用都由一些友善的命令来执行,使git变得非常好用。现在,越来越多的著名项目采用git来管理项目开发,例如:wineU-boot英语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中的数据流与存储级别

Git有两种数据结构:可变的索引(index、stage或cache)用于缓冲工作目录信息与下一次提交的版本信息;不变的、仅追加的对象数据库。

对象数据库包含4类对象:

  • blob (二进制大对象)是使用zlib压缩算法对一个文件的内容压缩后的结果。Blobs没有保存文件名、时间戳或其他元数据。Git将其存储在位于隐藏的.git/objects文件夹中。文件的名称为使用SHA-1哈希函数对原文件内容生成的哈希值。这些对象文件称为Blob,每次将新文件添加到存储库时会创建Blob对象。
  • tree对象对应于文件目录。包含文件名列表以及文件的类型比特(包含许可权[需要解释此處許可權具體指涉的是什麼概念])、到blob(对应于文件)或tree对象的引用。tree对象是源树(source tree)的快照。用默克尔树实现。
  • commit对象链接tree对象在一起而成为history,包含顶层源目录的tree对象名字、一个时间戳、log信息、0个或多个父commit对象的名字。用于保存特定版本的树型文件夹结构以及提交作者,电子邮件地址,日期和描述性提交消息。
  • tag对象是一个容器,包含了到另一个对象的引用,也可以增加关于另外对象的元数据。通常它保存需要追溯的特定版本数据的一个commit对象的数字签名。

以上4类的对象用其内容的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

某些操作(例如,将提交推送到远程存储库,存储太多对象或手动运行Git的垃圾收集命令)可能会导致Git将对象重新打包为打包文件,在打包过程中,采用反向差异并进行压缩以消除多余的内容并减小尺寸。该过程将生成包含对象内容的.pack文件,每个文件都有一个对应的.idx索引文件,其中包含对打包对象及其在打包文件中位置的引用。当将分支推送到远程存储库或从远程存储库拉出分支时,这些打包文件将通过网络传输。提取或获取分支时,将打包文件解压缩以在对象存储库中创建松散对象。

移植性

Windows平台上有msysgit與TortoiseGit可資利用。TortoiseGit還提供有GUI

Git也提供Windows版本下载。

Visual Studio 自 2013 版本开始内置 Git 功能。

GIT GUI客户端

使用

使用git的專案

有不少的專案目前都使用git:[24]

  • NOJ

支持git的源码存取服务

以下是部分知名的支持git的源码存取服务:

参见

参考文献

  1. ^ [Announce] Git 2.39.2 and friends. 2023年2月14日 [2023年2月14日]. 
  2. ^ git's LGPL license at github.com. github.com. 2011-05-20 [2014-10-12]. (原始内容于2016-04-11). 
  3. ^ git - Definition and pronunciation. Oxford Learner's Dictionaries. [2014-04-04]. (原始内容于2019-06-13). 
  4. ^ 存档副本. [2013-01-11]. (原始内容于2021-01-30). 
  5. ^ Linus Torvalds. . linux-kernel (邮件列表). 2006-05-05 [2008-03-27]. (原始内容存档于2016-04-11).  "Some historical background" on git's predecessors
  6. ^ Linus Torvalds. Re: Kernel SCM saga. linux-kernel (邮件列表). 2005-04-07 [2008-03-27]. (原始内容于2020-10-01). 
  7. ^ Linus Torvalds. . linux-kernel (邮件列表). 2005-04-08 [2008-02-20]. (原始内容存档于2016-04-11). 
  8. ^ Linus Torvalds. . git (邮件列表). 2006-03-23 [2008-03-27]. (原始内容存档于2016-04-11). 
  9. ^ . [2008-02-20]. (原始内容存档于2009-04-30). 
  10. ^ 10.0 10.1 OLPC wiki. Project hosting. [2008-02-20]. (原始内容于2009-02-02). 
  11. ^ LinusTalk200705Transcript. [2016-05-09]. (原始内容于2011-07-25). 
  12. ^ Linux-Kernel Archive: Kernel SCM saga. [2014-09-13]. (原始内容存档于2012-06-30). 
  13. ^ 王立恆. Git十歲了!Git之父Linus Torvalds說古,大談Git開發秘辛. iThome. 2015-04-10 [2016-05-10]. (原始内容于2019-06-16). 
  14. ^ GitFaq: Why the 'Git' name?. Git.or.cz. [2012-07-14]. (原始内容于2012-07-23). 
  15. ^ After controversy, Torvalds begins work on 'git'. PC World. 2012-07-14 [2020-02-18]. (原始内容于2011-02-01). 
  16. ^ git(1) Manual Page. [2012-07-21]. (原始内容于2012-06-21). 
  17. ^ Initial revision of 'git', the information manager from hell · git/git@e83c516. GitHub. [2016-01-21]. (原始内容于2017-10-08). 
  18. ^ 存档副本. [2009-04-02]. (原始内容于2008-10-07). 
  19. ^ Gerrit Code Review – Project Configuration File Format. [2017-05-22]. (原始内容于2020-12-03). 
  20. ^ GitHub Desktop. [2017-05-24]. (原始内容于2021-02-04). 
  21. ^ Using GitHub for Windows with non-GitHub repositories. [2017-05-24]. (原始内容于2020-10-22). 
  22. ^ Git for Windows. [2017-05-24]. (原始内容于2021-01-18). 
  23. ^ GitEye. [2017-05-24]. (原始内容于2014-11-19). 
  24. ^ Projects that use git for their source code management. [2008-02-20]. (原始内容于2020-10-21). 
  25. ^ Getting Started/Sources/Amarok git Tutorial - KDE TechBase. [2010-04-27]. (原始内容于2020-08-09). 
  26. ^ Using Repo and git (Android Open Source Project). [2010-04-27]. (原始内容于2010-01-09). 
  27. ^ BlueZ » git access. [2010-04-27]. (原始内容于2020-10-24). 
  28. ^ Btrfs source repositories - btrfs Wiki. Btrfs.wiki.kernel.org. [2009-06-15]. (原始内容于2020-06-02). 
  29. ^ git.debian.org git. [2021-02-06]. (原始内容于2021-01-15). 
  30. ^ . [2010-04-27]. (原始内容存档于2010-02-11). 
  31. ^ TypicalgitUsage - dragonflywiki[永久失效連結]
  32. ^ 存档副本. [2011-03-07]. (原始内容存档于2019-10-16). 
  33. ^ Download. [2010-04-27]. (原始内容于2020-10-28). 
  34. ^ Get FFmpeg. Ffmpeg.org. [2009-06-15]. (原始内容存档于2013-09-15). 
  35. ^ . [2010-04-24]. (原始内容存档于2009-01-01). 
  36. ^ Lucas Rocha. Mailing List Announcement. [2009-03-19]. (原始内容于2020-10-27). GNOME to migrate to git version control system... 
  37. ^ git - GNOME Live!. [2015-10-10]. (原始内容于2012-04-10). 
  38. ^ . [2015-10-10]. (原始内容存档于2013-02-06). 
  39. ^ gthumb - GNOME Live!. [2010-04-27]. (原始内容于2013-05-24). 
  40. ^ . [2010-04-27]. (原始内容存档于2010-07-03). 
  41. ^ source repositories. [2010-04-27]. (原始内容于2020-10-24). 
  42. ^ Downloading jQuery - jQuery JavaScript Library. [2010-04-27]. (原始内容于2012-09-19). 
  43. ^ CCHIT's laika at master - gitHub. [2010-04-27]. (原始内容于2010-04-20). 
  44. ^ . [2019-10-16]. (原始内容存档于2018-12-11). 
  45. ^ The Linux Mint Blog » Blog Archive » Mint to use Launchpad for translations, bugs, blueprints and github for code hosting and version control. [2010-04-27]. (原始内容于2010-02-08). 
  46. ^ LMMS - Linux MultiMedia Studio. [2021-02-06]. (原始内容于2014-04-18). 
  47. ^ . [2010-04-27]. (原始内容存档于2009-10-08). 
  48. ^ . [2010-04-27]. (原始内容存档于2011-01-29). 
  49. ^ . [2010-04-27]. (原始内容存档于2010-04-30). 
  50. ^ MooTools - a compact javascript framework. [2010-04-27]. (原始内容于2021-02-05). 
  51. ^ . [2010-04-27]. (原始内容存档于2010-05-27) (英语). 
  52. ^ Léon Brocard. Mailing List Announcement. [2008-12-22]. (原始内容于2011-08-10). The Perl Foundation has migrated Perl 5 to the git version control system... 
  53. ^ PHP. PHP migrates to git. PHP Group. 2012-03-20 [2012-03-20]. (原始内容于2021-02-04). 
  54. ^ phpBB. phpBB moves source code versioning from Subversion to git. phpBB Group. 2010-03-07 [2010-03-07]. (原始内容于2010-09-24). 
  55. ^ Prototype JavaScript framework: Contribute. [2010-04-27]. (原始内容于2020-10-24). 
  56. ^ . 2009-05-11 [2009-06-22]. (原始内容存档于2009-05-14). 
  57. ^ . [2010-02-26]. (原始内容存档于2011-12-22). 
  58. ^ "Rails is moving from SVN to git". [2008-04-03]. (原始内容于2009-02-24). 
  59. ^ Using git for Samba Development - SambaWiki. [2015-10-10]. (原始内容于2015-10-15). 
  60. ^ . [2010-04-27]. (原始内容存档于2009-07-16). 
  61. ^ Sugar Labs project hosting. [2010-04-27]. (原始内容于2020-11-27). 
  62. ^ Accessing SWI-Prolog source (页面存档备份,存于互联网档案馆) via git (页面存档备份,存于互联网档案馆
  63. ^ 63.0 63.1 git - VideoLAN Wiki. [2015-10-10]. (原始内容于2021-01-28). 
  64. ^ gitWine - The Official Wine Wiki. [2015-10-10]. (原始内容于2021-02-03). 
  65. ^ . [2010-04-27]. (原始内容存档于2010-05-07). 
  66. ^ X.Org Wiki - Development/git. [2009-04-02]. (原始内容于2020-09-22). 
  67. ^ . [2009-01-20]. (原始内容存档于2009-02-12). 

外部链接

提示, 此条目的主题不是github或gitlab, 音频, 帮助, 信息, 吉特, 是一个分散式版本控制软件, 最初由林纳斯, 托瓦兹創作, 於2005年以gpl授權條款釋出, 最初目的是为了更好地管理linux核心开发而设计, 应注意的是, 这与gnu, interactive, tools, 一个类似norton, commander, 英语, norton, commander, 界面的文件管理器, 不同, 執行了建立儲存庫, 新增檔案以及遠端同步的命令列工作階段, 原作者林纳斯, 托瓦兹開發者濱野純, 林. 提示 此条目的主题不是GitHub或GitLab git ɡ ɪ t 3 音频 帮助 信息 吉特 是一个分散式版本控制软件 最初由林纳斯 托瓦兹創作 於2005年以GPL授權條款釋出 最初目的是为了更好地管理Linux核心开发而设计 应注意的是 这与GNU Interactive Tools 4 一个类似Norton Commander 英语 Norton Commander 界面的文件管理器 不同 git執行了建立儲存庫 新增檔案以及遠端同步的命令列工作階段 原作者林纳斯 托瓦兹開發者濱野純 林纳斯 托瓦兹首次发布2005年4月7日 17年前 2005 04 07 目前版本2 39 2 2023年2月14日 穩定版本 1 源代码库git wbr kernel wbr org wbr pub wbr scm wbr git wbr git wbr git编程语言C Perl sh Tcl操作系统POSIX Windows类型版本控制许可协议GNU通用公共许可证 第二版 GNU宽通用公共许可证 2 1版 2 网站git scm wbr com git最初的开发动力来自于BitKeeper和Monotone 5 6 git最初只是作为一个可以被其他前端 比如Cogito或Stgit 7 包装的后端而开发的 但后来git内核已经成熟到可以独立地用作版本控制 8 很多被廣泛使用的軟體專案都使用 git 进行版本控制 9 其中包括 Linux 核心 X Org服务器和OLPC内核等项目的开发流程 10 目录 1 歷史 1 1 命名 1 2 版本 2 主要功能 3 实现原理 4 库目录 5 数据結構 6 移植性 7 GIT GUI客户端 8 使用 8 1 使用git的專案 8 2 支持git的源码存取服务 9 参见 10 参考文献 11 外部链接歷史 编辑自2002年開始 林纳斯 托瓦兹 Linus Torvalds 決定使用BitKeeper作為Linux內核主要的版本控制系統用以维护程式碼 因為BitKeeper為专有软件 這個決定在社群中長期遭受質疑 在Linux社群中 特別是理查德 斯托曼與自由軟體基金會的成員 主張應該使用開放原始碼的軟體來作為Linux核心的版本控制系統 林纳斯 托瓦兹曾考慮過採用現成軟體作为版本控制系統 例如Monotone 但這些軟體都存在一些問題 特別是效能不佳 現成的方案 如CVS的架構 受到林纳斯 托瓦兹的批評 11 2005年 安德魯 垂鳩 Andrew Tridgell 寫了一個簡單程式 可以連接BitKeeper的儲存庫 BitKeeper著作權擁有者拉里 麥沃伊認為安德魯 垂鳩对BitKeeper內部使用的协议进行逆向工程 決定收回无偿使用BitKeeper的授權 Linux內核開發團隊與BitMover公司進行磋商 但無法解決他們之間的歧見 林纳斯 托瓦兹決定自行開發版本控制系統替代BitKeeper 以十天的時間編寫出git第一個版本 12 13 命名 编辑 林纳斯 托瓦兹諷刺地嘲笑git這個名字 在英式英語俚語中表示 不愉快的人 14 15 16 源代碼的自述文件進一步闡述了 17 The name git was given by Linus Torvalds when he wrote the very first version He described the tool as the stupid content tracker and the name as depending on your way random three letter combination that is pronounceable and not actually used by any common UNIX command The fact that it is a mispronunciation of get may or may not be relevant global information tracker you re in a good mood and it actually works for you Angels sing and a light suddenly fills the room stupid contemptible and despicable simple Take your pick from the dictionary of slang 林纳斯 托瓦兹在編寫第一個版本時就使用了 git 這個名稱 他將工具描述為 愚蠢的內容跟踪器 並將其描述為 取決於您的方式 可以發音唸出的隨機三個字母組合 而且並未被實際用在任何 UNIX 指令上 它是 get 的錯誤發音 這點可能相關也可能無關 全球信息跟踪器 您的心情不錯 對你而言它也確實說得通 天使唱歌 房間突然充滿光明 愚蠢的 鄙視和卑鄙的 簡單 從俚語字典中選擇 版本 编辑 版本 最初发布日期 最新修订版本 最新修订版本发布日期舊版本 不再支援 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 5 2018 04 19舊版本 仍被支援 2 18 2018 06 21 2 18 4 2020 04 19舊版本 仍被支援 2 19 2018 09 10 2 19 5 2020 04 19舊版本 仍被支援 2 20 2018 12 09 2 20 4 2020 04 19舊版本 仍被支援 2 21 2019 02 24 2 21 3 2020 04 19舊版本 仍被支援 2 22 2019 06 07 2 22 4 2020 04 19舊版本 仍被支援 2 23 2019 08 16 2 23 3 2020 04 19舊版本 仍被支援 2 24 2019 11 04 2 24 3 2020 04 19舊版本 仍被支援 2 25 2020 01 13 2 25 4 2020 04 19舊版本 仍被支援 2 26 2020 03 23 2 26 2 2020 04 19舊版本 仍被支援 2 27 2020 06 01 2 27 0 2020 06 01舊版本 仍被支援 2 28 2020 07 27 2 28 0 2020 07 27舊版本 仍被支援 2 29 2020 10 19 2 29 2 2020 10 29舊版本 仍被支援 2 30 2020 12 27 2 30 0 2020 12 27舊版本 仍被支援 2 31 2021 03 15 2 31 1 2021 04 02舊版本 仍被支援 2 32 2021 06 06當前版本 2 33 2021 08 16格式 舊版本舊版本 仍被支援当前版本最新的预览版未来版本主要功能 编辑git是用于Linux内核开发的版本控制工具 与CVS Subversion一類的集中式版本控制工具不同 它采用了分布式版本库的作法 不需要服务器端软件 就可以運作版本控制 使得源代码的发布和交流极其方便 git的速度很快 这对于诸如Linux内核这样的大项目来说自然很重要 git最为出色的是它的合并追踪 merge tracing 能力 实际上Linux内核开发团队决定开始开发和使用git来作为内核开发的版本控制系统的时候 世界上开源社群的反对声音不少 最大的理由是git太艰涩难懂 从git的内部工作机制来说 的确是这样 但是随着开发的深入 git的正常使用都由一些友善的命令来执行 使git变得非常好用 现在 越来越多的著名项目采用git来管理项目开发 例如 wine U boot 英语 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中的数据流与存储级别 Git有两种数据结构 可变的索引 index stage或cache 用于缓冲工作目录信息与下一次提交的版本信息 不变的 仅追加的对象数据库 对象数据库包含4类对象 blob 二进制大对象 是使用zlib压缩算法对一个文件的内容压缩后的结果 Blobs没有保存文件名 时间戳或其他元数据 Git将其存储在位于隐藏的 git objects文件夹中 文件的名称为使用SHA 1哈希函数对原文件内容生成的哈希值 这些对象文件称为Blob 每次将新文件添加到存储库时会创建Blob对象 tree对象对应于文件目录 包含文件名列表以及文件的类型比特 包含许可权 需要解释此處許可權具體指涉的是什麼概念 到blob 对应于文件 或tree对象的引用 tree对象是源树 source tree 的快照 用默克尔树实现 commit对象链接tree对象在一起而成为history 包含顶层源目录的tree对象名字 一个时间戳 log信息 0个或多个父commit对象的名字 用于保存特定版本的树型文件夹结构以及提交作者 电子邮件地址 日期和描述性提交消息 tag对象是一个容器 包含了到另一个对象的引用 也可以增加关于另外对象的元数据 通常它保存需要追溯的特定版本数据的一个commit对象的数字签名 以上4类的对象用其内容的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 某些操作 例如 将提交推送到远程存储库 存储太多对象或手动运行Git的垃圾收集命令 可能会导致Git将对象重新打包为打包文件 在打包过程中 采用反向差异并进行压缩以消除多余的内容并减小尺寸 该过程将生成包含对象内容的 pack文件 每个文件都有一个对应的 idx索引文件 其中包含对打包对象及其在打包文件中位置的引用 当将分支推送到远程存储库或从远程存储库拉出分支时 这些打包文件将通过网络传输 提取或获取分支时 将打包文件解压缩以在对象存储库中创建松散对象 移植性 编辑在Windows平台上有msysgit與TortoiseGit可資利用 TortoiseGit還提供有GUI Git也提供Windows版本下载 Visual Studio 自 2013 版本开始内置 Git 功能 GIT GUI客户端 编辑GitHub Desktop 可用于第三方Git仓库网站 20 21 Git for Windows 22 TortoiseGit SourceTree GitEye 23 使用 编辑使用git的專案 编辑 有不少的專案目前都使用git 24 Amarok 25 Android 26 Arch Linux Aquamacs Emacs 英语 Aquamacs Emacs BlueZ 英语 BlueZ 27 Btrfs 28 Clojure CakePHP 英语 CakePHP Debian 29 Digg 30 DragonFly BSD 31 Drupal 32 Elinks 英语 Elinks 33 Fedora FFmpeg 34 Freenet git 35 GIMP GNOME 36 37 GPM 英语 GPM GStreamer 38 gThumb 39 GTK 40 Hurd 41 jQuery 42 Laika EHR testing framework 英语 Laika EHR testing framework 43 LilyPond music typesetting 44 Linux kernel Linux Mint 45 LMMS Music Production Software 46 Maemo 47 MeeGo 48 Merb 英语 Merb 49 MooTools 英语 MooTools 50 One Laptop Per Child OLPC 10 OpenFOAM openSUSE 51 Perl 52 PHP 53 phpBB 54 PostgreSQL Prototype JavaScript框架 55 Qt 56 Reddit 57 rsync Ruby on Rails 58 Samba 59 SproutCore 英语 SproutCore 60 Sugar 用戶界面 61 SWI Prolog 英语 SWI Prolog 62 VLC 63 Wine 64 Xiph 65 X org Server 66 x264 63 YUI 67 NOJ支持git的源码存取服务 编辑 以下是部分知名的支持git的源码存取服务 BerliOS 英语 BerliOS Beanstalk 英语 Beanstalk Bitbucket CodePlex 已於2017年12月15日起關閉 GitHub gitorious 英语 gitorious GNU Savannah Google Code JavaForge Pikacode SourceForge 码云 Gitee 页面存档备份 存于互联网档案馆 CSDN CODE Coding 页面存档备份 存于互联网档案馆 GitLab参见 编辑 计算机程序设计主题 自由软件主题 分布式版本控制 Gitee 代码库 仓库 版本控制 Github参考文献 编辑 Announce Git 2 39 2 and friends 2023年2月14日 2023年2月14日 git s LGPL license at github com github com 2011 05 20 2014 10 12 原始内容存档于2016 04 11 git Definition and pronunciation Oxford Learner s Dictionaries 2014 04 04 原始内容存档于2019 06 13 存档副本 2013 01 11 原始内容存档于2021 01 30 Linus Torvalds Re ANNOUNCE git wiki linux kernel 邮件列表 2006 05 05 2008 03 27 原始内容存档于2016 04 11 Some historical background on git s predecessors Linus Torvalds Re Kernel SCM saga linux kernel 邮件列表 2005 04 07 2008 03 27 原始内容存档于2020 10 01 Linus Torvalds Re Kernel SCM saga linux kernel 邮件列表 2005 04 08 2008 02 20 原始内容存档于2016 04 11 Linus Torvalds Re Errors gittifying GCC and Binutils git 邮件列表 2006 03 23 2008 03 27 原始内容存档于2016 04 11 Projects that use git for their source code management 2008 02 20 原始内容存档于2009 04 30 10 0 10 1 OLPC wiki Project hosting 2008 02 20 原始内容存档于2009 02 02 LinusTalk200705Transcript 2016 05 09 原始内容存档于2011 07 25 Linux Kernel Archive Kernel SCM saga 2014 09 13 原始内容存档于2012 06 30 王立恆 Git十歲了 Git之父Linus Torvalds說古 大談Git開發秘辛 iThome 2015 04 10 2016 05 10 原始内容存档于2019 06 16 GitFaq Why the Git name Git or cz 2012 07 14 原始内容存档于2012 07 23 After controversy Torvalds begins work on git PC World 2012 07 14 2020 02 18 原始内容存档于2011 02 01 git 1 Manual Page 2012 07 21 原始内容存档于2012 06 21 Initial revision of git the information manager from hell git git e83c516 GitHub 2016 01 21 原始内容存档于2017 10 08 存档副本 2009 04 02 原始内容存档于2008 10 07 Gerrit Code Review Project Configuration File Format 2017 05 22 原始内容存档于2020 12 03 GitHub Desktop 2017 05 24 原始内容存档于2021 02 04 Using GitHub for Windows with non GitHub repositories 2017 05 24 原始内容存档于2020 10 22 Git for Windows 2017 05 24 原始内容存档于2021 01 18 GitEye 2017 05 24 原始内容存档于2014 11 19 Projects that use git for their source code management 2008 02 20 原始内容存档于2020 10 21 Getting Started Sources Amarok git Tutorial KDE TechBase 2010 04 27 原始内容存档于2020 08 09 Using Repo and git Android Open Source Project 2010 04 27 原始内容存档于2010 01 09 BlueZ git access 2010 04 27 原始内容存档于2020 10 24 Btrfs source repositories btrfs Wiki Btrfs wiki kernel org 2009 06 15 原始内容存档于2020 06 02 git debian org git 2021 02 06 原始内容存档于2021 01 15 digg git part 1 Digg About 2010 04 27 原始内容存档于2010 02 11 TypicalgitUsage dragonflywiki 永久失效連結 存档副本 2011 03 07 原始内容存档于2019 10 16 Download 2010 04 27 原始内容存档于2020 10 28 Get FFmpeg Ffmpeg org 2009 06 15 原始内容存档于2013 09 15 git Fast Version Control System 2010 04 24 原始内容存档于2009 01 01 Lucas Rocha Mailing List Announcement 2009 03 19 原始内容存档于2020 10 27 GNOME to migrate to git version control system git GNOME Live 2015 10 10 原始内容存档于2012 04 10 gstreamer Wiki gitDeveloperGuidelines 2015 10 10 原始内容存档于2013 02 06 gthumb GNOME Live 2010 04 27 原始内容存档于2013 05 24 GTK Download 2010 04 27 原始内容存档于2010 07 03 source repositories 2010 04 27 原始内容存档于2020 10 24 Downloading jQuery jQuery JavaScript Library 2010 04 27 原始内容存档于2012 09 19 CCHIT s laika at master gitHub 2010 04 27 原始内容存档于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 2010 04 27 原始内容存档于2010 02 08 LMMS Linux MultiMedia Studio 2021 02 06 原始内容存档于2014 04 18 Maemo gitorious 2010 04 27 原始内容存档于2009 10 08 MeeGo gitorious 2010 04 27 原始内容存档于2011 01 29 Ruby on Rails Merb 2010 04 27 原始内容存档于2010 04 30 MooTools a compact javascript framework 2010 04 27 原始内容存档于2021 02 05 openSUSE gitorious 2010 04 27 原始内容存档于2010 05 27 英语 Leon Brocard Mailing List Announcement 2008 12 22 原始内容存档于2011 08 10 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 原始内容存档于2021 02 04 phpBB phpBB moves source code versioning from Subversion to git phpBB Group 2010 03 07 2010 03 07 原始内容存档于2010 09 24 Prototype JavaScript framework Contribute 2010 04 27 原始内容存档于2020 10 24 Qt now open for community contributions 2009 05 11 2009 06 22 原始内容存档于2009 05 14 Reddit Goes Open Source 2010 02 26 原始内容存档于2011 12 22 Rails is moving from SVN to git 2008 04 03 原始内容存档于2009 02 24 Using git for Samba Development SambaWiki 2015 10 10 原始内容存档于2015 10 15 SproutCore Documentation 2010 04 27 原始内容存档于2009 07 16 Sugar Labs project hosting 2010 04 27 原始内容存档于2020 11 27 Accessing SWI Prolog source 页面存档备份 存于互联网档案馆 via git 页面存档备份 存于互联网档案馆 63 0 63 1 git VideoLAN Wiki 2015 10 10 原始内容存档于2021 01 28 gitWine The Official Wine Wiki 2015 10 10 原始内容存档于2021 02 03 Xiph git 2010 04 27 原始内容存档于2010 05 07 X Org Wiki Development git 2009 04 02 原始内容存档于2020 09 22 YUI 2 and YUI 3 Source Code Now on gitHub 2009 01 20 原始内容存档于2009 02 12 外部链接 编辑git官方网站 英文 git快速入门 英文 git Man Page 页面存档备份 存于互联网档案馆 英文 git用户手册 页面存档备份 存于互联网档案馆 英文 git Community Book 英文 使用git管理源代码 页面存档备份 存于互联网档案馆 git gitSharp 页面存档备份 存于互联网档案馆 英文 GNU Interactive Tools 页面存档备份 存于互联网档案馆 git从入门到精通P 連猴子都能懂的Git入門指南 页面存档备份 存于互联网档案馆 繁體中文 取自 https zh wikipedia org w index php title Git amp oldid 75797509, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。