本页使用了标题或全文手工转换

git

维基百科,自由的百科全书
跳转至: 导航搜索
git
Git-logo.svg
Gitweb.png
gitweb,git的一个Web界面。
原作者 林纳斯·托瓦兹
開發者 濱野純林纳斯·托瓦兹
穩定版本 2.11.0[1](2016年11月29日,​10天前​(2016-11-29
預覽版本 2.11.0-rc3[2](2016年11月23日,​16天前​(2016-11-23
编程语言 CPerlsh[3]
操作系统 POSIX, Windows
类型 版本控制
许可协议 GNU通用公共许可证 第二版,GNU宽通用公共许可证 2.1版[4]
網站 http://git-scm.com/

git/ɡɪt/[5]关于这个音频文件 音频)是一个分散式版本控制软件,最初由林纳斯·托瓦兹(Linus Torvalds)創作,於2005年以GPL釋出。最初目的是为更好地管理Linux内核开发而设计。应注意的是,这与GNU Interactive Tools[6](一个类似Norton Commander界面的文件管理器)有所不同。

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

命名来源[编辑]

林纳斯·托瓦兹自嘲地取了這個名字“git”,該詞源自英國俚語,意思大約是「混帳」。[13][14]

I'm an egotistical bastard, and I name all my projects after myself. First Linux, now git.

git的官方wiki也給出了多種關於這個名字的解释。[15]

歷史[编辑]

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

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

版本[编辑]

版本 原始發行日期 最新版本 發行日期
舊版本,不再支持: 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.11 2016-03-17
舊版本,仍被支持: 2.5 2015-07-27 2.5.5 2016-03-17
舊版本,仍被支持: 2.6 2015-09-28 2.6.6 2016-03-17
舊版本,仍被支持: 2.7 2015-10-04 2.7.4 2016-03-17
舊版本,仍被支持: 2.8 2016-03-28 2.8.4 2016-06-06
舊版本,仍被支持: 2.9 2016-06-13 2.9.3 2016-08-12
舊版本,仍被支持: 2.10 2016-09-02 2.10 2016-09-02
當前版本: 2.11 2016-11-29 2.11 2016-11-29
格式:
舊版本
舊版本,仍被支持
当前版本
最新的预览版
未来版本

主要功能[编辑]

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

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

作为开源自由原教旨主义项目,git没有对版本库的浏览和修改做任何的权限限制,通过其他工具也可以达到有限的权限控制,比如:gitosis、CodeBeamer MR。原本git的使用范围只适用于Linux/Unix平台,但在Windows平台下的使用也日渐成熟,這主要归功于Cygwinmsysgit环境,以及TortoiseGit这样易用的GUI工具。git的源代码中也已经加入了对Cygwin与MinGW编译环境的支援且逐漸完善,為Windows使用者帶來福音。

实现原理[编辑]

git和其他版本控制系统(如CVS)有不少的差别,git本身关心檔案的整体性是否有改變,但多數的CVS或Subversion系统則在乎檔案内容的差异。因此git更像一個檔案系统,直接在本機上取得資料,不必連線到主机端获取資料。

庫結構[编辑]

  • hooks:存儲鉤子的文件夾
  • logs:存儲日誌的文件夾
  • refs:存儲指向各個分支的指針(SHA-1标识)文件
  • objects:存放git對象
  • config:存放各種設置文檔
  • HEAD:指向當前所在分支的指針文件路徑,一般指向refs下的某文件

移植性[编辑]

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

现在git也提供windows版本下载。http://git-scm.com/download

Git 指令參考[编辑]

安裝和配置[编辑]

  • config
  • help

獲取和創建項目[编辑]

  • init
  • clone

基本快照服務[编辑]

  • add
  • status
  • diff
  • commit
  • reset
  • rm
  • mv

分支與合併[编辑]

  • branch
  • checkout
  • merge
  • mergetool
  • log
  • stash
  • tag

共享和更新項目[编辑]

  • fetch
  • pull
  • push
  • remote
  • submodule

檢查和比較[编辑]

  • show
  • log
  • diff
  • shortlog
  • describe


修補[编辑]

  • bisect
  • blame
  • grep

調試[编辑]

  • bisect
  • blame
  • grep

電子郵件[编辑]

  • am
  • apply
  • format-patch
  • send-email
  • request-pull

外部系統[编辑]

  • svn
  • fast-import

管理[编辑]

  • clean
  • gc
  • fsck
  • reflog
  • filter-branch
  • instaweb
  • archive
  • bundle

服務器管理[编辑]

  • daemon
  • update-server-info

管道指令[编辑]

  • cat-file
  • commit-tree
  • count-objects
  • diff-index
  • for-each-ref
  • hash-object
  • ls-files
  • merge-base
  • read-tree
  • rev-list
  • rev-parse
  • show-ref
  • symbolic-ref
  • update-index
  • update-ref
  • verify-pack
  • write-tree

使用[编辑]

使用git的專案[编辑]

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

支持git的源码存取服务[编辑]

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

参考文献[编辑]

  1. ^ Hamano, Junio. git v2.11.0 Release Notes. kernel. 2016-11-29 [2016-11-29]. 
  2. ^ Junio C Hamano. git v2.11.0-rc3. [2016-11-23]. 
  3. ^ http://git.kernel.org/?p=git/git.git;a=tree
  4. ^ git's LGPL license at github.com. github.com. 20 May 2011 [12 October 2014]. 
  5. ^ git - Definition and pronunciation. Oxford Learner's Dictionaries. 
  6. ^ [1]
  7. ^ Linus Torvalds. Re: [ANNOUNCE git wiki]. linux-kernel. 2006-05-05.  "Some historical background" on git's predecessors
  8. ^ Linus Torvalds. Re: Kernel SCM saga. linux-kernel. 2005-04-07. 
  9. ^ Linus Torvalds. Re: Kernel SCM saga. linux-kernel. 2005-04-08 [2008-02-20]. 
  10. ^ Linus Torvalds. Re: Errors gittifying GCC and Binutils. git. 2006-03-23. 
  11. ^ Projects that use git for their source code management. [2008-02-20]. 
  12. ^ OLPC wiki. Project hosting. [2008-02-20]. 
  13. ^ “a person, especially a man, who is stupid or unpleasant”(愚蠢或令人不爽的人,尤指男人)[2]
  14. ^ After controversy, Torvalds begins work on git. InfoWorld. 2005-04-19 [2008-02-20]. ISSN 0199-6649. 
  15. ^ gitFaq: Why the 'git' name?
  16. ^ LinusTalk200705Transcript
  17. ^ Linux-Kernel Archive: Kernel SCM saga
  18. ^ 王立恆. Git十歲了!Git之父Linus Torvalds說古,大談Git開發秘辛. iThome. 2015-04-10 [2016-05-10]. 
  19. ^ [3]
  20. ^ Projects that use git for their source code management. [2008-02-20]. 
  21. ^ Getting Started/Sources/Amarok git Tutorial - KDE TechBase
  22. ^ Using Repo and git (Android Open Source Project)
  23. ^ BlueZ » git access
  24. ^ Btrfs source repositories - btrfs Wiki. Btrfs.wiki.kernel.org. [2009-06-15]. 
  25. ^ git.debian.org git
  26. ^ digg.git - part 1 | Digg About
  27. ^ TypicalgitUsage - dragonflywiki
  28. ^ [4]
  29. ^ Download
  30. ^ Get FFmpeg. Ffmpeg.org. [2009-06-15]. 
  31. ^ git - Fast Version Control System. [2010-04-24]. 
  32. ^ Lucas Rocha. Mailing List Announcement. [2009-03-19]. GNOME to migrate to git version control system... 
  33. ^ git - GNOME Live!
  34. ^ gstreamer Wiki - gitDeveloperGuidelines
  35. ^ gthumb - GNOME Live!
  36. ^ GTK+ - Download
  37. ^ source repositories
  38. ^ Downloading jQuery - jQuery JavaScript Library
  39. ^ CCHIT's laika at master - gitHub
  40. ^ LilyPond, music notation for everyone
  41. ^ The Linux Mint Blog » Blog Archive » Mint to use Launchpad for translations, bugs, blueprints and github for code hosting and version control
  42. ^ LMMS - Linux MultiMedia Studio
  43. ^ Maemo - gitorious
  44. ^ MeeGo - gitorious
  45. ^ Ruby on Rails: Merb
  46. ^ MooTools - a compact javascript framework
  47. ^ OLPC wiki. Project hosting. [2008-02-20]. 
  48. ^ openSUSE - gitorious (英语). 
  49. ^ Léon Brocard. Mailing List Announcement. [2008-12-22]. The Perl Foundation has migrated Perl 5 to the git version control system... 
  50. ^ PHP. PHP migrates to git. PHP Group. 2012-03-20 [2012-03-20]. 
  51. ^ phpBB. phpBB moves source code versioning from Subversion to git. phpBB Group. 2010-03-07 [2010-03-07]. 
  52. ^ Prototype JavaScript framework: Contribute
  53. ^ Qt now open for community contributions. 2009-05-11 [2009-06-22]. 
  54. ^ Reddit Goes Open Source. [2010-02-26]. 
  55. ^ "Rails is moving from SVN to git". [2008-04-03]. 
  56. ^ Using git for Samba Development - SambaWiki
  57. ^ SproutCore Documentation
  58. ^ Sugar Labs project hosting
  59. ^ Accessing SWI-Prolog source via <a href="http://git-scm.com/">git</a>
  60. ^ 60.0 60.1 git - VideoLAN Wiki
  61. ^ gitWine - The Official Wine Wiki
  62. ^ Xiph git
  63. ^ X.Org Wiki - Development/git
  64. ^ YUI 2 and YUI 3 Source Code Now on gitHub. [2009-01-20]. 

外部链接[编辑]

参见[编辑]