点击“开发者技术前线”,选择“星标????”

在看|星标|留言,  真爱

来源丨云加社区

segmentfault.com/a/1190000016865867

 Git vs SVN 

Git 和 SVN 孰优孰好,每个人有不同的体验。

一、Git是分布式的,SVN是集中式的

这是 Git 和 SVN 最大的区别。若能掌握这个概念,两者区别基本搞懂大半。因为 Git 是分布式的,所以 Git 支持离线工作,在本地可以进行很多操作,包括接下来将要重磅推出的分支功能。而 SVN 必须联网才能正常工作。

二、Git复杂概念多,SVN简单易上手

所有同时掌握 Git 和 SVN 的开发者都必须承认,Git 的命令实在太多了,日常工作需要掌握 add, commit, status, fetch, push, rebase等,若要熟练掌握,还必须掌握 rebasemerge的区别, fetchpull的区别等,除此之外,还有 cherry-picksubmodulestash等功能,仅是这些名词听着都很绕。

在易用性这方面,SVN 会好得多,简单易上手,对新手很友好。但是从另外一方面看,Git 命令多意味着功能多,若我们能掌握大部分 Git 的功能,体会到其中的奥妙,会发现再也回不去 SVN 的时代了。

三、Git分支廉价,SVN分支昂贵

在版本管理里,分支是很常使用的功能。在发布版本前,需要发布分支,进行大需求开发,需要 feature 分支,大团队还会有开发分支,稳定分支等。在大团队开发过程中,常常存在创建分支,切换分支的需求。

Git 分支是指针指向某次提交,而 SVN 分支是拷贝的目录。这个特性使 Git 的分支切换非常迅速,且创建成本非常低。

而且 Git 有本地分支,SVN 无本地分支。在实际开发过程中,经常会遇到有些代码没写完,但是需紧急处理其他问题,若我们使用 Git,便可以创建本地分支存储没写完的代码,待问题处理完后,再回到本地分支继续完成代码。


 Git核心思想 

Git 最核心的一个概念就是工作流

  • 工作区(Workspace) 是电脑中实际的目录。

  • 暂存区(Index) 类似于缓存区域,临时保存你的改动。

  • 仓库区(Repository),分为本地仓库和远程仓库。

从 SVN 切换到 Git,最难理解并且最不能理解的是暂存区和本地仓库。熟练使用 Git 后,会发现这简直是神设计,由于这两者的存在,使许多工作变得易管理。

通常提交代码分为几步:

  • git add 从工作区提交到暂存区

  • git commit 从暂存区提交到本地仓库

  • git push或 git svn dcommit 从本地仓库提交到远程仓库

一般来说,记住以下命令,便可进行日常工作了(图片来源于网络):


 Git-SVN常用命令 

看到Git-SVN不要懵!是的,在Git中甚至有命令可以直接和SVN进行桥接,Git 中所有与SVN桥接的基础命令就是 git svn

若服务器使用的 SVN,但是本地想要体验 Git 的本地分支,离线操作等功能,可以使用 Git-SVN功能。

常用操作如下(图片来源于网络):

# 下载一个 SVN 项目和它的整个代码历史,并初始化为 Git 代码库
$ git svn clone -s [repository]
# 查看当前版本库情况
$ git svn info
# 取回远程仓库所有分支的变化
$ git svn fetch
# 取回远程仓库当前分支的变化,并与本地分支变基合并
$ git svn rebase
# 上传当前分支的本地仓库到远程仓库
$ git svn dcommit
# 拉取新分支,并提交到远程仓库
$ svn copy [remote_branch] [new_remote_branch] -m [message]
# 创建远程分支对应的本地分支
$ git checkout -b [local_branch] [remote_branch]

 初 始 化 

从本节开始,除特殊说明,以下命令均适用于 Git 与 Git-SVN。

# 在当前目录新建一个Git代码库
$ git init
# 下载一个项目和它的整个代码历史 [Git only]
$ git clone [url]

 配    置 

