git和svn面试题
svn
svn简介
svn是一个版本控制软件,
通过建立一个安放软件源文件的厂库,能够从厂库中chekout出来,也可以把一个add进去,可以进行版本比较,也可以进行权限控制,不同的用户授予不同的权限,
一个svn项目文件下有branches,tags,trunk三个目录,trunk代表主线,存放正在开发的项目;tags存放稳定的版本(只读的,不可修改的);branches代表分支,branches分支可以分为即将发布的分支,解决bug的分支,引用新技术或功能的分支等,开发完成后要合并到主干。
(常用的Branches分支有好几种类型,这里列出常用的几种。
Release Branches
当trunk达到准备发布的阶段时(或者你想冻结新特色的添加时),你应该创建一个release branches。
Bug fix branches
分支也可以用于处理trunk或release branches里发现的严重的Bug。
Experimental branches
有时你想将某个新技术引进项目。这很好,但是你当然不想赌上你的整个项目。想象一下,你想把你的Web程序从PHP4改为PHP5。你要花多少时间?在这期间你的trunk停止使用?直到你把所有到PHP5的转换做完)
svn常用操作
下载软件,根据项目资源库路径和自己的用户名密码找到项目,checkout到本地项目,提交,更新,查看历史版本,解决冲突等等
对于本地不想加入版本空值的可以进行ignore
svn常用命令
svn checkout 检出项目到本地
svn add 添加新文件
svn commit 提交
svn update更新文件
svn delete删除文件
svn diff 比较差异
svn log查看日志
svn merge 将两个版本的文件的差异合并到当前文件
例如:svn merge -r 20:25 test.cpp(将版本20与25之间的差异合并到当前文件,但一般会发生冲突,需要处理一下)
svn diff
svn diff test.php 将本地文件和版本库文件比较
svn diff -r m:n path(对版本m和版本n比较差异)
例如:svn diff -r 200:201 test.php
svn update
svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。
svn update test.php 更新指定文件
svn update -r 200 test.php(test.php还原到版本200)
svn log
svn log test.php 显示文件的所有修改记录,及其版本号的变化
svn merge
svn merge -r m:n path
svn merge -r 200:205 test.php(将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下)
svn的冲突解决
出现冲突文件,需要进行编辑冲突,修改完冲突的地方,进行测试,测试没有问题,文件标记为已解决,进行提交
Svn分支的合并
主干和分支都把所有文件提交或更新,保持跟版本库一致,然后在主干上进行合并分支,对于有冲突的,我会先保留冲突的文件,合并完之后,在看冲突的地方,进行解决,本地测试,没有问题了提交到主干
svn版本回退
首先查看提交日志Show log
之后选择要回退的版本,点击revert to this version还原到这个版本
对于update item to revison:,本地更新到这个svn版本,作为只读模式版本无法提交所作的更改,一般作查看历史版本用
修改提交
修改前都是先与资源库同步,看本地的代码是否跟版本库一致
提交的时候也是先与资源库同步
如果有更新或者冲突,就先解决掉,然后再进行修改或提交
查看资源历史记录
通过资源历史记录能够查看提交的功能,提交的内容等,方便进行回退等
Svn资源库
通过svn资源库可以查看主干,所有的分支等,可以在svn资源库进行检出代码
git
git介绍
Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
git和svn的区别
1、Git是分布式版本控制系统,SVN是集中式版本控制系统
2、git保存的是文件变化后的快照,svn保存的是文件的变化
3、git可以本地建立分支,svn只能建立远程分支
优缺点
svn对中文支持的好,svn更适合项目管理,研发队伍不管程序员,美工,前端等都可以用,容易上手
如果公司对数据安全很重视的话,更倾向于SVN。因为SVN的安全控制和权限管理更好,服务器公司统一控制管理,也不会每个人都拷贝一份。
svn:svn创建分支需要在svn服务器上复制需要的分支再创建新的分支,这样的话别人一更新便会把创建的新分支也更新下来,这样再想删除分支便需要考虑太多
git:git可在本地根据需要创建分支,在新建的分支上进行开发,如果新建分支上的开发需要上线,再将新建分支上的内容合并到主分支上进行合并提交
集中式版本控制与分布式版本控制区别
集中式的版本库是集中存放在中央服务器的,要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。
集中式版本控制系统最大的毛病就是必须联网(局域网或互联网)才能工作。
分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了
git常用的分支类型
主干分支 master
主要负责管理正在运行的生产环境代码。永远保持与正在运行的生产环境完全一致。
开发分支 develop
主要负责管理正在开发过程中的代码。一般情况下应该是最新的代码。
bug修理分支 hotfix
主要负责管理生产环境下出现的紧急修复的代码。从主干分支分出,修理完毕并测试上线后,并回主干分支。并回后,视情况可以删除该分支。
准生产分支(预发布分支) release
较大的版本上线前,会从开发分支中分出准生产分支,进行最后阶段的集成测试。该版本上线后,会合并到主干分支。生产环境运行一段阶段较稳定后可视情况删除。
功能分支 feature
为了不影响较短周期的开发工作,一般把中长期开发模块,会从开发分支中独立出来。开发完成后合并到开发分支。
git使用的常用命令
git init(当前目录创建本地仓库)
git status(查看仓库的状态)
git diff 文件名 (这次相较上次修改了哪些内容)
git add 文件名 (将添加的文件放到暂存区中)
git commit (将暂存区内容提交到代码区中)
git clone url地址(将远程仓库的代码克隆到本地)
git branch 查看当前分支
git checkout 切换分支
git pull 本地与服务器端同步
git push 将本地分支推送到服务器上去。
git branch
git branch # 列出所有本地分支
git branch -r # 列出所有远程分支
git branch -a #列出所有本地分支和远程分支
git branch [branch-name] #新建一个分支,但依然停留在当前分支
git branch -d [branch-name] # 删除分支
git checkout
git checkout [branch-name] #切换到指定分支
git checkout -- readme.txt
把readme.txt退回到最近一次git commit或git add时的状态。如果文件未提交到暂存区退回到和暂存区一样,如果已经提交就退回到添加到暂存区后的状态。
git merge
git merge [branch-name]# 合并指定分支到当前分支
git log
显示从最近到最远的提交日志
git log --pretty = online 简化显示提交日志
git commit
git commit -m [message] #提交暂存区到仓库区,-m 指定提交说明
git commit [file1] [file2] ... -m [message]
git commit -a -m [massage] 可以将所有已跟踪文件中的执行修改或删除操作的文件都提交到本地仓库,即使它们没有经过git add添加到暂存区,建议一般不要使用-a参数
git push
git push <远程主机名> <本地分支名> <远程分支名>
例如 git push origin master:refs/for/master ,即是将本地的master分支推送到远程主机origin上的对应master分支, origin 是远程主机名,第一个master是本地分支名,第二个master是远程分支名。
git push 如果当前分支只有一个远程分支,那么主机名都可以省略
git push -u origin master 如果当前分支与多个主机存在追踪关系,则可以使用 -u 参数指定一个默认主机,这样后面就可以不加任何参数使用git push
commit id
git每个提交记录都有唯一的commit id,它是一个加密哈希函数计算的哈希值
git区域划分
版本仓库:.git文件夹就是我们的本地版本库
暂存区:.git文件夹中的index文件就是暂存区,暂存已经修改的文件,最后统一提交到版本仓库
工作区:我们本地操作的文件位置就是工作区
git add file1 是把文件从工作区提交到暂存区,git commit -m [message]提交暂存区到仓库区
这三个区域都在本地
git版本控制的文件特点
使用git init命令后,会在当前文件夹下面建立隐藏的.git文件夹
这个文件夹里包含了git工作时所需要的所有信息
git远程厂库
远程仓库是指托管在网络上的项目仓库
可以把自己提交到本地的修改的文件推送到远程厂库,也可以把别人推送到远程厂库的代码拉去过来
可以用github做为远程厂库,也可以自己搭建gitlab远程厂库
git分支
我们的主线是master,我们可以开辟分支然后合并到主线上
Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
git的冲突解决
与远程厂库同步时发现有冲突
可以先同步文件(git pull),然后针对冲突进行修改,修改之后提交(Git Commit ),然后再推送到服务器上(git push)
也可以根据有感叹号的冲突文件(未合并冲突的)编辑冲突的地方,然后标记为冲突已解决,然后提交推送
git回退版本
git reset –hard HEAD ^ ( ^ 表示回到上一个版本,如果需要回退到上上个版本的话,将HEAD^改成HEAD^^, 以此类推。那如果要回退到前100个版本,这种方法肯定不方便,我们可以使用简便命令操作:git reset –hard HEAD~100 );
git reset –hard 版本号 指定版本号进行回退
实际应用
在浏览器中打开github或公司的gitlab,进入项目,复制项目的git地址
在本电脑的工作目录敲下命令:
git clone https://github.com/rodickmini/taptempo.git
或者使用git的客户端指定地址来克隆项目

浙公网安备 33010602011771号