为什么 Gi t把 SVN 拍在了沙滩上!
点击“开发者技术前线”,选择“星标????”
在看|星标|留言, 真爱
来源丨云加社区
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
等,若要熟练掌握,还必须掌握 rebase
和 merge
的区别, fetch
和 pull
的区别等,除此之外,还有 cherry-pick
, submodule
, stash
等功能,仅是这些名词听着都很绕。
在易用性这方面,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 拍在了沙滩上!相关推荐
- 为什么 Git把 SVN拍在了沙滩上!
来源丨云加社区 segmentfault.com/a/1190000016865867 Git vs SVN Git 和 SVN 孰优孰好,每个人有不同的体验. 一.Git是分布式的,SVN是集中 ...
- 为什么Git把SVN拍在了沙滩上?
关注+星标公众号,不错过精彩内容 来源 | 云加社区 Git和SVN是大家都比较熟知的版本管理,近几年Git越来越受到大家的喜欢. 下面就来分享下关于Git和SVN的内容. Git vs SVN ...
- HTML5凭什么将Flash“拍死”在沙滩上?
放在最前面希望不会影响你的观看,文章很不错哦! 自己整理了一份2018最全面前端学习资料,从最基础的HTML+CSS+JS [炫酷特效,游戏,插件封装,设计模式]到移动端HTML5的项目实战的学习资料 ...
- 国产IT彪起来了,后浪要将前浪拍死在沙滩上
浪潮在广州浪潮服务器存储全国合作伙伴大会中再一次自信发声:2016年将继续保持中国服务器市场第一,存储进入中国市场前五. 作为去IOE和国产化的受益者,浪潮等国产厂商曾经受到不少质疑,国产服务器,能够 ...
- 那些编程语言中的“后浪”都怎么样了:Swift 成功把“前浪”拍在沙滩上
Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者 | oschina 来源 | 开源中国 近日, ...
- 又拍云使用ajax 上传
在又拍云官网,没有提供js的demo,只有node.js,和其他的,而现在又有通过 js来上传文件到又拍云的服务器,不能通过自己的服务器进行中转操作,这样会耗费自己的服务器的带宽. 上代码吧,这个代码 ...
- Git怎么把SVN拍在沙滩上的?
Git和SVN是大家都比较熟知的版本管理,近几年Git越来越受到大家的喜欢. 下面就来分享下关于Git和SVN的内容. ---------------------------------------- ...
- 解决SVN提交代码撤回---恢复上个版本(回滚)
在提交代码难免回出现一些问题 想想把提交更新代码从svn上撤回来 1在提交代码的目录上打开 日志 2找到自己提交的代码版本 右击(回滚) 截图 截不到拍了张照凑合着看吧 这样就能 把提交的代码 回滚回 ...
- 【SVN】在阿里云上创建svn服务器
1.创建用户及相关设置 阿里云搭建ubuntu18.04工作台,默认只有root超级用户.为了安全起见,我们使用普通用户来创建svn: useradd hello // 创建用户hello mkdir ...
最新文章
- 密歇根大学28页最新《GANs生成式对抗网络综述:算法、理论与应用》最新论文,带你全面了解GAN技术趋势...
- JBOSS的管理员账号和密码设定
- 操作系统常用调度算法
- P2048 [NOI2010] 超级钢琴(RMQ 贪心)
- 条件信息熵的决策表约简
- mysql ddl 进度_MySQL5.7 慢查询+DDL操作堵塞查询
- python字符串转换为数字_Python不使用int()函数把字符串转换为数字的方法
- 16.卷2(进程间通信)---Sun RPC
- 【自动化__GUI自动化】__java__模拟功能操作__鼠标
- ckplayer ajax,旋风解析
- cefsharp设置cookie_CefSharp 设置cookie
- 计算机桌面word不见怎么办,电脑桌面word 电脑桌面上word不见了怎么办
- 在 CSDN 官宣了,二哥要和华为大佬一起创业了!也许以后洛阳的小伙伴回乡又多了一个选择!
- Git:Terminal is dumb, but EDITOR unset
- Win10下C:\Users\***修改用户名(完全修改)
- windows录屏_电脑录屏软件哪个好用?试试这个专业方法
- 集合框架--集合框架体系概述
- Maven环境配置(本文以“apache-maven-3.8.2”的安装配置为例)
- 支付宝蚂蚁庄园线下支付链接,支付宝蚂蚁庄园线下支付地址
- 鸿蒙系统分享----软件驱动使用JS控制LED灯实验方法
热门文章
- 计算机应用期刊投稿四天到终审,sci投稿到见刊时间
- unity android全景视频播放,Unity VR——全景视频播放方案
- mplus 软件_多水平数据分析:R、Mplus和 HLM 应用对比
- 虚幻引擎在游戏之外可以做什么呢?
- 航天信息计算机设备如何入账,航天信息发票全额抵扣如何做账?
- Centos配置nginx代理上网
- 基于matlab的信号能量检测算法仿真
- 钣金系统三维设计与工艺展开功能的实现
- 【PyTorch问题】CUDA out of memory. Tried to allocate 4.69 GiB (GPU 0; 8.00 GiB total capacity...略
- 驾驶课——连续障碍,直角转弯和坡道定点停车