git

✍ dations ◷ 2025-10-22 11:54:19 #版本控制系统,自由版本控制软件,分布式版本控制系统,Perl软件,用C编程的自由软件,2005年软件,Git

git(/ɡɪt/,这个名字(在英式英语俚语中表示)

源代码的自述文件进一步阐述了:

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):

林纳斯·托瓦兹在编写第一个版本时就使用了“git”这个名称。 他将工具描述为“愚蠢的内容跟踪器”,并将其描述为(取决于您的方式):

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

实际上内核开发团队决定开始开发和使用git来作为内核开发的版本控制系统的时候,世界上开源社区的反对声音不少,最大的理由是git太艰涩难懂,从git的内部工作机制来说,的确是这样。但是随着开发的深入,git的正常使用都由一些友善的命令来执行,使git变得非常好用。现在,越来越多的著名项目采用git来管理项目开发,例如:wine、U-boot(英语:U-boot)等。

作为开源自由原教旨主义项目,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。

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

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

以上4类的对象用其内容的SHA-1 hash值标识:hash值的前两个字符作为存放的目录名字,其余hash字符作为这个对象的文件名。

Git数据库中不变引用的对象将会被垃圾回收清除。Git命令可以创建、移动、删除引用。"git show-ref"列出所有引用。某些引用类型:

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

在Windows平台上有msysgit与TortoiseGit可资利用。TortoiseGit还提供有GUI。

现在git也提供windows版本下载。

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

有不少的项目目前都使用git:

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

相关

  • X射线断层成像计算机断层成像(Computed Tomography,简称CT),是一种影像诊断学的检查。这一技术曾被称为计算机轴向断层成像(Computed Axial Tomography)。X射线计算机断层成像(X-Ray Computed To
  • 弹簧秤弹簧秤,是利用弹簧的变形来测量作用力大小或物体重量的仪器。作用力的大小可以从弹簧秤的指针和外壳上的标度直接读出。弹簧秤可根据其运作原理细分为拉力弹簧秤和压力弹簧秤
  • 国家电影委员会加拿大国家电影局(英语:National Film Board of Canada,简称NFB;法语:Office national du film du Canada,简称ONF)是加拿大的国营电影制作机构,创建于1939年,现隶属于加拿大文化遗产
  • 阿根廷狐阿根廷狐(学名 Pseudalopex griseus),别名巴塔哥尼亚狐,犬科动物伪狐属的一种。生活在南美洲南部,阿根廷(大概有六万只阿根廷狐)、智利,也可能生活在秘鲁和大西洋岛屿,包括福克兰群岛
  • 水彩画水彩画是用水调和透明颜料作画的一种绘画方法,简称水彩。由于色彩透明,一层颜色覆盖另一层可以产生特殊的效果,但调和颜色过多或覆盖过多会使色彩肮脏。水干燥得快,所以水彩画不
  • 陆兆禧陆兆禧(1969年-),出生于广东省广州市,中国企业家。现任阿里巴巴集团董事局副主席 。1988年从广东实验中学毕业,大学就读广州大学酒店管理,毕业后在广州假日酒店工作六年。1997年,陆
  • 罗伯特·福格尔知识产权 市场化 自由放任 小政府主义 负所得税 公开市场操作 私有财产 私有化 经济主题 罗伯特·威廉·福格尔(英语:Robert William Fogel,1926年7月1日-2013年6月11日),美国著名
  • 图尔曼菊石见内文图尔曼菊石(学名:)是生存在白垩纪初凡蓝今期海洋中的一属菊石。其化石被发现于欧洲、摩洛哥和美洲等地。图尔曼菊石和新康菊石的壳形及肋条都十分相似,但两者最大的不同处
  • 佩卡·哈洛宁佩卡·哈洛宁(芬兰语:Pekka Halonen;1865年9月23日-1933年12月1日),芬兰艺术画家和教授,民族浪漫主义和卡累利阿主义(芬兰语:Karelianismi)的代表性人物。他以描绘冬天景象和雪林的风
  • 鞍斑蝴蝶鱼鞍斑蝴蝶鱼,又称鞭蝴蝶鱼,俗名月光蝶,为辐鳍鱼纲鲈形目蝴蝶鱼科的其中一种。本鱼分布于印度太平洋区,包括东非、亚丁湾、马尔代夫、科摩罗、毛里求斯、塞舌尔群岛、斯里兰卡、马