Windows下版本控制器(SVN)-TortoiseSVN使用+权限配置+合并深度介绍+分支介绍

news2024/11/14 3:44:36

在这里插入图片描述

文章目录

  • 基础知识-Windows下版本控制器(SVN)
      • 3.4 TortoiseSVN使用
        • 3.4.1 SVN检出(SVN Checkout)
        • 3.4.2 SVN更新(SVN Update)
        • 3.4.3 **SVN**提交(SVN Commit)
        • 3.4.4 **SVN**还原(SVN Revert)
        • 3.4.5 解决文件冲突
        • 3.4.6 授权访问
        • 3.4.7 显示日志(Show log)
        • 3.4.8 版本库浏览(Repo-browser)
        • 3.4.9 TortoiseSVN更换或重置登录用户
        • 3.4.10 如何修改提交仓库地址
        • 3.4.11 TortoiseSVN中创建版本库和导入区别
        • 3.4.12 合并分支代码
          • TortoiseSVN有2种合并方式
          • 演示场景1:(合并一个版本范围 Merge a range of revisions)
          • 演示场景2:(合并两个不同的树 Merge two different trees),不设置主分支版本
          • 演示场景3:(合并两个不同的树 Merge two different trees),设置主分支版本
          • 结论总结:
        • 3.4.13 删除分支
        • 3.4.14 Import(导入)
        • 3.4.15 Add(加入)
        • 3.4.16 Revision Graph(版本分支图)
        • 3.4.17 Branch/Tag(分支/标记)
      • 3.5 权限配置
        • 3.5.1 单一版本库权限配置
        • 3.5.2 多版本库共享配置
      • 3.6 合并深度介绍
      • 3.7 分支介绍
  • 本人其他相关文章链接

基础知识-Windows下版本控制器(SVN)

3.4 TortoiseSVN使用

3.4.1 SVN检出(SVN Checkout)

在这里插入图片描述
在这里插入图片描述

3.4.2 SVN更新(SVN Update)

在这里插入图片描述
在这里插入图片描述

3.4.3 SVN提交(SVN Commit)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.4.4 SVN还原(SVN Revert)

指代项目版本回滚之前的某个版本

在这里插入图片描述
在这里插入图片描述
点击显示日志可以查看版本信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.4.5 解决文件冲突

在这里插入图片描述

选中冲突文件,鼠标右键选择“编辑冲突”

在这里插入图片描述

在下方进行复制编辑,最后点击“保存”即可。

在这里插入图片描述

在这里插入图片描述

到现在文件状态就已经变了

在这里插入图片描述

3.4.6 授权访问

总结:

  • 如果是匿名访问(就是不用输入用户名+密码的访问方式),请只开启anon-access = write
  • 如果授权访问,请先设置anon-access = none,然后打开3个:auth-access = write、password-db = passwd、authz-db = authz

注意:必须设置anon-access = none,否则会代码提交报错失败。

①要设置授权访问就需要创建用户,并为用户设定权限

打开授权访问的配置

[1]打开 D:\DevRepository\Subversion\CRM\conf\svnserve.conf (svnserve.conf文件: 核心配置文件)

在这里插入图片描述

在这里插入图片描述

[2]将第 19 行 anon-access = write 注释掉:# anon-access = write

表明该版本库不接受匿名访问

[3]将第 20 行# auth-access = write 注释打开:auth-access = write

表明该版本库使用授权访问

[4]将第 27 行注释打开:password-db = passwd

表明使用同目录下的 passwd 文件保存用户信息

[5]将第 36 行注释打开:authz-db = authz (authz文件: 权限认证相关)

[6]打开 passwd 文件创建用户 (passwd文件: 用户密码相关)

tom = 123456
jerry = 123456
nick = 123456
tester = 123456

在这里插入图片描述

[7]打开 authz 文件:#后面注释的是例子

在这里插入图片描述

[/]表示该仓库下的所有路径

[CRM:/oneLayer/1]中CRM为仓库名,表示该仓库下的“/oneLayer/1”路径

@developer= rw 表示developer该组的所有成员访问权限为可读可写,设置组权限需要用@符号表示,而直接设置用户权限则不需要添加@

[CRM:/oneLayer/1]

jerry = rw,表示jerry 用户只拥有CRM仓库下/oneLayer/1路径下的所有读写权限访问权限,而/oneLayer/1前面的路径则没有访问权限

