什么是Git,为什么我需要它?

3

我对编程还很新,但我感觉自己掌握了一些技能,并且正在尽力学习更多。我不断地看到Git在编程项目中绝对至关重要,但我似乎无法弄清它到底是做什么的。谷歌也不想告诉我。网站上说它是“分布式版本控制系统”。嗯...什么意思呢?

有没有人能向这个初学者解释一下这个东西是什么,以及为什么它如此重要呢?


http://en.wikipedia.org/wiki/Revision_control - Dan Grossman
1
在分布式版本控制系统方面:https://dev59.com/03E85IYBdhLWcg3w43sW#2563917 和 https://dev59.com/OnE85IYBdhLWcg3wl0nF - VonC
这不应该是一个StackOverflow的问题,而应该是一个搜索引擎查询。 - Dan Grossman
@Dan:我个人不同意,但是一旦你达到必要的声望,你可以投票将其关闭为“不是一个真正的问题”。然而,我仍然认为你不需要发布一个不太有帮助的答案来证明这一点。 - Cascabel
5个回答

5
这个网站称它是“分布式版本控制系统”。
让我们从“版本控制系统”的概念开始。它的意思就是,它是一种存储和管理不同版本的东西的方法。在编程中,这非常重要,因为在开发过程中,项目会被改变很多次,经常有必要访问不止当前版本。它也将被多人更改;必须有一种方式来合并每个人的更改。
最简单的版本控制只需定期备份整个项目,并在各个开发者之间传递这些快照或补丁。显然,这种天真的方法最终会遇到困难;这就是专用版本控制系统的用处所在。
一个版本控制系统会智能地跟踪您的所有历史记录,并允许您浏览该历史记录,看到有关更改的所有内容:它们是什么,谁做出了这些更改以及为什么做出了这些更改。稍微复杂一些的是,它们通常会有某种分支的概念(创建多个开发者的分歧开发线),以及合并(将这些分支重新合并)。大多数版本控制系统还会在所有这些功能之上提供许多更高级的功能。只举一个例子,git有一个名为“bisect”的工具,可以让您通过历史记录进行二进制搜索,以查找特定错误是何时引入的。很棒的东西。
有两种广泛的版本控制分类:集中式和分布式。在集中式系统中,有一个中央仓库。它包含了项目的所有历史记录,任何想要与该历史交互的人都必须通过该中央仓库进行。而像 Git 这样的分布式系统会将这个历史记录提供给每个人。每个开发者最终都会拥有该仓库的一份副本(在 Git 中称为克隆)。这使得多个人可以在同一时间内更简单地共同开发同一个项目,可能不需要互联网连接,并且还为每个人提供了版本控制系统的全部功能,而不是仅限于中央仓库的有限公共功能。
对于如何从基础开始构建像 Git 这样的系统的定性阅读,请参阅 the git parable
有关此主题的更一般信息,请查看维基百科:revision control

Tom赞扬了这篇优秀的文章,我也推荐http://progit.org/book/ch1-1.html的开篇章节。 - Dan Diplo

3
Git是备份。备份是一个对于使用电脑的每个人都应该熟悉的概念--备份是你的数据的保障。Git是你思想的备份。(对于备份和Git都适用通常的警告--如果你不知道它如何工作,也不能有效地使用它,那么它就没什么用处。)
Git是一个版本控制系统 - 它管理同一文件的不同版本之间的补丁或变更集。最简单的方式可能是将其视为四个文件夹中的替代品,这些文件夹名为my_filemy_file_testmy_file_test2my_file_retired20030411,以及一个名为my_file_changes.log的文件,其中记录了每个文件版本之间的更改以及更改原因。(尽管Git远不止如此。)
Git是软件开发中子公司原则的实现者。它使得多人同时对同一文件进行更改成为可能,并且使这些人能够有效地协作(消除了繁琐的时间,以确保您可以将两个版本合并在一起而不会覆盖彼此的更改)。而且,Git甚至还有更多的功能...

...但我相信,一些这方面的问题会在回答中得到解决。 - Sean Vieira
(非常欢迎思路,评论和纠正。) - Sean Vieira
1
严格来说,Git 管理的是“快照”,而不是补丁,尽管数据最终会在内部进行增量压缩。 - Cascabel

1

从维基百科开始:git

基本上,版本控制系统可以帮助您管理和组织软件项目,通过跟踪各种文件。它们允许您“向后退回到过去”,并随时检索任何旧版本的文件,创建多个并行“分支”以进行错误修复、功能开发等等。

它们非常棒,而Git似乎是一个很好的版本控制系统的例子。


1

1

观看Linus Torvald在Google科技讲座系列中谈论Git的见解savvy talk

这正是Linus的风格:“我是一个非常愤世嫉俗、不信任他人的人,我认为你们大多数人都是完全不称职的。”- 对着满屋子的Google员工说


我讨厌那个谈话的暗示,即git是一种分布式版本控制系统,因此它不是一种集中式版本控制系统——也就是说,the git工作流程完全是分布式的。当然这根本不是真的。你可以很容易地拥有一个单一的git仓库,它是你的集中式仓库,还有其他几个仓库都向它推送。只是想指出这一点,因为这个问题是给git新手的。 - Tyler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接