新公司还是使用SVN,一怒之下写了这篇保姆级小白教程!

2023-12-25 01:58

本文主要是介绍新公司还是使用SVN,一怒之下写了这篇保姆级小白教程!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

现在一般开发都是协同开发了,所以会用到版本控制系统,说白了就是大家一起开发一个项目,分别写不同的代码,然后需要把代码汇总到一起,大家可能互相需要对方写的代码,就是大家共同去写一套代码,这就是需要版本控制系统,把大家写的代码存放到一个地方,相当于一个备份服务器!

主流的版本控制系统,现在来说,就是Git和SVN了,而且Git似乎更加流行,当然也有很多公司使用SVN,我目前经历的几家公司都是在使用SVN,所以本篇文章就来详细的介绍那些你需要会的,在工作中经常用到的SVN技巧与使用!

首先看看啥是SVN

以下是百度百科的解释:

SVN是subversion的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。

如果你还是有点不了解,建议多去百度搜搜,比如你可以这样搜索:“什么是SVN”,建议多看看百度百科和维基百科之类的,上面说的还是比较详细的!

要用它就得安装它

先来说Windows上的安装,简单来说说,我们要使用SVN的话就需要安装一个客户端,好比你要听音乐的话就需要安装一个音乐软件在电脑上,当然,你可以选择安装qq音乐或者是网易云音乐!

那么SVN的话也是有版本可以选择的,在Windows上的话就事小乌龟,这是这个客户端的别名,人家叫做“TortoiseSVN”,因为Tortoise是乌龟的意思,所以就叫做小乌龟了,你看看它的图标:

小乌龟
可以吧,是不是很可耐,我们要下载它:https://tortoisesvn.net/downloads.html

下下安装

根据自己的电脑情况,选择安装即可!

这里有些需要注意的地方:

在这里插入图片描述

选择这个就行,另外在上面选择安装下载哪个版本之后,在跳出来的页面记得选择左下角的accept,然后等待下载,如果长时间没有下载可以手动点击页面上面第一行的链接,仔细看,那段英文还是可以看懂的,我这里就不贴图了。

如果你需要使用命令行的话,这里可以选择上:

在这里插入图片描述
然后一路next即可!然后安装之后,你在电脑上随便找一个文件夹右键出现这个就代表安装成功:

在这里插入图片描述
然后你也可以在操作:

在这里插入图片描述
这也代表是ok的!另外说一点啊,这个安装之后都是英文的,其实可以安装中文简体语言,但是嘞,我觉得还是用英文吧,真的,能用英文不要使用中文,咱可是高大上的程序员啊!

安装之后,搞起,看看怎么使用

上面都是准备工作,现在搞好了,怎么使用嘞,咱们一起来看看!

svn是个中心化的东西

啥意义嘞,就是说svn是有一个服务中心的,总的代码就在这个服务中心上,然后其他各个电脑上的客户端可以链接到这个中心,从而可以从中心拉取代码以及提交代码,画个图大概就是这样的:

在这里插入图片描述
所以啊,一般如果你们是使用svn协同开发的话,你们就会有中心服务代码,这个是你不需要管的,你只需要在你的电脑上安装好svn客户端就行了,上述已经告诉你如何安装了。

可能有些人比较好奇,这个服务中心是啥在哪啊,这个一般就是svn服务器,也是需要搭建的,可以本地搭建,也可以远程搭建,公司一般就是远程大家,大家一起食使用了,这个大家感兴趣,我到时候可以另外写一篇教大家如何搭建svn服务器!

开始拉取代码吧(第一个重点)

一切准备就绪,你的本地上也安装了svn客户端,这个时候啊,就会有个人给你svn服务器的一个项目地址,比如以我本地搭建的svn服务器地址为例,给你看看,是这个样子的:

在这里插入图片描述
比如说,这里要让你参与simplejava项目的开发,这个时候就会给你衣蛾地址:

https://LAPTOP-GO8995UD:8443/svn/SVNdemo-ithuangqing/simplejava

然后还会给你分配一个用户名和密码:

username: user1 password: user1

拿到这些之后,你就可以拉取代码了,首先你先想想你要把拉取下来的代码放在哪里,比如桌面上,可以新建一个文件夹比如叫做“project”

在这里插入图片描述
然后打开这个文件夹,接着右键出现这个,点击这个:

在这里插入图片描述

点击之后就会弹出这个窗口:

在这里插入图片描述
这里意思就是你要连接svn服务中心了,但是也不能随便连啊,需要用户名和密码,这个是给过你的,我们填写上去,注意这里的左下角,是否记住密码:

在这里插入图片描述
这样就拉取成功了,但是你看看拉取下来的代码,我们服务中心上这个项目叫做simplejava,其实我也想拉取下来就是这个simplejava,这样拉取下来的都是项目中的文件,怎么办?

其实可以这样做:

在这里插入图片描述
我们点击这个Choose items,可以看到我们要拉取得这个项目得内容,这个时候我们可以把这个项目名称去掉,也就是专这样:

在这里插入图片描述
这样就可以看到更广的一面,然后选择我们要拉取得那个项目,然后ok,拉去下来就是这样得了

在这里插入图片描述

权限问题

但是这样真的可以嘛?答案是有的时候还真不可以,比如我们再试一次:

在这里插入图片描述
好,这个没问题,我们再试着看看上一级:

在这里插入图片描述
吆喝,不行了,这是咋回事,其实也好理解啊,人家总体得代码也不能说你想看就想看啊,让你做啥就做啥得了,不是你做的项目你看的全力都没有,所以啊这里是有权限的,你看看服务中心这些:

在这里插入图片描述
这里每一个文件夹其实都是可以分配权限的,也就是说,让你参与进来开发,会给你创建一个属于你的账户,但是你的账户是有读写权限的,有些你可以看,而有些你是看不了的。

所以,有的时候拿到账户和地址之后,发现出现问题,拉去不到代码,那就问问是不是权限没给你开,有的时候还真的是权限没开,我就碰到过。

制语如何设置权限啥的,这是svn服务器这块的知识,咱这里先不涉及,等咱聊到svn服务器搭建的时候再说吧!

那你可能要问了,我看不到那咋办啊,简单啊,自己在本地先创建项目文件夹,比如要拉取simplejava,就先创建一个呗,然后再拉取,一样的:

在这里插入图片描述

好啦,写写代码,咱也提交吧

那以上准备工作搞定之后,你就该写代码啦,来来,打开咱拉取的代码:

在这里插入图片描述
我们看到里面就一个Java类,来来,咱给他修改修改:

public class Test1 {public static void main(String[] args) {System.out.println("欢迎学习svn!");System.out.println("大家好,我是用户user1");}
}

可以吧,ok,现在咱也写代码上去了,接下来看看变化:

在这里插入图片描述
看看,这里出现红感叹号,难道是错误?其实不是的,这里代表代码有改变了,毕竟你新增加了代码嘛,接下来就把自己新增加的代码提交上去吧,可以这样操作:
在这里插入图片描述
右键需要提交的文件,然后点击commit,弹出如下框框

在这里插入图片描述
然后就ok了,看一下,是不是又变回绿色了。

增加一个新东西

可以吧,第一次提交,很有成就感,接下来看看,假如说我们新增加了一个Java类嘞,来来,写一个:

在这里插入图片描述
这里我们创建了一个新的User类,其实吧,被svn管理起来之后,就会再文件上面显示相对应得表示,比如正常得java文件上面显示一个绿色的勾号,但是吧,有的时候这玩意会出现问题,比如这新增加的一个文件应该在上面显示一个蓝色的问号,大致的标识是这样(对于Java文件来说)

在这里插入图片描述
要记住了,新增加的一个文件属于未知文件,我们需要把它添加进我们的版本库:

在这里插入图片描述
添加进来之后就被识别了

在这里插入图片描述
是一个蓝色的+号,接着我们就可以把它提交了

在这里插入图片描述

提交步骤和上面的类似
在这里插入图片描述

我想删除一个文件,怎么搞

有的时候可能需要删掉一个文件,就比如把刚才创建的User给删除了,我们可以这样做:

在这里插入图片描述

这个时候你删除之后,突然后悔了怎么搞?你使劲的按键盘上的Ctrl+Z,好像没什么卵用,你需要这样操作:

在这里插入图片描述
记住,是点击空白处,不过你如果真的想删除的话,当你上述操作删除之后,其实再服务中心上的文件还是没有删除,你还需要进行提交,点击空白处,选择提交:

在这里插入图片描述
这个时候就成功删除啦!

我怎么提交不上去啊(更新代码)

我们使用svn是进行协同开发,也就是说这些代码并不是只有你自己在写,其他人也在写,比如别人对Test1进行了修改,比如这样:

public class Test1 {public static void main(String[] args) {System.out.println("欢迎学习svn!");System.out.println("大家好,我是用户user1");System.out.println("大叫好,我是用户ithuangqing");}
}

你看,这是另外一个人添加的新代码,这时候你再看看你的代码,你的还是这样的:

public class Test1 {public static void main(String[] args) {System.out.println("欢迎学习svn!");System.out.println("大家好,我是用户user1");}
}

比如,你开始修改这个代码:

public class Test1 {public static void main(String[] args) {System.out.println("欢迎学习svn!");System.out.println("大家好,我是用户user1,好好学习天天向上!");}
}

然后你也开始提交,但是你看

在这里插入图片描述
我去,报错了报错了,肿么办?来,先翻译一句英文:
在这里插入图片描述
知道咋回事不,就是服务器上的代码改变了,你这里不是最新的,你需要更新一下,那就更新一下:

在这里插入图片描述
然后再看看更新下来的代码:

public class Test1 {public static void main(String[] args) {System.out.println("欢迎学习svn!");System.out.println("大家好,我是用户user1,好好学习天天向上!");System.out.println("大叫好,我是用户ithuangqing");}
}

看,是不是有用户ithuangqing添加的代码了,然后提交吧,这下就保证成功了的!

我去,冲突是咋回事

协同开发肯定会遇到的一个问题就是冲突了,一般的话就是你和别人修改了同样位置上的代码,来看个例子:

首先别人修改了这行代码:

public class Test1 {public static void main(String[] args) {System.out.println("欢迎学习svn!");System.out.println("大家好,我是用户user1,好好学习天天向上!-- 别学了,学不会的,哈哈");System.out.println("大叫好,我是用户ithuangqing");}
}

然后你也修改了这行代码:

public class Test1 {public static void main(String[] args) {System.out.println("欢迎学习svn!");System.out.println("大家好,我是用户user1,好好学习天天向上!真难啊");System.out.println("大叫好,我是用户ithuangqing");}
}

这里你需要捋一下,就是上面人家已经修改了这段代码,并且提交上去了,你这里没有先更新,而是直接修改了代码,然后你开始提交,发现这个错误:

在这里插入图片描述
这个问题之前说过了,那就去更新呗,结果:

在这里插入图片描述
这就出现冲突了,其实也好理解,你俩都去修改这段代码,人家的已经提交上去,你去更新,相当于把服务器上的这行代码拉去下来,然后发现你也修改了,那完犊子了,谁修改的是对的呢?应该留下哪个呢?

这时候就需要解决冲突了,这个时候你再看文件:

在这里插入图片描述
这都是啥玩意?这是因为出现冲突了,需要你解决冲突,怎么解决嘞?我们打开源文件看看:

在这里插入图片描述
这个时候就需要你处理,该留下哪段代码,这个是需要和别人商量的,看看是哪里出问题了,一起看下最终决定六留下哪段代码,比如最终你自己的修改是对的,那就把这些删除掉:

在这里插入图片描述
然后就成这样了:

在这里插入图片描述
然后你再看这些文件:

在这里插入图片描述
不是已经解决了冲突了嘛?是的,你是解决了冲突,但是你没有告诉svn啊,你得给svn说声冲突解决了,这样操作:

在这里插入图片描述
然后这个:

在这里插入图片描述
点就ok就彻底解决冲突啦:

在这里插入图片描述
冲突解决了之后,你就可以正常提交你的修改啦!(之前提交不成功,需要更新,更新遇到了冲突,解决冲突之后,再次提交就没问题啦)

查看日志

日志这个玩意,在以后的开发中务必引起重视,在这个svn里面,我们也是可以查看日志的,比如我们查看这个类的日志:

在这里插入图片描述
在这里可以看到自己和他人对这个文件的一些修改。

版本回滚需要重视

这个功能也是使用比较多的,但是刚开始的话会觉得有点摸不着头脑,比如我们在写代码的时候,后来发现自己写的代码有问题,结果已经提交上去了,别人拉取咱的代码,那肯定出问题啊,怎么搞,这个时候咱们就可以使用版本回滚,来看看具体怎么操作。

比如现在我们需要写个功能,这样写的:

在这里插入图片描述

然后我们也提交上去了,咋整,后悔了,能不能时光倒流,人家更新代码的话,会更新到我的错误代码,你看看人家原来是这样的:
在这里插入图片描述
然后人家更新了下,就是这样的:

在这里插入图片描述
啪啪打脸啊,不行,我得把自己的错误代码干掉,怎么搞嘞,那就是版本回滚,看着:

在这里插入图片描述
然后选择需要回滚的版本:

在这里插入图片描述
然后你再看,其实之前的错误代码已经没有了。

注意注意注意!

当你写了错误的代码提交上去之后,别人更新会更新到你的代码,但是这个时候可能只有你知道这段代码有问题,而你想重新写,那就像上面那样,你进行版本回滚,之前的错误代码都没了,你可以重新写,但是,别人现在更新还是会得到你之前的错误代码。

所以这个时候你需要commit一下,把svn服务器上的提交的错误代码也恢复到原来的版本,记住回滚之后需要提交一下!

如果你回滚之后没有commit,而是继续写正确的代码,就会是另外一种情况(不commit的话是没有真正回滚的,本地回滚,但是远程服务器没有),这个时候当你把正确的代码写完之后,提交上去的话,会提示你更新,你一旦更新,就会产生冲突,和你之前的错误代码冲突了,这个时候你需要解决冲突,留下正确的代码,然后更提交上去,这个时候别人再次更新就会得到你正确的代码了。

有没有更好的方式

以上那种回滚导致的错误是使用这种回滚方式:

在这里插入图片描述
实测中会出现回滚之后没有commit就写了新的代码,紧接着提交的时候会提示更新,更新会出现冲突,但是如果使用这种方式回滚:

在这里插入图片描述
即时回滚之后没有commit就写了新的正确的代码,再次commit提交依然可以完成,不会像上面那样,提示你更新,然后更新会出现冲突!

至于为什么会出现这样的情况,我没有深入的研究,后期如有需要会继续分享!

总结

关于svn的使用,对于一个刚入职初次使用svn的朋友来说已经够用了,主要的还是要明白一些操作概念,然后熟练掌握更新和提交,一般在写代码之前先更新一下,避免出现冲突,其他更多的就是在实际的使用中遇到新的问题再查资料或者请教他人快速解决,快速积累经验!

感谢阅读

大学的时候选择了自学Java,工作了发现吃了计算机基础不好的亏,学历不行这是没办法的事,只能后天弥补,于是在编码之外开启了自己的逆袭之路,不断的学习Java核心知识,深入的研习计算机基础知识,所有心得全部书写成文,整理成有目录的PDF,持续原创,PDF在公众号持续更新,如果你也不甘平庸,那就与我一起在编码之外,不断成长吧!

其实这里不仅有技术,更有那些技术之外的东西,比如,如何做一个精致的程序员,而不是“屌丝”,程序员本身就是高贵的一种存在啊,难道不是吗?

非常欢迎你的加入,未来的日子,编码之外,有你有我,一起做一个人不傻,钱很多,活得久的快乐的程序员吧!

回复关键字“PDF”,获取技术文章合集,已整理好,带有目录,欢迎一起交流技术!

另外回复“庆哥”,看庆哥给你准备的惊喜大礼包,只给首次关注的你哦!

任何问题,可以加庆哥微信:H653836923,另外,我有个交流群,我会***不定期在群里分享学习资源,不定时福利***,感兴趣的可以说下我邀请你!

对了,如果你是个Java小白的话,也可以加我微信,我相信你在学习的过程中一定遇到不少问题,或许我可以帮助你,毕竟我也是过来人了!

在这里插入图片描述

感谢各位大大的阅读🥰

这篇关于新公司还是使用SVN,一怒之下写了这篇保姆级小白教程!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/533897

相关文章

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield

Go语言使用select监听多个channel的示例详解

《Go语言使用select监听多个channel的示例详解》本文将聚焦Go并发中的一个强力工具,select,这篇文章将通过实际案例学习如何优雅地监听多个Channel,实现多任务处理、超时控制和非阻... 目录一、前言:为什么要使用select二、实战目标三、案例代码:监听两个任务结果和超时四、运行示例五

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

Python pandas库自学超详细教程

《Pythonpandas库自学超详细教程》文章介绍了Pandas库的基本功能、安装方法及核心操作,涵盖数据导入(CSV/Excel等)、数据结构(Series、DataFrame)、数据清洗、转换... 目录一、什么是Pandas库(1)、Pandas 应用(2)、Pandas 功能(3)、数据结构二、安

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do