*= 因为后面没有写访问权限,所以表示其他人没有访问权限

<1>创建用户组

[groups] 
# harry_and_sally = harry,sally 
# harry_sally_and_joe = harry,sally,&joe 
@developer = rw

<2>指定路径,给用户和用户组授权

# [/foo/bar] 
# harry = rw 
# &joe = r 
# * =屏蔽那些未设定的用户,让它们没有任何权限 
[/]
@developer = rw
tester = r
* =
[CRM:/oneLayer/1]
jerry = rw

[CRM:/oneLayer/2]
nick = rw

<3>权限的继承性:父目录设置的权限,对子目录同样有效——除非子目录进行 了更为具体的设定(这个没验证过,需博主自己验证下)

[/subDir] 
userOther = rw 
* = 

这个例子表示当前版本库下的 subDir 目录只有 userOther 有读写权限,其它用户 无任何权限

模拟登录tom用户,验证能否提交成功。答案是可以提交。

在这里插入图片描述

模拟登录测试用户tester,验证能否提交成功。答案是不可以提交,因为权限不够。

在这里插入图片描述

在这里插入图片描述

做一个小测验,需求:假设我的项目结构如图,假设每一个包含text.txt的文件夹都是一个真实的项目,且存在多层级结构,我现在想实现tom用户具有CRM路径(目前CRM路径就是SVN的某一仓库的根目录)下的所有读写访问权限,而jerry用户只CRM/oneLayer/1路径下的读写权限,而nick用户只有CRM/oneLayer/2路径下的读写权限,而tester测试用户只有读权限没有写权限。

  • 这个项目想模拟的就是新建的tom用户具有管理员权限,jerry和nick用户只有部分路径的访问读写权限,而测试用户只有读没有写的权限。对应的真实场景就是:我自己搭建了SVN,我自己创建管理员账户并授权,但是新建别的用户我想控制权限,让他们只有自己项目的访问权限,而别人的项目没有拉取代码的权限,想演练下如何实现。

在这里插入图片描述

  • 前提说明:目前CRM路径就是SVN的某一仓库的根目录,就是对应auth配置文件中的[/]

  • passwd文件

    tom = 123456
    jerry = 123456
    nick = 123456
    tester = 123456
    
  • auth文件

    [groups]
    # 控制新增用户权限
    [/]
    @developer = rw
    tester = r
    * =
    [CRM:/oneLayer/1]
    jerry = rw
    
    [CRM:/oneLayer/2]
    nick = rw
    
  • 演练场景1,验证tom用户能否checkout下载/CRM/oneLayer/1下的项目oneLayerProject,如图,答案是可以成功下载,说明它拥有/路径下的所有权限。

在这里插入图片描述

  • 演练场景2,验证nick用户能否checkout下载/CRM/oneLayer/2下的项目twoLayerProject,如图,答案是可以成功下载,说明它拥有/oneLayer/2路径下的所有权限。

在这里插入图片描述

  • 演练场景3,验证nick用户能否checkout下载/CRM/oneLayer/1下的项目oneLayerProject,如图,答案是不可以成功下载,说明它没有/oneLayer/1路径下的所有权限。

在这里插入图片描述

3.4.7 显示日志(Show log)

通过此功能可以查到谁,什么时候,对那个目录下的那些文件进行了那些操作,如下图:

在这里插入图片描述
在这里插入图片描述

3.4.8 版本库浏览(Repo-browser)

此功能是用来浏览需要查看的资料库,在本地文件夹下点击右键,选择TortoiseSVNàRepo-browser,在弹出的对话框中输入资料库地址,再输入用户名和密码,就能查看到你需要查看到版本库的内容,在这你还能看到那些文件被谁锁定了,如下图:

在这里插入图片描述

3.4.9 TortoiseSVN更换或重置登录用户

1,打开SVN的settings

在这里插入图片描述

2,找到Saved Data栏,右侧Authentication data项点击清除按钮clear

在这里插入图片描述

3,再次打开SVN,会要求输入username和password

在这里插入图片描述

3.4.10 如何修改提交仓库地址

如果项目提交地址编写不规范,想重新命名提交个新的地址,但是不用IDEA只用TortoiseSVN情况下如何操作