# 列举所有配置
$ git config -l
# 为命令配置别名
$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.st status
$ git config --global alias.br branch
# 设置提交代码时的用户信息
$ git config [--global] user.name "[name]"
$ git config [--global] user.email "[email address]"

Git 用户的配置文件位于 ~/.gitconfig

Git 单个仓库的配置文件位于 ~/$PROJECT_PATH/.git/config


 增删文件 

# 添加当前目录的所有文件到暂存区
$ git add .
# 添加指定文件到暂存区
$ git add <file1> <file2> ...
# 添加指定目录到暂存区,包括其子目录
$ git add <dir>
# 删除工作区文件,并且将这次删除放入暂存区
$ git rm [file1] [file2] ...
# 停止追踪指定文件,但该文件会保留在工作区
$ git rm --cached [file]
# 改名文件,并且将这个改名放入暂存区
$ git mv [file-original] [file-renamed]

把文件名 file1 添加到 .gitignore 文件里,Git 会停止跟踪 file1 的状态。


 分   支 

# 列出所有本地分支
$ git branch
# 列出所有本地分支和远程分支
$ git branch -a
# 新建一个分支,但依然停留在当前分支
$ git branch [branch-name]
# 新建一个分支,并切换到该分支
$ git checkout -b [new_branch] [remote-branch]
# 切换到指定分支,并更新工作区
$ git checkout [branch-name]
# 合并指定分支到当前分支
$ git merge [branch]
# 选择一个 commit,合并进当前分支
$ git cherry-pick [commit]
# 删除本地分支,-D 参数强制删除分支
$ git branch -d [branch-name]
# 删除远程分支
$ git push [remote] :[remote-branch]

 提   交 

# 提交暂存区到仓库区
$ git commit -m [message]
# 提交工作区与暂存区的变化直接到仓库区
$ git commit -a
# 提交时显示所有 diff 信息
$ git commit -v
# 提交暂存区修改到仓库区,合并到上次修改,并修改上次的提交信息
$ git commit --amend -m [message]
# 上传本地指定分支到远程仓库
$ git push [remote] [remote-branch]

 拉   取 

# 下载远程仓库的所有变动 (Git only)
$ git fetch [remote]
# 显示所有远程仓库 (Git only)
$ git remote -v
# 显示某个远程仓库的信息 (Git only)
$ git remote show [remote]
# 增加一个新的远程仓库,并命名 (Git only)
$ git remote add [remote-name] [url]
# 取回远程仓库的变化,并与本地分支合并,(Git only), 若使用 Git-SVN,请查看第三节
$ git pull [remote] [branch]
# 取回远程仓库的变化,并与本地分支变基合并,(Git only), 若使用 Git-SVN,请查看第三节
$ git pull --rebase [remote] [branch]

 撤   销 

# 恢复暂存区的指定文件到工作区
$ git checkout [file]
# 恢复暂存区当前目录的所有文件到工作区
$ git checkout .
# 恢复工作区到指定 commit
$ git checkout [commit]
# 重置暂存区的指定文件,与上一次 commit 保持一致,但工作区不变
$ git reset [file]
# 重置暂存区与工作区,与上一次 commit 保持一致
$ git reset --hard
# 重置当前分支的指针为指定 commit,同时重置暂存区,但工作区不变
$ git reset [commit]
# 重置当前分支的HEAD为指定 commit,同时重置暂存区和工作区,与指定 commit 一致
$ git reset --hard [commit]
# 新建一个 commit,用于撤销指定 commit
$ git revert [commit]
# 将未提交的变化放在储藏区
$ git stash
# 将储藏区的内容恢复到当前工作区
$ git stash pop

 查   询 

