Git学习
本篇在慕课网中学习git的使用时记录的笔记,学习网址http://www.imooc.com/learn/208
其中4-2 如何回到git的过去版本,再转回最新的还在研究当中, 有待更新,今天先到这儿
注意:git和github是不一样的。git是个软件,github是个网站。我们通过git可以把项目托管在github上
1.多端共享(mac、windows等)
2.是分布式的
断网时也可以用,任何一个人的机器上的版本都是一个完整的备份,不怕丢失
3.回退
可以undo几乎所有的命令,甚至是恢复一个被删除的提交,因为Git后端几乎不做任何的删除操作
4.选择有用的代码提交
当你把纽带,冰块还有西红柿一起扔进搅拌机的时候至少有两个问题。第一,搅拌过后,没有人知道之前扔进去了些什么东西。第二,你不能回退,重新把西红柿拿出来。同样的,当你提交了一堆无关的更改,例如功能A加强,新增功能B,功能C修复,想要理清这一堆代码到底干了什么是很困难的。当然,当发现功能A出问题的时候,你无法单独回滚功能A。Git可以通过创建“颗粒提交”,帮你解决这个问题。“staging area”的概念可以让你决定到底那些东西需要提交,或者更新,精确到行。
5.分支
传统的VCS切分支挺麻烦的,如果有过管理VCS经验的人应该知道,切一个分支就是完全复制当前分支的所有文件,在比较大型的项目里,开销是比较大的,如果你有N个APP,且每个APP都有各自的分支,那就有的你忙了。
git提倡你多切分支,因为它使用的是指针,你可以在去上厕所前切一个,去上厕所后再切一个,左切切右切切,没关系,它罩得住。
传统VCS切分支是在服务端操作的,也就是说本地其实要在服务端操作完再check下来。git 不然。服务端也可以切分支,本地也可以切分支,这是我认为最大的好处,你在处理12345这个bug时可以切一个分支,马上老大来话说你给我优化一下XXX功能,你又切一个分支,上级应用层来个电话说YYY功能不太好用啊。。同样,你再切一个分支。由于你切的分去只是本地的,不会影响到别人,在发好功能测试后你可以合并到master里,测试提交。
6.分工协作
本来这个也是第二点分布式的一个特点。不过我单独拿出来是因为这个优点有不同寻常的意义。大家可能经历过手里同时有2~N个活,可能都是基于公司同一个源代码。其中可能要和A完成一个功能,和B完成一个功能。这时候git就可以大显身手了,你也可从A机子里得到项目的最新代码,也可以从B机子里拿到他的劳动成果,而完全不用经过中央服务器,所以不会对其他人照成影响。
参考引用:
http://blog.csdn.net/starter110/article/details/7464455
http://www.oschina.net/question/28_37438
3-1 Git的下载和安装(windows)
在Github的官网:https://github.com/下方有下载,如图:
下载之后直接运行就可以了,然后就开始下载了,
下载完成后会自动安装,安装完会弹出如下界面:
接下来在github网站注册账号(记得验证邮箱),然后输入用户名密码登录客户端即可。
如果在客户端登录的时候出现登录失败的问题,但是用浏览器却可以登录,那么可能是.net framework的问题,我的系统是win8,然后下了最新的.net framework 4.5.1,包括程序和语言包,之后就可以了。下载地址:http://support.microsoft.com/kb/2881468/zh-cn
3-2 创建一个新的项目
1.登录Github之后,可以看到网站上关于github的使用说明
2.我们点击“New repository”,进入repository创建页面
3.完成创建
3-3 检出项目和提交项目(windows)
1.首先是检出项目。在创建了test这个repository之后可以在登录后的首页上看到
2.点击“test”进入项目首页,在项目首页的右侧有两个地方值的注意,一个是“HTTPS clone URL”:点击复制这个url后,可以用于在linux下检出项目;另一个是“Clone in Desktop”按钮:这个是用于在windows下检出项目的。
3.这里我使用的windows,点击 “Clone in Desktop”之后会自动运行git客户端,然后选择文件存储路径,客户端如图所示:
4.检出完成之后如下图所示
5.接下来是提交修改。在项目test上右键,“open in explorer”打开本地目录,然后在本地新建一个文件“流水账.txt”,记录一行信息,然后另存为utf-8编码,就可以在客户端上看到未提交的“流水账.txt”,如图:
6.然后填写相关的描述,点击“commit to master” 提交,然后可以看到出现了“unsynced changes”,意思是提交到了本地的repository,但是没有同步到github上
7.点击右上角的“sync”即可同步到Github上,同步完成后刷新项目首页即可看到新添加或修改的文件。
4-1 代码冲突
同一时间同一文件,两个或多个人都修改了,就会出现冲突。
1. 有冲突的时候,同步时会出现
2.这个时候找到冲突,修改之后,再提交就可以了。
4-2 如何回到过去
还在研究。。。。
4-3 建立里程碑
里程碑相当于一个阶段的工作已经完成,可以单独成为一个版本。
1.进入项目首页,点击“releases”
2.点击“create new release”
3.输入版本号、版本号、发布描述,
4.然后点击发布,就可以看到发布的版本了
4-4 分支开发与分支合并
应用的情况:发布了版本1.1,然后还在接着开发1.2,中途用户发现了一个1.1的bug,这个时候不能直接在还在开发中的1.2中修改,以免引发更多的更严重的问题,所以这个时候需要在在发布的1.1版本处做分支,然后修复bug给用户用,在merge到开发中的1.2中。
现在情景如下:
master中已经在开发1.2(失误,应该是v1.1的,git中已经是1.2了,这里就将错就错了,sorry),此时右键“open in explorer”可以看到文件v1.2.txt。v1.0是在选中的地方发布的,我们要在v1.0上建立branch修复bug。
步骤如下:
1.进入项目首页,点击“releases”查看发布的版本,然后点击版本的tag
2.进入之后,点击“tag:v1.0”,创建“bug1”分支,这个时候就会从1.0的位置创建
3.在客户端同步一下新的branch,可以看到是从1.0创建的,此时右键“open in explorer”可以看到资源管理器中没有v1.2.txt文件
4.修复v1.0的bug后,commit&sync,这个时候对master中v1.2的开发是没有影响的,然后再发布一个针对v1.0的bug修复的版本v1.0.1,注意选择bug1分支
5.merge分支bug1到master中。点击分支“bug1”,在点击“manage”
6.在弹出的窗口中,拖动bug1分支到下方merge的第一个格子,master到第二个,第二个表示合并到的那个分支,然后点击merge,即合并到正在开发v1.2的master中了,然后再同步一下master即可
4-5 多人合作的经验
1.多用客户端和工具,少用命令行,除非是直接在linux上做服务端开发
2.每次提交前,diff自己的嗲吗,以免提交错误的代码
3.下班回家前,整理好自己的工作区,哪些是要保留的,哪些是要清楚的,哪些是需要测试的等等,整理好
4.并行项目,使用分支开发
5.遇到冲突时,搞明白冲突的原因,千万不要睡意丢弃别人的代码
6.产品发布后,记得打tag,方面将来拉分支修bug