答案:可以打开“版本库浏览器”,在左侧的目录树中进行创建、移动目录即可。

在这里插入图片描述

在这里插入图片描述

3.4.11 TortoiseSVN中创建版本库和导入区别

  • 创建版本库:对于真实的项目,您将在安全的地方设置一个存储库,并使用Subversion服务器对其进行控制。每个项目都需要创建版本库,才会有.svn文件,才能将项目进行SVN管理(实际是相当于创建了个某一种分类类型的仓库,它里面可以存放很多路径的项目,比如版本库叫“CRM仓库”,那么该路径下存储客户关系管理系统相关的项目;如果版本库叫“粮食仓库”,那么该路径下存储粮食管理系统相关的项目)
  • 导入:就是将某些文件导入到已创建版本库中。

3.4.12 合并分支代码

需求:这里为了演练一种场景,我主分支trunk_V01创建一个新的开发分支trunk_V02,然后主分支和新分支一起开发不同通能,最后我要把trunk_V02新分支合并到主分支trunk_V01上,要求是主分支新创建的文件要存在,新分支trunk_V02新创建的文件也要存在,冲突的相同文件名内容解决冲突即可。

说明:主分支trunk_V01里面只有一个文件text.txt文件,内容如图,然后将依照当前主分支创建新分支命名叫trunk_V02

在这里插入图片描述

接下来模拟两个分支不同开发,主分支创建新文件trunk_V01_01.txt,并且修改text.txt内容,然后新分支trunk_V02创建新文件trunk_V01_02.txt,并且修改text.txt内容,项目目录如图1,主分支如图2,新分支如图3

在这里插入图片描述

如图1

在这里插入图片描述

如图2

在这里插入图片描述

如图3
TortoiseSVN有2种合并方式

TortoiseSVN有2种合并方式:

在这里插入图片描述

  • 合并一个版本范围 Merge a range of revisions:此类型应用最为广泛,主要是把分支中的修改合并到主干上来。在主干上点击右键选择合并,然后选择合并类型:合并一个范围的版本。合并的源URL填写的是要合并的分支的URL,待合并的版本范围如果为空,则指的是合并分支上所有的版本,即自从分支创建以来到分支当前最新版本的所有演变。如果只是选择其中一个版本,或者几个版本,那么就表示只是将制定的n个版本的变化合并到主干上。如果只是选择其中一个版本,那么表示只是选择那个版本的修改,之前或之后的修改将不被采纳。
  • 合并两个不同的树 Merge two different trees:此类型与前1种类型不同,第一种类型可以选择分支合并的版本,主干不能选择版本;而这种类型则是无论是主干还是分支都可以选择合并的版本,即可以选择过去的一个主干版本与分支的某个版本进行合并。合并的时候以选择的分支版本为主,如果选择的主干版本与分支版本有不同的地方,合并时主干部分将被放弃
    • 起始URL:选择主干目录的URL(应当和当前工作副本的URL一致,这个是所谓的合并点)。
    • 结束URL:选择要合并的分支的URL。
    • 起始和结束的版本:一般起始版本应当找到最后一次同步时的版本,如果从没有同步过(第一次合并),则选择创建分支时的版本,结束版本一般是最新版本,如果你不想将某些内容合并进主干的话,也可以选择一个合并点。
演示场景1:(合并一个版本范围 Merge a range of revisions)

演示场景1:(合并一个版本范围 Merge a range of revisions)

  1. 第一步,在文件夹trunk_V01点击右键“合并”

在这里插入图片描述

  1. 选择第一种合并类型

在这里插入图片描述

  1. 合并源url选择trunk_V01的地址,将要合并的修改版本范围选择所有版本

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 打开合并后的文件夹查看,最终效果是:text.txt冲突了但解决了冲突之后拥有全新的代码,主分支trunk_V01新创建的文件trunk_V01_01.txt依然存在,新分支trunk_V02新创建的文件trunk_V02_01.txt也存在。(即:最终效果正确,就是我们想要的)

在这里插入图片描述

演示场景2:(合并两个不同的树 Merge two different trees),不设置主分支版本

演示场景2:(合并两个不同的树 Merge two different trees),不设置主分支版本

  1. 重复上面的第一步
  2. 选择第2种合并类型