# 查看工作区文件修改状态
$ git status
# 查看工作区文件修改具体内容
$ git diff [file]
# 查看暂存区文件修改内容
$ git diff --cached [file]
# 查看版本库修改记录
$ git log
# 查看某人提交记录
$ git log --author=someone
# 查看某个文件的历史具体修改内容
$ git log -p [file]
# 查看某次提交具体修改内容
$ git show [commit]

END

后台回复“电子书” “资料” 领取一份干货,数百技术电子书等你

开发者技术前线 ,汇集技术前线快讯和关注行业趋势,大厂干货,是开发者经历和成长的优秀指南。

历史推荐

用 Python 给全球女神颜值排个序

2020年必学的 10 大算法

程序员喜欢的 5 款最佳最牛代码比较工具

10个实用精美的 VS Code 插件,非常强势!

别乱提交代码了,看下大厂 Git 提交规范是怎么做的!


http://www.taodudu.cc/news/show-3216733.html

相关文章:

  • 数据解析之xpath解析
  • 延时执行函数:前浪死在沙滩上
  • 读书之一--《程序员修炼之道》
  • 周涛:在大数据沙滩上捡拾“珍珠”|奋斗者正青春
  • 夜子:我在澳大利亚做Andriod, 阳光沙滩美女
  • Git怎么把SVN拍在沙滩上的?
  • css 插件 兼容flex,CSS之flex兼容
  • 【数学之美】你知道一根绳子有多长吗?
  • 浪潮编程题python石头排序_数分 | 沙滩排石头-浪潮提前批笔试 Java、C++、Python
  • MySQL中的子查询,最好最全的子查询分类
  • 为什么Git把SVN拍在了沙滩上?
  • win10电脑屏幕变成紫色
  • chrome按F12后的Elements摸元素出现紫色箭头是什么
  • Android Studio的button背景颜色都是紫色无法修改
  • 关于Android Studio Button背景无法修改,一直呈现亮紫色
  • 关于android button按键紫色
  • unity项目打开是紫色
  • ubuntu16.04登录后一直卡在紫色界面的解决方案
  • idea 绿叶子yml配置文件图标变成紫色,编写没有提示
  • VSCODE的底部状态栏为什么是紫色
  • Unity 在web上材质显示正常,但是unity端材质显示为紫色
  • iOS开发·紫色感叹号
  • 用 Python Turtle画图学习(紫色樱花树) 附源代码
  • 法线贴图呈蓝紫色的原因
  • Unity使用ShaderGraph,设置SRP的RenderPipelineAsset后,原有材质显示紫色的问题
  • 解决ubuntu启动在紫色界面冻结
  • ubuntu 20.04 更改第一次登录紫色背景(终于有办法修改啦!!!)
  • 【Android】Android学习之按钮变成蓝紫色
  • Ubuntu紫色背景颜色代码
  • 【iOS紫色警告】GPUImage启动摄像头耗时

