使用github
使用Git
在软件版本/配置管理方面,可能有很多供应商或开源实施方案可供选择,但近年来,就最友好的开发/黑客而言,没有任何一个可以与Git并驾齐驱。
我使用了许多不同形式的软件管理工具,从CVS / SVN系列到Clearcase / Perforce系列(我个人认为绝对可怕),但是与Git一起,我终于认为不再使用软件版本控制必不可少的东西,但实际上对软件开发过程有帮助。 也许,以后我需要用一些示例来证实我的说法,但是使用Git实际上可以鼓励开发人员尝试并在代码中发挥创造力,因为他们知道他们可以随时重置任何代码更改而不会造成任何损失或开销。
我不想花太多时间谈论Git的历史。 (如果您有兴趣,可以随时阅读Wikipedia 。如果您像我本人一样,以前曾使用CVS / SVN或Clearcase / Perforce来管理软件,我希望本文能增进您对Git的工作方式以及工作方式的了解。也可以提高您的生产力。
分布式版本控制系统如何工作
顾名思义,DVCS不需要使用集中式服务器即可使用。 使用Git作为在本地系统中存储更改历史记录的一种方式非常好,并且能够高效,便捷地进行操作。 但是,与所有软件管理工具一样,主要好处之一是能够在团队中有效协作并管理对软件存储库所做的更改。 那么,Git(或任何DVCS)如何使您以独立的方式工作却又允许您在同一代码库上进行协作?
答案是,Git将整个软件存储库的副本存储在每个包含代码库的本地计算机中。 这似乎是一种非常低效且占用空间的方法,但实际上,如果您的文件主要是文本(与大多数源代码一样)并且这些文件通常以blob(并高度压缩)。 因此,当您使用Git时,您实际上是在本地环境中工作,这意味着除了一些确实需要网络通信的命令之外,大多数命令实际上都是响应Swift的。 当您将代码“提交”到Git存储库中时,您实际上并没有处于“协作”模式,因为您的代码库实际上存储在本地系统中。 这个概念与其他VCS系统有所不同,在其他VCS系统中,“提交”实际上将您的最新更改放入一个公共存储库,每个人都可以同步或访问它。 我可以从Atlassian网站上窃取的以下图片简单地说明这个概念:
话虽这么说,我实际上如何与团队其他成员共享我的代码? Git的妙处在于它允许您定义工作流程。 您要直接与对等方同步代码吗? 还是您更喜欢传统的“集中式”模型,每个人都将使用他们的代码更新“集中式”服务器。 最常见的方式是后者,其中每个开发人员或本地工作站都将其代码库与此集中存储库同步。 此集中存储库也是所有工作站都应克隆并更新到的存储库的权威副本。
因此,对于集中式模型,每个人都将对该中央存储库执行“ git push”,每个工作站都将提名该软件存储库作为其“来源”。 在“ git push”成功之前,git将需要确保没有其他人实际修改您从该集中式服务器检索到的基本副本。 否则,Git将要求您执行“ git pull”以将其他人执行的更改合并到本地服务器中(如果有人更改了您拥有的相同文件,有时可能会导致状态冲突)。 只有这样做之后,才允许您将新的合并提交推送到服务器。
如果您尚未更改本地副本,并且自上次同步以来在“集中式”服务器中进行了新提交,则您所需要做的就是执行“ git pull”,而git会执行“快进”操作这实际上是将您的本地副本带到集中式服务器的最新代码。 如果所有这些听起来都令人费解,那实际上比听起来更简单。 我会推荐Scott Chacon的Pro-Git书,该书清楚地解释了Git的工作原理(这是他博客的链接 )。
那么如果是DVCS呢?
当您在软件开发中使用Git时,您将开始认识到进行实验代码更改并不像使用其他工具那样痛苦。 这样做的主要原因是可以在需要时执行“ git stash”或“ git branch”(顾名思义),从而从当前的工作代码中创建新分支。 在Git中进行分支是非常便宜的操作,它使您几乎可以立即定义实验分支,而不必向使用相同代码库的所有团队成员解释自己。 这是因为您选择了要推送到“集中式” Git存储库的内容。 另外,每当需要从历史记录或远程中签出软件版本时,都可以将工作“ git存储”到Git存储库中的临时存储中,并在以后完成所需的操作后检索到该存储版。
是否曾尝试在Clearcase或Perforce中创建分支? 甚至想到这样做,我都会发抖。 SVN可以做得更好,但是它仍然是一个相当慢的操作,需要大量的网络传输。 使用Git完成分支后,您将再也不想回到旧的VCS工具了。
使用github