在这里插入图片描述

  1. 选择起始、结束url,版本都用最新的版本

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 打开合并后的文件夹查看,最终效果是:text.txt冲突了但解决了冲突之后拥有全新的代码,但主分支trunk_V01新创建的文件trunk_V01_01.txt被删除了,新分支trunk_V02新创建的文件trunk_V02_01.txt存在。(即:最终效果不正确,新分支的确实都存在,但主分支新创建的文件全丢了)

在这里插入图片描述

问题:思考为啥这种方式对导致主分支新创建的文件丢失?

答案:因为创建新分支trunk_V02的时候主版本只有text.txt文件,而trunk_V01_01.txt是主分支后面新开发创建的,在合并的时候由于主分支采用最新版本情况下导致合并的时候不认识,所以导致合并会删除它。而场景3由于设置了主分支版本号,就相当于合并代码的时候是从主分支在最开始刚创建新分支的时候版本进行合并的,因此主分支新创建的文件trunk_V01_01.txt会被保留。

(我用大白话再表述一遍:当前主分支trunk_V01版本号为1的时候,主分支trunk_V01只有text.txt文件,这时候创建的新分支trunk_V02版本号为2,这时候分别开发提交自己代码,主分支trunk_V01新创建trunk_V01_01.txt文件并提交此时版本号为3,新分支trunk_V02也新创建trunk_V02_01.txt文件并提交此时版本号为4,此时再进行合并代码的时候由于新分支trunk_V02是从主分支trunk_V01版本号为1时创建过来的,所以SVN只认识主分支上版本号为1之前的所有改动,即只认识text.txt文件,而后来的trunk_V01_01.txt文件是主分支trunk_V01新创建的,所以SVN不认识,这就导致合并的时候给它删了。即:所谓的分支版本合并,就是把两个分支设置版本号之前的所有改动给统一合并代码。)

在这里插入图片描述

演示场景3:(合并两个不同的树 Merge two different trees),设置主分支版本

演示场景3:(合并两个不同的树 Merge two different trees),设置主分支版本

  1. 重复上面的前两步
  2. 主分支版本设置为创建新分支trunk_V02时候的版本,具体方法可查看“版本分支图”,选中新分支trunk_V02文件夹点击右键“版本分支图”查看,可以查看起始版本是116,说明主分支当时的版本是115(即在主分支115版本时进行创建了新分支trunk_V02,所以第三步这里输入115)

在这里插入图片描述

在这里插入图片描述

  1. 选择起始、结束url,主分支版本进行设置,新分支采用最新的版本

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 打开合并后的文件夹查看,最终效果是:text.txt冲突了但解决了冲突之后拥有全新的代码,主分支trunk_V01新创建的文件trunk_V01_01.txt依然存在,新分支trunk_V02新创建的文件trunk_V02_01.txt也存在。(即:最终效果正确,就是我们想要的)

在这里插入图片描述

结论总结:

结论总结:

结论1:“合并一个版本范围”方式是默认合并方式。

结论2:“合并一个版本范围”方式相当于往主分支最新版本上面合代码,因为它不像第二种方式可以指定主分支版本号。

结论3:“合并两个不同树“方式相当于更细化的合并操作,可以分别指派主分支和新分支的版本号进行两两合并,效果更自由。

结论4:“合并一个版本范围”方式和“合并两个不同树且设置主分支版本”方式效果是一样的。

结论5:“合并两个不同树且不设置主分支版本”方式,那么最终的效果就是:如果选择的主干版本与分支版本有不同的地方,合并时主干部分将被放弃。(这就是为什么演练场景2时发现主分支丢文件了,被删除了。)

3.4.13 删除分支

假设我想删除copyCRM项目分支代码

  • 选中文件夹,鼠标右键打开“版本库浏览器”

在这里插入图片描述

在这里插入图片描述

  • 在“版本库浏览器”页面中选中文件夹,点击右键直接删除

在这里插入图片描述

3.4.14 Import(导入)

选择要提交到服务器的目录,右键选择TortoiseSVN----Import,系统弹出导入提示框,在URL of repository输入框中输入服务器仓库地址,在Import Message输入框中输入导入日志信息,点击确定,则文件导入到服务器仓库中。

3.4.15 Add(加入)

如果有多个文件及文件夹要提交到服务器,我们可以先把这些要提交的文件加入到提交列表中,要执行提交操作,一次性把所有文件提交,如图,可以选择要提交的文件,然后点击执行提交(SVN Commit),即可把所有文件一次性提交到服务器上。

