转载请注明出处:https://blog.csdn.net/mythmayor/article/details/72876890
1.版本控制软件
功能:
- 方便程序员代码共享,协同开发
应用场景:
- 想恢复到某个版本,ctrl+z是有最大记录数的,不能回到原来的那个版本了
- 修改一个bug,改来改去最后改好了,但是自己也忘记了是怎么改好的,没有一个改动的记录
- 项目中出了一个bug,大家都不承认是谁改的,没有一个修改人的记录
- 代码的权限控制,新手菜鸟可能一不小心把代码给删除或者改错了
- 项目管理,工作量统计—查看每个程序猿的代码提交量
- 项目不同版本代码的保存、备份
2. 常用软件
以下是集中式版本控制:
CVS:
已经基本淘汰,之前主流的版本控制软件SVN:
Subversion,为了替代CVS。目前主流软件ClearCase:
IBM开发(收费),大型团队的项目开发版本控制VSS
微软开发(用的人很少),两个字形容:糟糕
分布式版本控制:
- GIT
分布式版本控制软件,由github网站的影响而逐渐火起来
集中式和分布式的区别:
集中式:多个开发人员通过一个中心版本控制系统来记录文件版本,从而达到保证文件同步的目的
分布式:分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。
VisualSVN是一款图形化svn服务器。官网
http://www.visualsvn.com/server/
下载地址:
http://www.visualsvn.com/server/download/
搭建svn服务器,安装步骤见文档
3. SVN使用步骤
- checkOut:把服务器的仓库下载到本地
- 在仓库中编写代码
- 对新创建的文件选择add选项
- commit:把文件或文件夹中修改过的文件提交至服务器
- show log:查看所有历史版本
- update:把服务器上与本地内容不一致的文件下载下来
- 程序员同一时间修改了同一个文件的同一个位置,就会出现代码冲突
- edit conflicts
- 文件锁
- 类似java同步锁
- 在properties中设置need-lock为true
- svn get lock:申请文件锁
- 一个用户拿到了文件锁,其他用户就不能再申请了
- commit代码后,会自动释放文件锁
- Release lock:手动释放锁
- add to ignore list
4. SVN图标
蓝色问号:创建的一个新的文件或者图片,默认左上角是一个蓝色的问号:这个文件就是版本控制软件检测到的新文件,他会问你是否要加入到版本控制里面。
蓝色加号:对想要加入到版本控制的文件:右键:Add->将该文件加入到我们的版本控制里面。 添加成功之后图标就变成蓝色的加号
绿色对勾:对蓝色加号的文件右键:commit操作-> 注意填写提交的注释,说明。 ok之后,我们的图标变成绿色的勾之后就代表我们的文件已经提交到服务器上了。
红色叹号:表示该文件或文件夹与服务器内容不一致,也就是被修改了,但是还未上传
三角黄色叹号:表示该文件中出现代码冲突
灰色对勾:表示该文件被文件锁锁住了
黄色的锁头:表示用户已经拿到该文件的文件锁,可以修改该文件
红色叉叉:表示该文件计划从SVN管理中删除
没有图标:表示SVN不处理该文件
5. svn提交规范
- 先更新,后提交。
- 多提交代码,特别是在多人同时操作的代码模块,要勤更新,勤提交。
- 不要提交不能编译的代码。提交代码之前,自己先编译,clean下代码看有没有报错,程序是否能运行,再去提交代码。
- 每次提交代码必须明确写明注释,修改了什么内容,做了什么操作!
- 提交代码时不要提交本地自动生成的文件,可以加入过滤列表。比如bin,gen,.classpath等
- 不要提交自己不明白或与项目无关的代码。
- 慎用锁定功能。
6. git
- 集中式服务器:一台服务器和多台终端,所有的逻辑运算和数据保存都在服务器
- 分布式服务器:一台服务器和多台终端,每一台终端都有服务器的完整数据拷贝,客户端即是服务器
- Windows的git其实是Linux版git加上cygwin模拟器
- cygwin:Windows下的Linux命令行模拟器
7. git操作步骤
- 在一个文件夹中选择create repository here,把文件夹变成仓库
- 在仓库中编写代码
- 先add,再commit->master
- push:相当于svn的commit
- pull:相当于svn的update
- clone:相当于svn的checkOut
- create patch serial:生成补丁文件
详情可参考: http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/