赞
踩
写在前面:由于对文档和代码的管理感觉到特别的头疼,因此开始学习Git,过程里参考了很多其他的博客,这篇文章作为学习记录,有些图片来自于其他的大牛们,就不一一列举了,在此感谢感谢感谢大家。
Windows 10、Tortoise 2.6、GitBlit 1.8
首先,我们先一起来回想一下平时我们写程序的场景。第一天,写了一个程序经过n次的调试输出之后得到了正确结果,保存第一天的代码,标记上v0.0。第二天,觉得这个程序可以优化,于是打开编辑器,关闭聊天工具,着手开始修改,经过反复的修改删除黏贴之后,完成了第二天的修改,心情特别的好,迅速保存完代码,标记上v0.1就去开黑了。第三天,觉得前几天的输出格式有点丑,决定做个UI界面,加个特效,于是又打开编辑器,关闭聊天工具,“噔噔噔”开始改代码了,几个小时以后,长舒一口气,看着新的界面,结束了第三天的修改,保存第三天代码,标记上v0.3。第四天,仔细想一想还是第一个天的算法更适合项目一些,于是找出第一天的v0.0版本,把代码拷贝到v0.3版本里,修改完成,保存为v0.4……经过一两个星期以后,摸摸自己的头发,照照镜子,决定结束项目,这个时候发现代码自己存的代码特别多,版本特别多,每个版本自己改动了哪里好像也不是记得特别清楚了,这个时候怎么了呢?于是看看表,也就还是22:00,两个小时肯定可以确定一个发布版本,于是又开始改代码了。两个小时以后,成功完成了修改,开开心心的去睡觉了。
这里使用的是人工的方式进行代码版本管理,一个人独自工作的时候这也挺好的,似乎没有什么问题,当需要和其他人一起开发的时候,这个方式就不适用了。比如:一个三人开发小组,小组成员负责的模块不一样,每天写完代码以后各自保存各自的代码,经过一段时间以后,最开始所有人相同的demo就有了三个DIY版本,并且整个三个人的代码也可能出现一些麻烦。
这个时候就有人想出了一个处理方案:建立一个中央仓库,所有人每天先下载中央仓库的代码,写完代码之后,再把代码上传到中央仓库,这样每个人每天拿到的代码都是一致的,解决了协作的问题。当然这里需要保证每个人上传的时候合并自己的代码与中央仓库的代码,更新中央仓库的代码。这就诞生了集中式的VCS(Version Control System),常见的有:CVS、SVN等
集中式的VSC虽好,但是同时也存在这一个缺点,版本库集中存放在中央服务器,网络的延迟常造成下载阻塞,并且一旦中央服务器出现问题,所有人都无法继续进行开发了,所有与之对应的就有分布式的VCS,目前最先进的就是Git。
Git作为Linux之父Linus牵头着手开发的产品,优点在此就不赘述了,分布式VCS中,每个终端保存了仓库的一个副本,也就是说无论是否有网络都可以进行开发,进行代码的管理,及时你的仓库误删了,也可以在其他人的电脑克隆一份,具体这个方便在哪里,用了就知道了。
Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 ——《百度百科》
在本地建立版本库的方式有两种,一种是在一个空文件夹下,右键选择Create repository here,如图所示。
第二种方式是在空文件夹下,克隆远程仓库中已建好的版本库。
仓库建立后默认建立了master分支,还有.gitignore与README,一个是记录Git忽略仓库中哪些文件的配置文件,另一个是写个阅读者的注释文件。所有的文件可在日志(log)中查看到仓库的变化情况,如下图所示,此时master分支刚刚建立。
添加 Add:把文件存放到缓存区。
提交 Commit:把文件存放到本地仓库。
推动 Push:把文件存放到远程仓库。
在Git的版本库分为本地仓库,远程仓库。本地仓库(Local Repository)即保存在本机的仓库,远程仓库即远端的仓库,对于本机来说,其他不保存在本地的仓库都可以成为远程仓库,因此本机的本地仓库,对于其他用户来说也是他们的远程仓库。
此外,在平时还会提到暂存区(stage或index)与工作区。工作区即平时我们在资源浏览器看到的文件夹和文件夹里的文件。暂存区保存在工作区的.git文件夹下,是一个隐藏文件夹,它与分支类似,用于临时保存我们提交到仓库的文件。
在Tortoisegit中相应的按钮,如下图所示。
到此,最近本基本的的工作流程就可以理解了。
Step1:在本机建立仓库。
Step2:写代码。
Step3:通过Add指令,把文件添加到暂存区。
Step4:通过Commit指令,把文件提交到仓库。
Step5:通过Push指令,把本地仓库推送到远程仓库。
Git最显著的一个特点就是提供了强大的分支管理,我们可以自由的建立分支。此处直奔团队合作的模式,简述一下分支。
在我们建立版本库之后,每次的提交Git会记录下来,画成节点图的方式便是一条时间线,我们称呼它为分支(brench),建立其他的分支的时候,会根据当前分支最近一次提交建立一个完全相同的节点,并与当前分支并列在相同的级别。
Tortoisegit中建立、切换、合并分支都有对应的按钮,如下图所示。
团队协作有多种工作流,常见的有GitFlow工作流、Forking工作流等。
集中式工作流中,常见本地的master分支没有更新导致更新失败的问题,这是需要先通过pull命令更新本地的master分支,再推送到服务端。
采用多个分支进行管理,各个分支有着各自的意义。
master分支:稳定分支,用于保存已发布新版本。
dev分支:工作分支,用于日常统一合并代码的分支。
fearture分支:开发分支,用于小组成员各自方向的开发。
release分支:发布分支,用于发布新版本。
hotfixes分支:修复分支,用于紧急修复bug。
在服务端有一个正式仓库,还有服务端个人仓库,这里代表着每个成员有2个仓库,一个本地私有的仓库,一个远程的公开仓库(区分之前的远程仓库概念)
Pull requests让开发者更方便地进行协作的功能,提供了友好的Web界面可以在提议的修改合并到正式项目之前对修改进行讨论。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。