3.4.16 Revision Graph(版本分支图)

查看文件的分支,版本结构,可以点击Revision Graph,系统以图形化形式显示版本分支。

3.4.17 Branch/Tag(分支/标记)

当需要创建分支,点击Branch/Tag,在弹出的提示框中,输入分支文件名,输入日志信息,点击确定,分支创建成功,然后可查看文件的版本分支情况。

3.5 权限配置

3.5.1 单一版本库权限配置

①要设置授权访问就需要创建用户,并为用户设定权限

②打开授权访问的配置
[1]打开 D:\DevRepository\Subversion\ERP\conf\svnserve.conf
[2]将第 19 行 anon-access = write 注释掉:# anon-access = write 或者放开写成anon-access = none

表明该版本库不接受匿名访问
[3]将第 20 行# auth-access = write 注释打开:auth-access = write

表明该版本库使用授权访问
[4]将第 27 行注释打开:password-db = passwd

表明使用同目录下的 passwd 文件保存用户信息

[5]将第 36 行注释打开:authz-db = authz

表明使用同目录下的 authz 文件保存权限信息
[6]打开 passwd 文件创建用户

userWrite01 = 123456 
userWrite02 = 123456 
userRead = 123456 
userOther = 123456

[7]打开 authz 文件:#后面注释的是例子
<1>创建用户组

[groups] 
# harry_and_sally = harry,sally 
# harry_sally_and_joe = harry,sally,&joe 
canWrite = userWrite01,userWrite02 

<2>指定路径,给用户和用户组授权

# [/foo/bar] 
# harry = rw 
# &joe = r 
# * =屏蔽那些未设定的用户,让它们没有任何权限 
[/] 
@canWrite = rw 
userRead = r 
* = 

<3>权限的继承性:父目录设置的权限,对子目录同样有效——除非子目录进行
了更为具体的设定

[/subDir] 
userOther = rw 
* = 

这个例子表示当前版本库下的 subDir 目录只有 userOther 有读写权限,其它用户 无任何权限 。

3.5.2 多版本库共享配置

在版本库根目录 D:\DevRepository\Subversion 下创建 commConf 目录
将未修改的 authz 和 passwd 文件拷贝到 commConf 目录下
修改需要设置权限的版本库的 svnserve.conf 文件

①password-db = …/…/commConf/passwd

②authz-db = …/…/commConf/authz
在 password 中创建用户

[users] 
# harry = harryssecret 
# sally = sallyssecret 
 
userERP = 123456
userOA = 123456 
userCRM = 123456

在 authz 中针对不同版本库为不同用户授予权限

# [repository:/baz/fuz] 
# @harry_and_sally = rw 
# * = r 
 
[ERP:/] 
userERP = rw 
* = 
 
[OA:/] 
userOA = rw 
* = 
 
[CRM:/] 
userCRM = rw 
* = 

3.6 合并深度介绍

在这里插入图片描述

  1. Working copy(工作副本):即你当前的工作目录,一般默认为这个选项;
  2. Recursively(递归):即你选择的目录的版本库,包括了其下面的子文件,子文件夹,包括子文件夹里面的内容;
  3. Direct children(直接子节点):即你选择的目录下面的文件,文件夹,但是不包括文件夹里面的子文件,子文件夹;
  4. Files in a folder(仅文件子节点):即你选择的目录下面的文件,但不包括文件夹,当然不包括的文件夹下面的所有内容也都不纳入合并范围;
  5. Only a folder(仅此项):没有任何合并内容。

总结:默认每次提交就选“工作副本”选项就可以的,其他的我没验证过效果。

3.7 分支介绍

大致分类为3种:trunk、branches、tags

  • trunk:主干,我们一般把项目提交到此文件夹里面,在trunk中开发。
  • branches:分支,我们一般把那些需要打分支,但是有可能会修改的项目代码,打分支到此目录。
  • tags:分支,我们一般把那些阶段性(如迭代各期)的项目代码,打分支到此目录。

本人其他相关文章链接

