git 与 svn 的使用

**** SVN适用于项目管理, Git仅适用于代码管理。*

git 与 svn 的使用

1.SVN属于集中化的版本控制系统,有个不太精确的比喻:SVN = 版本控制+ 备份服务器
SVN使用起来有点像是档案仓库的感觉,支持并行读写文件,支持代码的版本化管理,功能包括取出、导入、更新、分支、改名、还原、合并等。

Git是一个分布式版本控制系统,操作命令包括:clone,pull,push,branch ,merge ,push,rebase,Git擅长的是程序代码的版本化管理。

2.GIT跟SVN一样有自己的集中式版本库或服务器。但,GIT更倾向于被使用于分布式模式,也就是每个开发人员从中心版本库/服务器上chect out代码后会在自己的机器上克隆一个自己的版本库。可以这样说,如果你被困在一个不能连接网络的地方时,就像在飞机上,地下室,电梯里等,你仍然能够提交文件,查看历史版本记录,创建项目分支,等。对一些人来说,这好像没多大用处,但当你突然遇到没有网络的环境时,这个将解决你的大麻烦。

3.GIT把内容按元数据方式存储,而SVN是按文件
所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。如果你把.git目录的体积大小跟.svn比较,你会发现它们差距很大。因为,.git目录是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分支,版本记录等。

4.分支在SVN中一点不特别,就是版本库中的另外的一个目录。如果你想知道是否合并了一个分支,你需要手工运行像这样的命令svn propget svn:mergeinfo,来确认代码是否被合并。然而,处理GIT的分支却是相当的简单和有趣。你可以从同一个工作目录下快速的在几个分支间切换。你很容易发现未被合并的分支,你能简单而快捷的合并这些文件。

5.GIT没有一个全局的版本号,而SVN有
目前为止这是跟SVN相比GIT缺少的最大的一个特征。你也知道,SVN的版本号实际是任何一个相应时间的源代码快照。我认为它是从CVS进化到SVN的最大的一个突破。因为GIT和SVN从概念上就不同,我不知道GIT里是什么特征与之对应。如果你有任何的线索,请在评论里奉献出来与大家共享。

6.GIT的内容完整性要优于SVN:
GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

SVN属于集中化的版本控制系统

Subversion的特点概括起来主要由以下几条:

1.每个版本库有唯一的URL(官方地址),每个用户都从这个地址获取代码和数据;

2.获取代码的更新,也只能连接到这个唯一的版本库,同步以取得最新数据;

3.提交必须有网络连接(非本地版本库);

4.提交需要授权,如果没有写权限,提交会失败;

5.提交并非每次都能够成功。如果有其他人先于你提交,会提示“改动基于过时的版本,先更新再提交”… 诸如此类;

6冲突解决是一个提交速度的竞赛:手快者,先提交,平安无事;手慢者,后提交,可能遇到麻烦的冲突解决。

Git属于分布式的版本控制系统

与SVN不同,Git记录版本历史只关心文件数据的整体是否发生变化。Git并不保存文件内容前后变化的差异数据。实际上,Git更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git不会再次保存,而只对上次保存的快照作一连接。

简略的说,Git具有以下特点:

1.Git中每个克隆(clone)的版本库都是平等的。你可以从任何一个版本库的克隆来创建属于你自己的版本库,同时你的版本库也可以作为源提供给他人,只要你愿意。

2.Git的每一次提取操作,实际上都是一次对代码仓库的完整备份。提交完全在本地完成,无须别人给你授权,你的版本库你作主,并且提交总是会成功。

3.甚至基于旧版本的改动也可以成功提交,提交会基于旧的版本创建一个新的分支。

4.Git的提交不会被打断,直到你的工作完全满意了,PUSH给他人或者他人PULL你的版本库,合并会发生在PULL和PUSH过程中,不能自动解决的冲突会提示您手工完成。

5.冲突解决不再像是SVN一样的提交竞赛,而是在需要的时候才进行合并和冲突解决。

总之,公司的开发团队在进行的项目开发管理时,svn是更好的选择,团队成员共同维护公司的中心版本。
若是开源项目,则git更加适合,每个人都可以维护自己专属的版本,同时有github开源社区支持。

附录(git命令行):

有很多高级的命令,等待使用者自己百度;vi编辑。
git config --global user.name"wsb"
git config --global user.email 2267638690@qq.com
C:\Users\user 目录下有个.gitconfig文件,用于github的签名验证。

git --version 查看版本。
git config --list 查看配置文件。
git init 当前路径初始化工作目录
git add 本地文件添加到暂存区
git commit -m"注释" 暂存区文件提交到仓库, -am"" 本地到仓库
git status 查看暂存区状态
git reset HEAD 撤销暂存区内容
got reset --hard HEAD^ 版本回退
git rm 删除文件,-f参数:强制操作
git mv 移动文件
ls 查看文件
git branch 查看分支
git branch 名字 创建分支
git branch -d 名字 删除分支
git checkout master/名字 切换组织/分支
git checkout -b 名字 创建并切换分支
git merge 名字 指定分支合并到当前分支
git merge --abort 合并冲突后,取消合并
git push origin dev 推送本地分支到远程
git push origin :sss 删除远程指定分支
cat 文件名 浏览文件内容
git log 查看日志, --oneline 查看单行, --graph点线图
git tag -a v1.0.0 -m ‘说明’ vi编辑模式,创建版本信息,’:wq’保存退出
git tag 查看历史版本
git show 版本 查看相应标签的版本信息
git push origin --tags/版本 推送 所有/指定 本地标签上去
git log --oneline --decorate --graph 查看标签信息
ssh-keygen -t rsa -C “2267638690@qq.com” 生成密钥
ssh -T git@github.com 验证远程仓库连接(若是码云要换地址)
git remote add origin git@github.com:lazy-mapping/git_house.git 关联远程仓库
git remote 查看当前远程仓库, -v参数,看权限
git remote rm 删除远程仓库
git clone 远程地址 拷贝仓库
文件要推到远程:要先pull拉,在推push
git pull origin master --allow-unrelated-histories
远程拉下来所有文件,会自动合并到本地。参数是把两段不相干的分支进行强行合并
git push origin 当前分支推送到origin主机的对应分支。
git push -u origin master 本地的master分支推送到origin主机,后面就可使用git push
git fecth origin branch1:branch2 从远程分支拉取数据,配合git merge使用,避免合并冲突
使用远程branch1分支在本地创建branch2(但不会切换到该分支),
如果本地不存在branch2分支, 则会自动创建一个新的branch2分支,
如果本地存在branch2分支, 并且是`fast forward’, 则自动合并两个分支, 否则, 会阻止以上操作
git diff --staged 查看 尚未/已经(staged) 暂存的文件的差异,–stat简单查看
git diff HEAD^ HEAD 比较上次提交commit和上上次提交

一个英文版的git命令大全
https://gitee.com/liaoxuefeng/learn-java/raw/master/teach/git-cheatsheet.pdf

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值