为什么 Gi t把 SVN 拍在了沙滩上!相关推荐

  1. 为什么 Git把 SVN拍在了沙滩上!

    来源丨云加社区 segmentfault.com/a/1190000016865867  Git vs SVN  Git 和 SVN 孰优孰好,每个人有不同的体验. 一.Git是分布式的,SVN是集中 ...

  2. 为什么Git把SVN拍在了沙滩上?

    关注+星标公众号,不错过精彩内容 来源 | 云加社区 Git和SVN是大家都比较熟知的版本管理,近几年Git越来越受到大家的喜欢. 下面就来分享下关于Git和SVN的内容.  Git vs SVN  ...

  3. HTML5凭什么将Flash“拍死”在沙滩上?

    放在最前面希望不会影响你的观看,文章很不错哦! 自己整理了一份2018最全面前端学习资料,从最基础的HTML+CSS+JS [炫酷特效,游戏,插件封装,设计模式]到移动端HTML5的项目实战的学习资料 ...

  4. 国产IT彪起来了,后浪要将前浪拍死在沙滩上

    浪潮在广州浪潮服务器存储全国合作伙伴大会中再一次自信发声:2016年将继续保持中国服务器市场第一,存储进入中国市场前五. 作为去IOE和国产化的受益者,浪潮等国产厂商曾经受到不少质疑,国产服务器,能够 ...

  5. 那些编程语言中的“后浪”都怎么样了:Swift 成功把“前浪”拍在沙滩上

    Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者 | oschina 来源 | 开源中国 近日, ...

  6. 又拍云使用ajax 上传

    在又拍云官网,没有提供js的demo,只有node.js,和其他的,而现在又有通过 js来上传文件到又拍云的服务器,不能通过自己的服务器进行中转操作,这样会耗费自己的服务器的带宽. 上代码吧,这个代码 ...

  7. Git怎么把SVN拍在沙滩上的?

    Git和SVN是大家都比较熟知的版本管理,近几年Git越来越受到大家的喜欢. 下面就来分享下关于Git和SVN的内容. ---------------------------------------- ...

  8. 解决SVN提交代码撤回---恢复上个版本(回滚)

    在提交代码难免回出现一些问题 想想把提交更新代码从svn上撤回来 1在提交代码的目录上打开 日志 2找到自己提交的代码版本 右击(回滚) 截图 截不到拍了张照凑合着看吧 这样就能 把提交的代码 回滚回 ...

  9. 【SVN】在阿里云上创建svn服务器

    1.创建用户及相关设置 阿里云搭建ubuntu18.04工作台,默认只有root超级用户.为了安全起见,我们使用普通用户来创建svn: useradd hello // 创建用户hello mkdir ...

最新文章

  1. 密歇根大学28页最新《GANs生成式对抗网络综述:算法、理论与应用》最新论文,带你全面了解GAN技术趋势...
  2. JBOSS的管理员账号和密码设定
  3. 操作系统常用调度算法
  4. P2048 [NOI2010] 超级钢琴(RMQ 贪心)
  5. 条件信息熵的决策表约简
  6. mysql ddl 进度_MySQL5.7 慢查询+DDL操作堵塞查询
  7. python字符串转换为数字_Python不使用int()函数把字符串转换为数字的方法
  8. 16.卷2(进程间通信)---Sun RPC
  9. 【自动化__GUI自动化】__java__模拟功能操作__鼠标
  10. ckplayer ajax,旋风解析
  11. cefsharp设置cookie_CefSharp 设置cookie
  12. 计算机桌面word不见怎么办,电脑桌面word 电脑桌面上word不见了怎么办
  13. 在 CSDN 官宣了,二哥要和华为大佬一起创业了!也许以后洛阳的小伙伴回乡又多了一个选择!
  14. Git:Terminal is dumb, but EDITOR unset
  15. Win10下C:\Users\***修改用户名(完全修改)
  16. windows录屏_电脑录屏软件哪个好用?试试这个专业方法
  17. 集合框架--集合框架体系概述
  18. Maven环境配置(本文以“apache-maven-3.8.2”的安装配置为例)
  19. 支付宝蚂蚁庄园线下支付链接,支付宝蚂蚁庄园线下支付地址
  20. 鸿蒙系统分享----软件驱动使用JS控制LED灯实验方法

热门文章

  1. 计算机应用期刊投稿四天到终审,sci投稿到见刊时间
  2. unity android全景视频播放,Unity VR——全景视频播放方案
  3. mplus 软件_多水平数据分析:R、Mplus和 HLM 应用对比
  4. 虚幻引擎在游戏之外可以做什么呢?
  5. 航天信息计算机设备如何入账,航天信息发票全额抵扣如何做账?
  6. Centos配置nginx代理上网
  7. 基于matlab的信号能量检测算法仿真
  8. 钣金系统三维设计与工艺展开功能的实现
  9. 【PyTorch问题】CUDA out of memory. Tried to allocate 4.69 GiB (GPU 0; 8.00 GiB total capacity...略
  10. 驾驶课——连续障碍,直角转弯和坡道定点停车