1.Windows下版本控制器(SVN) - 1、开发中的实际问题+2、版本控制简介
2.Windows下版本控制器(SVN)-验证是否安装成功+配置版本库+启动服务器端程序
3.Windows下版本控制器(SVN)-TortoiseSVN使用+权限配置+合并深度介绍+分支介绍
4.Windows下版本控制器(SVN)- 配置版本库
5.Windows下版本控制器(SVN)-启动服务器端程序
6.TortoiseSVN使用-授权访问
7.TortoiseSVN使用-TortoiseSVN更换或重置登录用户
8.TortoiseSVN使用-合并分支代码
9.TortoiseSVN使用-权限配置
10.TortoiseSVN使用-合并深度介绍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/464757.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中国社会科学院大学与美国杜兰大学金融管理硕士项目——找寻属于你的那道光

人生的路很长&#xff0c;再不舍过去&#xff0c;也要朝前走。总有一束光在闪耀&#xff0c;总有路在前方。让我们去找寻属于自己的光。这道光或明或暗&#xff0c;或远或近。给自己一个希望&#xff0c;它就是那一束光会撒在你身上&#xff0c;未来会一片灿烂。社科院与杜兰大…

什么是3D渲染,3D渲染在CG项目中为何如此重要?

随着科技的发展&#xff0c;现如今任何人都可以使用免费软件在个人计算机上创作 3D 图像&#xff0c;当然也有人对于专业 3D 艺术的创作方式及其相关工作流程存在一些误解&#xff0c;认为创建一个模型后&#xff0c;在上面放上材料和纹理&#xff0c;就可以立马得到一个漂亮的…

软件测试职业发展方向有哪些

随着人工智能时代的到来&#xff0c;IT行业受到了越来越多人的重视。软件测试作为把控软件质量必不可少的环节&#xff0c;其重要性可见一斑。 据第三方平台统计&#xff0c;北京软件测试工程师的平均薪资为16.2K&#xff0c;除了一线城市外&#xff0c;随着互联网行业逐渐下沉…

虹科新品 | 用于医疗应用的压力和气体流量传感器

ES Systems在创新MEMS方面拥有丰富的经验&#xff0c;设计了高质量和高性能的气体流量和压力传感器&#xff0c;由于其技术规格&#xff0c;出色的可靠性和有竞争力的价格&#xff0c;这些传感器在竞争产品中具有独特的品质。 Part.01 应用背景 众所周知&#xff0c;在医疗领域…

软件测试技术(五)软件测试流程

软件测试流程 软件测试流程如下&#xff1a; 测试计划测试设计测试执行 单元测试集成测试确认测试系统测试验收测试回归测试验证活动 测试计划 测试计划由测试负责人来编写&#xff0c;用于确定各个测试阶段的目标和策略。这个过程将输出测试计划&#xff0c;明确要完成的测…

freeswitch的任务引擎问题与解决方案

概述 freeswitch核心框架中有一个定时任务系统task&#xff0c;在开发过程中用来做一些延时操作和异步操作很方便。 我们在VOIP的呼叫流程中&#xff0c;经常会有一些对实时性要求没那么高的操作&#xff0c;或者会有阻塞流程的操作&#xff0c;我们都可以开启一个定时任务子…

【 Spring 事务 】

文章目录 一、为什么需要事务(简单回顾)二、MySQL 中的事务使⽤三、Spring 中事务的实现3.1 Spring 编程式事务(手动事务)3.2 Spring 声明式事务(自动事务)3.2.1 Transactional 作⽤范围3.2.2 Transactional 参数说明3.2.3 Transactional 不进行事务回滚的情况3.2.4 Transactio…

Android 使用Retrofit+协程实现超简单大文件下载并回显进度条

安卓自带的进度条弹窗过时了&#xff0c;这里简单创建一个进度条弹窗 在drawable文件夹创建progress_dialog_bg_style.xml一个圆角白色背景样式 <?xml version"1.0" encoding"utf-8"?> <shape xmlns:android"http://schemas.android.com…

IPTV系统架构的分析与研究

1 引言   IPTV业务是伴随着宽带互联网的飞速发展而兴起的一项新兴的互联网增值业务,它利用宽带互联网的基础设施&#xff0c;以家用电视机和电脑作为主要终端 &#xff0c;利用网络机顶盒(STB,Set -TopBox) &#xff0c;通过互联网协议来传送电视信号.提供包括 电视节 目在 内…

嵌入式51单片机05-中断与定时器系列

文章目录 中断与定时器一、中断系统与定时器1. 中断简单介绍2. 定时器简单介绍 二、中断系列代码1. 中断操作&#xff08;中断控制LED灯亮灭&#xff09;&#xff08;1&#xff09;仿真电路图&#xff08;2&#xff09;源代码&#xff08;3&#xff09;实验结果 2. 中断操作&am…

c++强制类型转换:

强制类型转换&#xff1a;1. const属性用const_cast。 案例&#xff1a; 说明&#xff1a;该变量可以将变量的const 的属性去掉。如该案例&#xff0c;转换后修改x的值是合法的。2. 基本类型转换用static_cast。 案例&#xff1a; 说明&#xff1a;一般用在(1)基本类型&#xf…

新黑马头条项目经验(黑马)

swagger (1)简介 Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务(API Documentation & Design Tools for Teams | Swagger)。 它的主要作用是&#xff1a; 使得前后端分离开发更加方便&#xff0c;有利于团队协作 接…

微服务知识

Spring Cloud Netfix&#xff1a;Eureka&#xff0c;Ribbon&#xff0c;Feign&#xff0c;Hystrix&#xff0c;Zuul | Gateway&#xff0c;Config Spring Colud Alibaba&#xff1a;Nacos&#xff0c;Sentinel&#xff0c;Seata Nacos通过Ribbon实现负载均衡&#xff0c;Ribb…

【java笔记】java多线程

目录 一、概念 1.1 什么是进程&#xff1f; 1.2 什么是线程&#xff1f; 1.3 什么事多线程&#xff1f; 1.4 进程和线程的关系 二、线程对象的生命周期 三、实现线程有两种方式 3.1 继承 java.lang.Thread&#xff0c;重写 run方法 3.2 实现 java.lang.Runnable 接口…

材料写作素材:关于“大”排比句40例

1.一轮思想政治“大督查”&#xff0c;一轮政策落实“大检查”&#xff0c;一次非公企业“大走访”&#xff0c;一次问题线索“大起底”&#xff0c;一批典型案例“大曝光”。 2.在重大风险挑战面前豁得出去、顶得上去&#xff0c;在重大困难考验面前迎难而上、敢于胜利&#…

【计网】WebSocket协议

目录 一、背景 二、WebSocket握手过程 三、SpringBoot中使用WebSocket协议 1、服务器 2、客户端 一、背景 一般的web开发以请求响应为主即客户端发送一个请求&#xff0c;服务器返回一个响应&#xff0c;这就使得类似聊天等需求基于HTTP协议进行实现时比较消费资源&#xf…

大数据之Hadoop分布式文件系统HDFS

目录&#xff1a; 一、介绍二、HDFS 设计原理三、原理图形介绍四、HDFS 常用 shell 命令五、HDFS相关JavaAPI 一、介绍 HDFS &#xff08;Hadoop Distributed File System&#xff09;是 Hadoop 下的分布式文件系统&#xff0c;具有高容错、高吞吐量等特性&#xff0c;可以部署…

厨电新十年,不可逆的行业分化与老板电器的数字进化

“人生就像滚雪球&#xff0c;最重要之事是发现湿雪和长长的山坡。”股神巴菲特的这句名言&#xff0c;让坡是否长、雪是否厚成为人们评价一个行业、一家公司的标准之一。 家电行业&#xff0c;厨电曾是最后一块“坡长雪厚”之地&#xff0c;投资者也对相关企业给出了相当的热…

FIR半带滤波器

FIR半带滤波器 半带滤波器原理&#xff1a; CIC滤波器是一种适合于工作在高采样率条件下的滤波器。 半带滤波器是一种非常适合于2倍抽取的FIR滤波器。 半带滤波器可以使2倍抽取的每秒乘法次数比一般线性相位的FIR滤波器减少近1/2。 半带滤波器是一种实现数字下变频的高效数…

暗藏的比特币白皮书已删除 苹果其实与Web3“格格不入”?

据悉&#xff0c;Apple已从其最新的Mac OS Ventura beta中删除了比特币白皮书&#xff0c;虽然该公司从未对白皮书的存在提供任何官方解释&#xff0c;但许多人猜测这是对加密货币日益增长的重要性的认可。 4月上旬&#xff0c;科技专家Andy Baio偶然发现&#xff0c;自己的Mac…