关于svn:Linux-SVN-迁移

linux SVN服务迁徙,指标服务器Red Hat8 步骤如下: 进行SVN服务装置迁徙配置启动装置 yum install php httpd subversion policycoreutils-python-utils mod_dav_svn -y迁徙将仓库文件拷贝到/var/www/svn/repos将SVN配置文件拷贝/var/www/svn/config将SVNadmin拷贝到/var/www/html/svnadmin配置权限配置chown -R apache.apache /var/www/html/svnadminchmod 777 /var/www/html/svnadmin/datachown -R apache.apache /var/www/svnSelinx配置简略粗犷 seenforce 0 长期敞开,可用于测试是否是因为这个权限导致无法访问配置平安上下文 semanage fcontext -a -t httpd_sys_content_t "/var/www(/.*)?"restorecon -Rv /var/www/html/svnadminrestorecon -Rv /var/www/svn文件配置1. vi /etc/sysconfig/svnserveOPTIONS="-r /var/www/svn/repos"2. vi /var/www/html/svnadmin/data/config.ini[Common]FirstStart=0BackupFolder=./data/backup/[Translation]Directory=./translations/[Engine:Providers]AuthenticationStatus=basicUserViewProviderType=passwdUserEditProviderType=passwdGroupViewProviderType=svnauthfileGroupEditProviderType=svnauthfileAccessPathViewProviderType=svnauthfileAccessPathEditProviderType=svnauthfileRepositoryViewProviderType=svnclientRepositoryEditProviderType=svnclient[ACLManager]UserRoleAssignmentFile=./data/userroleassignments.ini[Subversion]SVNAuthFile=/var/www/svn/config/authz[Repositories:svnclient]SVNParentPath=/var/www/svn/reposSvnExecutable=/usr/bin/svnSvnAdminExecutable=/usr/bin/svnadmin[Users:passwd]SVNUserFile=/var/www/svn/config/passwd[Users:digest]SVNUserDigestFile=SVNDigestRealm=SVN Privat[Ldap]HostAddress=ldap://192.168.136.130:389/ProtocolVersion=3BindDN=CN=Manuel Freiholz,CN=Users,DC=insanefactory,DC=comBindPassword=rootCacheEnabled=falseCacheFile=./data/ldap.cache.json[Users:ldap]BaseDN=DC=insanefactory,DC=comSearchFilter=(&(objectClass=person)(objectClass=user))Attributes=sAMAccountName[Groups:ldap]BaseDN=DC=insanefactory,DC=comSearchFilter=(objectClass=group)Attributes=sAMAccountNameGroupsToUserAttribute=memberGroupsToUserAttributeValue=distinguishedName[Update:ldap]AutoRemoveUsers=trueAutoRemoveGroups=true[GUI]RepositoryDeleteEnabled=falseRepositoryDumpEnabled=falseAllowUpdateByGui=true3. vi /etc/httpd/conf.d/subversion.confLoadModule dav_svn_module modules/mod_dav_svn.soLoadModule authz_svn_module modules/mod_authz_svn.so## Example configuration to enable HTTP access for a directory# containing Subversion repositories, "/var/www/svn". Each repository# must be both:## a) readable and writable by the 'apache' user, and## b) labelled with the 'httpd_sys_content_t' context if using# SELinux### To create a new repository "http://localhost/repos/stuff" using# this configuration, run as root:## # cd /var/www/svn# # svnadmin create stuff# # chown -R apache.apache stuff# # chcon -R -t httpd_sys_content_t stuff##<Location /repos># DAV svn# SVNParentPath /var/www/svn## #Limit write permission to list of valid users.# <LimitExcept GET PROPFIND OPTIONS REPORT># # Require SSL connection for password protection.# # SSLRequireSSL## AuthType Basic# AuthName "Authorization Realm"# AuthUserFile /path/to/passwdfile# Require valid-user# </LimitExcept>#</Location><Location /svn>DAV svnSVNParentPath /var/www/svn/reposSVNLISTParentPath onAuthType BasicAuthName "Authorization Realm"AuthUserFile /var/www/svn/config/passwdAuthzSVNAccessFile /var/www/svn/config/authzRequire valid-user</Location>启动systemctl enable svnservesystemctl start svnservesystemctl enable httpdsystemctl start httpd问题svnadmin拜访显示如下 ...

July 11, 2023 · 1 min · jiezi

关于svn:修改element-UI源码解决时间控件结束时间-秒开始时间样式未禁用问题

May 12, 2023 · 0 min · jiezi

关于svn:解决SVN同步失败后出现Previous-operation-has-not-finished-run-cleanup

前言SVN有时会同步失败,可能因为文件被占用,如下图: 或者单纯的因为网络不稳固导致失败。 无论哪种起因,同步前文件会被加锁,而因为没有同步没有实现,所有没有解锁,这就导致再次同步时会呈现上面的状况: Previous operation has not finished; run 'cleanup' if it was interruptedPlease execute the 'Cleanup' command.解决非常简单,让点clean up就点clean up。 这里留神,要勾选Break write locks,即解锁: 确定后再次同步,问题解决: 总结没有总结。

May 9, 2023 · 1 min · jiezi

关于svn:svn-admin-如何删除仓库

在svn admin装置目录里,找到data/config.ini 将 RepositoryDeleteEnabled设置为true即可删除仓库

May 9, 2023 · 1 min · jiezi

关于svn:让Webstorm正确关联TortoiseSVN解决无法使用Subversion命令行运行客户端

前言用了三年Git,第一次接触SVN。Windows端的SVN通常指的是TortoiseSVN的图形客户端。 但装好小乌龟之后,发现Webstorm启动时会报:“无奈应用Subversion命令行运行客户端,可执行文件的门路可能是谬误的” 并且Webstorm无奈正确捕获代码变更,Ctrl+K也生效。 本文来解决这个问题。 我猜TortoiseSVN是个壳刚看到这个问题时,依据教训我猜:TortoiseSVN外部应该蕴含了一个原生的svn命令行程序,操作图形界面实际上还是操作命令行。 于是找到了Webstorm的设置: 然而小乌龟的装置目录并没有svn.exe这个文件。 更新小乌龟又看了一次安装程序发现了问题: 默认状况下,命令行工具没有被装置,再启动一次安装程序抉择Modify: 而后加上Cmd line client tools即可: 更新后可能须要重启。 配置webstorm再启动Webstorm之后,就有svn.exe了 抉择确定之后,问题解决。 代码更新能够主动捕获,Ctrl+K失常应用,也能够间接用Webstorm来提交代码了。

May 4, 2023 · 1 min · jiezi

关于svn:SVN-vs-Git-不是技术之争而是生态之争

师父(80 后老员工):小吉啊,我看咱们文档越来越多了,手动治理起来很吃力。你去搞一个 SVN 来用一哈,做个版本控制,这样大家都不便。师傅(95 后新力量):师父啊,S 什么,什么 VN?是干什么的? 师父:Too young too simple,Subversion 做版本控制的神器啊,老少皆宜。师傅:emmmm,没听过。大家都用 Git 啊,基于 Git 的 GitHub/GitLab/极狐GitLab 用着多香。师父,你用的这些都 OUT 了吧。 师父:你走,不要再让我看到你,当前出事了,不要说我是你师父。 因为一个版本控制工具之争,让美妙的师徒关系变得缓和起来。看来要压服徒弟,还得深挖一下版本控制的内容啊。 为什么须要版本控制?先来看看维基百科对于版本控制的定义: 在软件工程中,版本控制(version control)(又称之为 revision control、source control 或者 source code management)是一种典型的零碎,负责对计算机程序、文档、大型网站或其余信息汇合的变更进行治理。版本控制是软件配置管理的重要一部分。 简言之:版本控制是为了对软件研发过程中的所有变更(代码、文档、配置等)进行追踪治理。 版本治理是实现多人对于同一套代码进行高效合作研发的要害,能够分明记录某个变更的详情,诸如变更人员信息(作者、邮箱)、变更内容(减少、删除)、变更起因及变更日期等。当有问题的时候,还能够进行疾速回滚。 波澜壮阔的版本控制发展史版本控制的发展史,要追溯到上世纪 60 年代,有这样几个次要的里程碑事件: ▹1962 - IEBUPDTEIEBUPDTE 次要与 IBM's OS/360 零碎一起应用,被称为版本控制工具的先驱,可追溯到 1962 年。尽管其次要应用穿孔卡来存储数据,然而的确提供了相似于明天用补丁零碎创立和更新代码库的能力。 ▹1972 - SCCS1972 年,贝尔实验室开始创立 SCCS(Source Code Control System),由 Marc Rochkind 用 C 语言编写。这个零碎曾经初具古代版本控制系统的特点了,诸如具备创立、编辑以及追踪文件的能力。当然,这个零碎并不反对多人同时合作。SCCS 在 1977 年正式对外公布,是上世纪 80 年代最次要的版本控制系统。 ▹1982 - RCS1982 年,Walter Tichy 开发了一个称之为 RCS(Revision Control System)的零碎。尽管 RCS 仍旧是任何时刻只容许一个用户对单个文件进行编辑,然而他发明了一种称之为 “Reverse Deltas” 的变更存储形式。RCS 并未存储当个文件的所有变更版本,而是将其最近的一个版本作为基线,其余所有版本都基于此基线来创立,这大大提高了变更存储以及追踪效率。 ...

March 3, 2023 · 2 min · jiezi

关于svn:这份SVN命令备忘清单请查收

Subversion是一种集中式的版本控制系统,个别被简称为SVN。作为目前可用的泛滥版本控制选项之一,SVN仍旧存在着分支性能弱、集中式导致服务器压力大等问题。 如果您的需要曾经超过SVN所提供的性能范畴应该怎么办?龙智将在系列文章中为您提供其余版本控制软件的实际参考。咱们将从为什么应用SVN、命令备忘录清单、托管储存库、如何应用客户端等角度比照Perforce Helix Core、SVN与Git,让您可能深刻理解各个版本控制软件的优缺点。 作为DevSecOps研发平安经营一体化解决方案供应商,龙智继续关注版本控制畛域动静与倒退,为您进步最新洞察与最佳实际参考,帮忙大型开发团队更好地进行数字资产治理与合作。 SVN命令能让您在Subversion中更加高效地工作。 示例:如何显示SVN储存库列表例如,应用SVN命令能够帮忙您显示SVN储存库的列表。只需应用svn list repository命令,就会失去所有储存库及其内容的列表。 当然,这只是您须要晓得的泛滥有用的SVN命令中的一部分。从SVN切换到更好的工具?  许多团队曾经从SVN切换到Helix Core。这是因为Helix Core提供了更快地速度、大规模和安全性。因为命令类似,所以很容易上手。最多可供5位用户收费应用。分割龙智,从SVN切换到HELIX CORESVN根本命令以下是每名开发人员和管理员都应该晓得的SVN根本命令。 svn管理员创立 svn admincreate命令创立一个新的空储存库。 svn导入 svn import命令将未版本化的文件树提交到储存库中(并在须要时创立两头目录)。 svn签出 svn checkout命令从储存库中签出工作正本。此命令有时缩写为“svn co”。 svn提交 svn commit命令将您的变更发送回svn服务器。 svn增加 svn add命令将向储存库中增加一个新的文件,但前提是您实现了svn提交。 svn删除 svn delete命令将从储存库的工作正本中删除文件。 svn列表 svn list命令容许您查看储存库中的文件列表,而无需创立工作正本。 svn差别 svn diff命令显示工作正本与主svn储存库中的正本之间的差别。 svn状态 svn status命令打印工作正本文件和目录的状态。 svn信息 svn info命令显示无关本地或近程我的项目的信息。 svn日志 svn log命令显示来自储存库的日志音讯。 svn挪动 svn move命令将文件从一个目录挪动到另一个目录(或重命名)。 svn合并 svn merge命令将两个不同版本合并到您的工作正本中。 svn复原 svn revert命令复原工作正本中的变更以及属性变更信息。例如,能够应用svn revert吊销svn增加。 svn更新 svn update命令应用储存库中的更改更新工作正本。 svn货架 svn shelve命令存储变更,而无需提交变更。 svn帮忙 svn help命令提供可用命令的摘要。 您是否应用了正确的工具?浏览本篇文章,找出比起SVN,团队更喜爱Perforce Helix Core 的起因。《Perforce与SVN的较量,谁会赢?》SVN命令备忘清单须要一个不便的SVN命令备忘单来参考吗? ...

August 29, 2022 · 1 min · jiezi

关于svn:SVNAdmin-好用的开源SVN管理系统

基于web的Subversion(SVN)服务器端管理工具,反对docker部署反对性能:SVN仓库治理、SVN用户治理、SVN分组治理、目录受权、目录浏览、Hooks治理、在线dump备份、在线备份复原、SVN用户禁用、服务器状态治理、日志治理、音讯告诉、更新检测...演示地址:http://svnadmin.witersen.com (默认的用户名与明码都为 admin)我的项目地址: GitHub地址:https://github.com/witersen/S...Gitee地址:https://gitee.com/witersen/Sv...发行包: GitHub:https://github.com/witersen/S...Gitee:https://gitee.com/witersen/Sv...兼容性 本程序提供 docker 镜像,基于 centos7.9.2009 构建操作系统(手动装置):CentOS7(举荐)、CentOS8、Rocky、Ubuntu(Windows及其它Linux发行版正在测试兼容中)PHP版本:5.5 <= PHP < 8.0数据库:SQLite、MySQLSubversion:1.8+问题帮助或性能倡议加Q群:633108141一、手动装置1、在CentOS7.6操作系统裸机装置示例装置PHP和相干扩大# 解压缩和网络获取工具yum install -y zip unzip wget vim# 因为CentOS7默认源中提供的PHP版本为5.4,而咱们须要 5.5+,因而应用remi源# 可将 remi-php55 切换为想装置的版本yum install -y epel-release yum-utilsrpm -Uvh https://mirrors.aliyun.com/remi/enterprise/remi-release-7.rpmyum-config-manager --enable remi-php55# 装置php及相干扩大yum install -y php php-common php-cli php-fpm php-json php-mysqlnd php-mysql php-pdo php-process php-json php-gd php-bcmath装置web服务器# 以apache为例yum install -y httpdsystemctl start httpdsystemctl enable httpd装置本程序# 将代码包下载到 /var/www/html/ 目录并解压cd /var/www/html/# 代码包从发行版获取wget https://gitee.com/witersen/SvnAdminV2.0/releases/download/v2.3.3/v2.3.3.zip# 解压unzip v2.3.3.zip装置Subversion(如果你装置过Subversion,本步骤能够略过)# 因为CentOS7.6默认源中的Subversion版本为1.7 因而咱们须要通过装置脚本装置高版本(>=1.8)# 切换目录cd /var/www/html/server/# install.php文件能够帮忙咱们装置Subversionphp install.php批改Subversion的配置使其反对被本系统管理#切换到目录cd /var/www/html/server#install.php文件能够帮忙咱们配置Subversionphp install.php将本程序退出系统管理和开机自启(系统管理)(举荐)(与下方启动形式二选一即可) ...

August 19, 2022 · 2 min · jiezi

关于svn:龟兔赛跑如何使用TortoiseSVN客户端和P4EXP

Subversion是一种集中式的版本控制系统,个别被简称为SVN。作为目前可用的泛滥版本控制选项之一,SVN仍旧存在着分支性能弱、集中式导致服务器压力大等问题。 如果您的需要曾经超过SVN所提供的性能范畴应该怎么办?龙智将在系列文章中为您提供其余版本控制软件的实际参考。咱们将从为什么应用SVN、命令备忘录清单、托管储存库、如何应用客户端等角度比照Perforce Helix Core、SVN与Git,让您可能深刻理解各个版本控制软件的优缺点。 作为DevSecOps研发平安经营一体化解决方案供应商,龙智继续关注版本控制畛域动静与倒退,为您进步最新洞察与最佳实际参考,帮忙大型开发团队更好地进行数字资产治理与合作。 什么是TortoiseSVN?TortoiseSVN是一个Subversion客户端。它是一个用于Windows的GUI客户端。它基于开源Apache Subversion(SVN)代码库,且能够在GNU通用公共许可证下应用。 SVN和TortoiseSVN有什么区别?SVN是一个版本控制系统。TortoiseSVN是SVN的可视化客户端。因而,您能够应用TortoiseSVN作为SVN的可视化客户端。 然而,SVN存在许多问题,包含: SVN反应速度很慢。随着工夫的推移很难保护版本跟踪,尤其是在大型项目上。因为不足对源和指标分支的跟踪,合并很艰难,而且可能费时费力。它具备一个异样严格的工作目录布局。没有客户反对。它应用一种稠密检出办法,在将文件从存储库中检出到目录时,无奈检出整个存储库的目录,只能检出特定的目录。因而,尽管SVN从技术上来说是一个收费工具,但操作起来却很艰难。这让它的应用老本变得很高。许多企业没有意识到,从开发人员的生产率和解决合并抵触所破费的精力来看,它实际上破费了许多老本,而且这种老本每天都在产生。 SVN曾经问世很长时间了,所以许多开发人员至多对它还算称心。然而,这个SVN舒服区存在一个问题:许多组织和开发人员往往对生产率降落的问题熟视无睹。他们只是把这些作为日常工作的一部分来承受。 那么,为什么人们始终应用TortoiseSVN呢?我据说,人们最喜爱的SVN就是TortoiseSVN。 TortoiseSVN使SVN问题不那么烦人 TortoiseSVN不能解决上文所述的任何问题。但这丝毫不影响它的受欢迎水平,它甚至博得了2007年Sourceforge.net网络社区抉择奖!尽管那是15年前的事了。 如何应用TortoiseSVN您要做的第一件事是关上文件资源管理器。TortoiseSVN集成了文件资源管理器(以前称为Windows资源管理器)。文件资源管理器是Windows 8及更高版本(包含Windows 10)提供的GUI的一部分。对于大多数用户来说,此界面十分有用,因为它能够查找和拜访Windows计算机上文件的文件夹。 在相熟的右键单击(上下文单击)菜单中便可找到TortoiseSVN选项。只需几步就能够开始。 右键单击文件或文件夹。而后在关上、剪切、复制等选项中抉择TortoiseSVN。导航到TortoiseSVN选项,您将看到其主菜单。在这里,您能够抉择要对该文件或文件夹执行的版本控制操作。一旦做出抉择,您将与菜单交互以执行性能。签出的应用十分频繁,它有本人的菜单项,名称为SVN Checkout。 因而,如果您是一名在Windows机器上工作的开发人员,那么应用TortoiseSVN能够让工作更为轻松。 乌龟(SVN客户端)和兔子(P4EXP—Helix Core)TortoiseSVN的名字用得很贴切。它就像一只乌龟,挪动得很迟缓。 Perforce Helix Core也有相似的性能,但它速度要快得多!相比之下,它就像是一只野兔。尽管,它没有可恶的名字或卡通海龟/兔子图标,它的名字十分实用:P4EXP,文件资源管理器的Helix插件。 兴许,更重要的一点是,P4EXP非常容易上手。事实上,它比TortoiseSVN要简略得多,因为TortoiseSVN有太多的菜单选项,使操作变得非常复杂。 P4EXP的工作原理 P4EXP在Windows上运行。它使您能够拜访Perforce Helix Core最罕用的版本控制性能,例如签出、提交和查看变更列表。 它还能够与用于Perforce Helix Core的可视化客户端P4V无缝合作。在这里,您能够执行更精密的版本控制操作,例如: 治理本地工作区和仓库之间的文件。查看和治理流。执行更多与工作流相干的工作。为什么P4EXP比TortoiseSVN客户端更好? 因为简略并且易操作,所以P4EXP必TortoiseSVN客户端更好。 非代码贡献者也能轻易上手P4EXP。对于管理员、设计师、图书管理员、经理或其余无需常常拜访Perforce Helix Core的团队成员来说,它几乎棒极了。如果您只须要查看或对文件(可能是公布阐明或其余文档)进行简略的编辑,那么它也是一个很好的抉择。 作者简介:查克·格曼(Chuck Gehman)技术营销工程师,Perforce 查理斯 “查克” 格曼是Perforce的技术营销工程师。在整个职业生涯中,他曾负责行业当先的初创公司和大型企业的CTO、架构师、开发人员和产品负责人。Chuck是IEEE的成员已有20年,并且是AWS认证的解决方案架构师和认证开发人员。在业余时间,查克喜爱和家人在一起,做CrossFit、意愿加入科技教育流动、加入团聚和写作。

August 17, 2022 · 1 min · jiezi

关于svn:什么是SVNSubversion

Subversion是一种集中式的版本控制系统,个别被简称为SVN。作为目前可用的泛滥版本控制选项之一,SVN仍旧存在着分支性能弱、集中式导致服务器压力大等问题。 如果您的需要曾经超过SVN所提供的性能范畴应该怎么办?龙智将在系列文章中为您提供其余版本控制软件的实际参考。咱们将从为什么应用SVN、命令备忘录清单、托管储存库、如何应用客户端等角度比照Perforce Helix Core、SVN与Git,让您可能深刻理解各个版本控制软件的优缺点。 作为DevSecOps研发平安经营一体化解决方案供应商,龙智继续关注DevSecOps畛域的动静与倒退,集成世界支流工具,帮忙企业实现研发平安经营一体化。 Subversion是目前可用的泛滥版本控制选项之一。Subversion是一种集中式版本控制系统,用于治理版本化文件,如源代码。它通常缩写为SVN。 Subversion的定义Subversion用处是什么? Subversion用于保护我的项目的以后版本和历史版本。它是一个开源的集中式版本控制系统。它是依据Apache受权的,也被称为软件版本订正控制系统。 什么是SVN? SVN代表Subversion。所以,SVN和Subversion是一样的。SVN用于治理和跟踪跨我的项目的代码和资产的更改。 Subversion还在被应用吗? Subversion已经是最风行的零碎之一,但 受欢迎水平正在逐步降落。然而,其中依然存储了数百万行。它甚至持续被踊跃保护,只管是由一个小型开源社区保护的。 什么是SVN储存库? SVN储存库是指蕴含残缺更改历史的文件汇合。 Subversion (SVN) 是分布式版本控制系统吗?SVN实际上是一个集中的版本控制系统。它不同于分布式系统,比方 Git。 SVN 服务器解释集中式版本控制意味着版本历史存储在地方服务器中。当开发人员想要对某些文件进行更改时,他们会将文件从该地方服务器拉到他们本人的计算机上。开发人员进行更改后,他们将更改的文件发送回地方服务器。 Subversion工具什么是Subversion工具? 有许多罕用的Subversion工具和客户端。例如,TortoiseSVN 是最风行的 Subversion工具之一。 您还能够思考托管Subversion的工具,例如Helix TeamHub。 Subversion工具是如何工作的? SVN最后被设计为命令行界面。这意味着您须要关上终端并输出文本命令。 要使Subversion失常工作,SVN设置须要满足两个次要条件: 领有所有源文件的所有版本的服务器确保文件的本地正本存储于您的计算机中存储于计算机中的文件称为工作文件,用户能够对这些文件进行编辑。而后,用户将变更后的文件提交至SVN服务器。 每次用户提交更改时,SVN都会通过创立一个新版原本治理和记录更改。与大多数版本控制选项一样,用户通常应用最新版本。但如果须要旧版本,也能够复原至晚期版本。 你应该在SVN中应用版本控制吗?应用SVN进行版本控制很风行。但这对您的团队来说是正确的抉择吗?以下是您在应用SVN进行版本控制时将面临的一些挑战。 SVN有一个繁琐的分支模型 SVN繁琐的分支模型是最受用户诟病的问题。SVN分支模型容许您同时解决多个版本的代码。在SVN中,分支被创立为为服务器外部的目录,很多开发人员不喜爱这种目录构造。但挑战不止于此。 SVN1.6版引入了一个称为树抵触的概念。树抵触是因目录构造变更而引起的抵触,并且会常常产生。因为SVN不容许您在产生树抵触时提交变更信息,所以这减少了在SVN中实现分支策略的复杂性。 SVN须要连贯到地方储存库 为了提交更改,SVN要求您连贯到地方储存库。 在这里,不得不提到一个流传已久的对于版本控制的说法:“尽早提交;常常提交”。 思考到这一点,应用SVN而不连贯地方储存库是毫无意义的。例如,如果您进行离线编码,例如在航行期间,SVN不容许您在复原连贯之前提交到地方储存库。 如果您有多个存储库,则这一连贯过程会变得更加简单。 SVN须要手动解决抵触 合并是SVN被开发人员所诟病的另一重大问题。如果您正在解决一个历史记录,其中一组进行了变更并提交,而后进行了另一变更(即线性变更)并提交,则合并将会非常容易实现。 当两名或更多的开发人员在同一个代码库上工作,并且须要合并时,事件就会变得复杂起来。在这种状况下,SVN合并失败,开发人员须要手动解决抵触,这一手动解决过程可能须要破费数个小时,节约了开发人员的宝贵时间。 那么,为什么要应用Subversion?SVN会带来一些挑战。那么,为什么仍然应用SVN?两大的起因:老本和惯性。 老本:SVN是开源的,这意味着它能够“收费应用”。进一步理解SVN的实际成本。惯性:一旦建设了数据规模宏大的代码库后,就很难切换VCS。SVN自2004年问世以来,已有很多企业利用SVN治理数百万行代码信息。Subversion是成熟的工具吗? 如果您的需要曾经超过SVN所提供的性能范畴,Perforce可为您提供企业级版本控制软件Helix Core,让您无限度地扩大。 Perforce Helix Core是集中式版本控制工具,具备SVN所有长处,并且功能强大,能够轻松解决问题。 您将取得: 一个集中的服务器,创立一个繁多事实起源。易于应用的工具。高效且弱小的分支治理性能。易于提交更改,还能够跨多个存储库提交更改。主动解决合并抵触。Perforce Helix Core非常适合合作,因其具备可扩展性和灵活性。残缺版本的Perforce Helix Core最多可供5个用户和20个工作区收费应用。 文章起源:https://bit.ly/3oEhPXc 如需收费试用Perforce Helix Core,请立刻分割Perforce受权合作伙伴——龙智:电话:400-775-5506邮箱:marketing@shdsd.com

August 2, 2022 · 1 min · jiezi

关于svn:SVN使用教程常用命令

代码检出 checkout(co) 这个命令会把 SVN 服务器上的代码下载到咱们电脑上,checkout 也能够简写为 co svn checkout svn://svnbucket.com/xxx/xxx # 指定存储目录 svn checkout svn://svnbucket.com/xxx/xxx save-dir # 指定用户名明码。 svn checkout svn://svnbucket.com/xxx/xxx --username xxxx --password xxx提交代码 commit 此命令能够把咱们本地的批改提交到 SVN 服务器,这样其余共事就能更新到咱们的代码了。 commit 能够简写为 ci,-m 参数前面跟的是本次提交的形容内容 # 形容是必须的,然而能够填写空字符串,不指定 svn commit -m "提交形容" # 只提交指定文件或目录 svn commit /path/to/file-or-dir -m "提交指定文件" # 指定后缀的所有文件 svn commit *.js -m "提交所有 js 文件" 更新代码 update执行此命令后会把其他人提交的代码从 SVN 服务器更新到咱们本人电脑上,update 也能够简写为 up # 更新到最新svn update# 更新到指定版本的代码。特地是最新版本代码有问题时,咱们能够用这个命令回到之前的版本svn update -r xxx # 仅更新指定文件或者目录svn up /path/to/file-or-dir增加文件 add新建的文件,咱们须要用 add 命令把它们退出 SVN 的版本治理,而后咱们才能够提交它。留神:增加后还须要进行提交喔。 # 增加指定文件或目录svn add /path/to/file-or-dir# 增加当前目录下所有 php 文件svn add *.php删除文件 delete此命令会从 SVN 移除版本控制,移除后你须要提交一下 svn delete /path/to/file-or-dir# 删除版本控制,然而本地仍旧保留文件svn delete /path/to/file-or-dir --keep-local查看日志 log# 查看当前目录的日志svn log# 查看指定文件或目录的提交日志svn log /path/to/file-or-dir# 查看日志,并且输入变动的文件列表svn log -v# 限定只输入最新的 5 条日志svn log -l 5查看变动 diff# 查看当前工作区的改变svn diff# 查看指定文件或目录的改变svn diff /path/to/file-or-dir# 本地文件跟指定版本号比拟差别svn diff /path/to/file-or-dir -r xxx# 指定版本号比拟差别svn diff /path/to/file-or-dir -r 1:2 撤销批改 revert# 撤销文件的本地批改svn revert test.php# 递归撤销目录中的本地批改svn revert -R /path/to/dir增加疏忽 ignoreSVN 的疏忽是通过设置目录的属性 prop 来实现的,增加后会有一个目录属性变动的批改须要提交,记得要提交一下喔,这样其他人也有了这个疏忽配置。 # 疏忽所有 log 文件。留神最初有个点号,示意在当前目录设置疏忽属性。svn propset svn:ignore "*.log" .# 递归疏忽 global-ignoressvn propset svn:global-ignores "*.log" .# 从文件读取疏忽规定,一行一个规定。svn propset svn:ignore -F filename.txt .# 关上编辑器批改疏忽属性svn propedit svn:ignore .# 查看当前目录的属性配置svn proplist . -v# 删除当前目录的疏忽设置svn propdel svn:ignore . !!!疏忽仅对还未增加到版本库的文件失效,曾经在版本库里的文件,增加疏忽后是不会主动删除的也不会疏忽,须要手动 delete 命令删除下才行。查看状态 status任何时候,你能够用上面的命令查看当前工作目录的 SVN 状态喔,会列出来哪些文件有变动。 svn statussvn status /path/to/file-or-dir清理 cleanup这个命令咱们常常在 SVN 呈现报错时能够执行一下,这样就会清理掉本地的一些缓存 svn cleanup查看信息 info、查看文件列表 ls、查看文件内容、查看 blame、地址重定向-----------------------------svn info-----------------------------svn ls # 指定版本号svn ls -r 100-----------------------------# 查看指定版本的文件内容,不加版本号就是查看最新版本的svn cat test.py -r 2-----------------------------显示文件的每一行最初是谁批改的(出了BUG,常常用来查这段代码是谁改的) svn blame filename.php------------------------------svn switch --relocate 原 SVN 地址 新 SVN 地址------------------------------分支操作# 创立分支,从骨干 trunk 创立一个分支保留到 branches/online1.0svn cp -m "形容内容" http://svnbucket.com/repos/trunk http://svnbucket.com/repos/branches/online1.0# 合并骨干上的最新代码到分支上cd branches/online1.0svn merge http://svnbucket.com/repos/trunk # 分支合并到骨干svn merge --reintegrate http://svnbucket.com/repos/branches/online1.0# 切换分支svn switch svn://svnbucket.com/test/branches/online1.0# 删除分支svn rm http://svnbucket.com/repos/branches/online1.0帮忙命令# 查看SVN帮忙svn help# 查看指定命令的帮忙信息svn help commit

August 2, 2022 · 2 min · jiezi

关于svn:Mac上的SVN管理工具Cornerstone-4

Cornerstone for Mac是一个弱小的,面向用户的版本控制实用程序,构建在开源Subversion版本控制系统之上,使简单的版本控制我的项目尽可能简略。此外,Cornerstone全面反对Subversion的所有丰盛性能,同时具备极强的性能和超级易用性。 Cornerstone 4是为Mac用户设计的客户端,这是Mac平台上惟一具备搁架和检查点的SVN客户端。 Cornerstone集成了与存储库交互所需的所有性能,操作简略、易于应用。无论您是版本控制专家还是Subversion专家,Cornerstone都将帮忙您简化工作流程并使版本控制更加通明。最多可将检查和更新速度进步300%,性能也全面晋升。

August 1, 2022 · 1 min · jiezi

关于svn:centos7-安装svn-ifsvnadminapache并ldap安装配置

创立目录下载安装所需程序yum -y install httpdyum -y install subversionyum -y install phpyum -y install mod_dav_svn创立代码仓库svnadmin create /home/svn/productchown -R apache:apache /home/svn/product/cd /home/svn && cp -a product/conf/* ./#批改 /var/www 的权限为apache,后续都要应用apache的权限,否则权限会失败rm -rf passwd && touch passwd#多仓库,把product上面的配置文件挪动到svn目录来实现htpasswd /home/svn/passwd admin设置admin的明码()vi /home/svn/authz admin = admin[/]@admin = rw [product:/]@admin = rw* = r#批改访问控制的配置文件#原始文件的`21 行`用于设置用户组,要求在`/var/www/svn/passswd`文件内必须有此用户,每两个用户之间用`英文逗号`隔开。能够设置多个用户组,同一用户尽量不要在多个组中。 #原始文件`25 行`用户设置根门路权限:#`*` 为`所有用户`,#`@XXX`为`用户组`,#`XXX`为`单个用户`。#**“=”后**#`空`代表`不可读写`#`r` 代表`只读`,#`rw` 代表`读写`。cp /etc/httpd/conf.modules.d/10-subversion.conf /etc/httpd/conf.d/subversion.confinstalll iF.SVNAdmincd /resource &&wget http://sourceforge.net/projects/ifsvnadmin/files/svnadmin-1.6.2.zip/downloadunzip download#下载解压,iF.SVNAdmin应用程序是您的Subversion受权文件的基于Web的GUI#这个是php写的,所以后面装置了phpcp -r iF.SVNAdmin-stable-1.6.2/ /var/www/html/svnadmin#将iF.SVNAdmin拷贝到Apache目录chmod -R 777 /var/www/html/svnadmin/data/chown -R apache:apache /var/www/html/svnadmin/chown -R apache:apache /home/svn/yum -y install php-ldapyum -y install mod_ldap#ldap须要这两个模块的反对systemctl restart httpdsubversion.conf[root@prometheus-work-beijing ~]# cat /etc/httpd/conf.d/subversion.conf LoadModule dav_module modules/mod_dav.soLoadModule dav_svn_module modules/mod_dav_svn.soLoadModule authz_svn_module modules/mod_authz_svn.soLoadModule ldap_module modules/mod_ldap.soLoadModule authnz_ldap_module modules/mod_authnz_ldap.soLoadModule auth_basic_module modules/mod_auth_basic.soLoadModule authn_file_module modules/mod_authn_file.soLoadModule authz_user_module moduels/mod_authz_user.so<Location /svn/> DAV svn SVNParentPath /home/svn SVNListParentPath on AuthBasicProvider ldap AuthType Basic AuthName "Subversion repository" AuthLDAPURL "ldap://10.3x.14x.1x:389/OU=xxxxngshu-sh,DC=xxxongshu,DC=sh?sAMAccountName?sub?(objectClass=*)" AuthzSVNAccessFile /home/svn/authz AuthLDAPBindDN "CN=it_ldap,OU=ServiceAccount,DC=xxxxxxxhu,DC=sh" AuthLDAPBindPassword "xxx" Require valid-user</Location>#systemctl restart httpd赋权限,重启配置失效http://10.3x.1xx.x8/svnadmin/...登录配置此处配置ldapSubversion 受权文件: /home/svn/authz ...

April 19, 2022 · 1 min · jiezi

关于svn:推荐两款好用的svn服务端web图形化管理工具

背景:远古的技术公司仍然对subversion还是那么情有独钟,可是svn的web图形化管理工具都太古老了,比方svnmanager好老的版本了。并且也没有中文的界面。不不便用户登陆治理。其余的还有又要搞一套svn 零碎。是在不想弄。github搜了一圈找到了两个比拟好的算是比拟新的svn图形化管理工具:SVNAdmin2.0 svnWebUI。各有千秋。svnadmin是基于Vue.js+iView UI+PHP+Medoo数据库框架+ZeroMQ中间件开发的,svnWebUI是java开发的。体验了一下两款工具 两款工具比照1. UI比照两款软件git仓库都有在线体验地址:svnadmin http://svnadmin.witersen.com/ 用户名明码: adminstartor adminstartor svnWebUI http://svn.nginxwebui.cn:6060/ 用户名明码: admin admin留神:以后是的,后续毕竟作者是会批改的的...... ui比照和扩展性来说集体感觉svnadmin要好一些。毕竟是基于vue搞得前端,批改或者二次开发对于前端来说比较简单,且后端是Php的较为容易上手。然而也不是说svnWebUI不好!很中规中矩! 2. 性能比照下面svnadmin的这个hook性能很不错。因为当初正好要用一个hook 而且这个还能够看到服务器门路很是不错svnWebUI的治理页面有了导出导出备份更是比拟贴合用户迁徙导入导出的用处并且用户分组和用户治理这里svnWebUI都有导入的性能! 3. 装置上手svnadmin 要本人装置php等环境.....并且适配无限 只反对CentOS 8、CentOS7。我的rocky也跑不起来......。我改了一下跑起来了也是各种坑,找到作者说各种开发中还须要十多天能够看到新版本。svnWebUI是封装好的jar包,并且有docker镜像比拟不便上手装置!然而如果运行hook倡议还是jar形式运行,我在docker环境内搞了一下各种问题。 4. 版本的更新迭代svnWebUI前几天用还是1.58版本 明天就看到1.61了 github下面也没有太明确的版本release.这点不太好......我也不晓得那里看到了1.61就下了版本跑了....后面的版本svn地址还是http的......我用的时候有点问题,也没有找到起因,找作者吐槽了一下....看到1.61更换成svn协定了 集体举荐与总结集体还是举荐svnWebUIsvnadmin心愿能适应更多的环境,或者封装成docker镜像两个作者都交换过貌似...最初应该大同小异,依照集体爱好抉择我的项目吧,两个都是开源的......

April 16, 2022 · 1 min · jiezi

关于svn:从-SVN-到极狐GitLab的迁移指南

SVN(Subversion)和 Git 都是十分优良版本控制工具,只不过近些年基于 Git 的 GitHub/GitLab/极狐GitLab 发展势头迅猛,让很多人遗记了 SVN。对于 SVN 和 Git 的比照,不是明天这篇文章的主题,本文将解析如何从 SVN 迁徙到极狐GitLab。 前提条件可用的 SVN 环境极狐GitLab账号(自建或 SaaS 均可,SaaS 可登陆 https://gitlab.cn, 右上角登陆,申请注册)服务器至多一台SVN 的装置和配置应用SVN 的装置执行如下命令即可在 Ubuntu 20.04 上实现 SVN 的装置: $ apt-get update$ apt-get install libapache2-mod-svn subversion-tools libsvn-dev -y$ apt install subversion -y应用 svn --version 来查看装置是否胜利: $ svn --versionsvn, version 1.13.0 (r1867053) compiled Mar 24 2020, 12:33:36 on x86_64-pc-linux-gnu...... 太长,疏忽其余信息 ......SVN 配置应用SVN 能够通过 svn/http/https 协定来应用。 SVN 协定配置应用在 SVN 服务器上创立一个 svn 的目录: ...

March 21, 2022 · 6 min · jiezi

关于svn:TortoiseSVN-执行清理-cleanUp-失败的解决方案

前言目前咱们这边的内网代码是通过 TortoiseSVN 进行版本治理的,平时用着也挺好的,没碰到什么大问题。 然而,明天碰到了一个比拟辣手的问题,在这里做一下记录,以不便本人和有须要的敌人在之后碰到该类问题时有个参考。 景象具体的谬误景象如下图所示: 起因导致上述景象的步骤如下: 从最外层目录点击的更新,因为文件数量巨多,导致长时间处于查看状态;点击了勾销更新按钮;勾销响应太慢,间接从工作管理器敞开 TortoiseSVN 过程;通过以上步骤后,再次更新就呈现了该景象,不论从哪一级目录更新都是一样的谬误。 尝试一依据谬误景象中的提示信息,手动执行清理操作,后果弹出下图所示的谬误: 不论从哪一级目录开始,都是一样的报错,看来这条路是走不通的,只能另寻他法。 图中报错信息 Failed to run the WC DB work queue associate with xxx 的粗心是:启动与 xxx 相关联的 WC DB 工作队列失败。 尝试二通过查找材料,发现碰到这种景象的人还是蛮多的,然而,当初网上找进去的材料中,绝大部分都是倡议应用 sqlite3 进行数据库清理,数据库位于时抉择的那个本地目录下的 .svn 文件夹中,名称为 wc.db,如下图这样的: .svn 里的内容过后忘了截图了,借用一下网上找到的: 吐槽一下,这个数据库文件名称 wc 让我有了不好的联想。 留神:.svn 文件夹个别是暗藏文件夹,须要设置显示。 所以,我就依据网上的教程,在外网下载了 sqlite3 的安装包,申请了导入内网。 在期待导入的过程中,我忽然想到,能批改数据库文件(.db)的不仅仅只有 sqlite3,我内网机上安装的 Navicat Premium 也是能解析数据库文件的,那为什么不试一下呢?因为之前只用它连贯数据库,一时没反馈过去。 终解尝试应用 Navicat Premium 关上 wc.db 文件,果然是能够失常解析的。 接下来就是依照图上标进去的步骤: 找到 WORK_QUEUE 表;右键该表,抉择“清空”;保留 wc.db 用下面批改过的 wc.db 替换 .svn 下的 同名文件,而后再次执行清理指令。在稍等十几秒后,提示信息变为如下所示: ...

January 26, 2022 · 1 min · jiezi

关于svn:使用svn-合并代码-魏某人有话要说-请诸位静听

背景: 将svn a目录中的批改过的代码合并到b目录 且b目录的目录构造已发生变化,b目录同时在做平安加固 应用工具 svn乌龟 everything vscode 查问出指定期间内的批改过的文件列表进入到svn的根目录下 执行命令 # 查问出指定日期范畴内的批改记录 并汇总成列表svn diff -r {2021-12-09}:{2022-01-22} --summarize 更多命令请查看 svn diff 命令解释 1中的形式只能汇总,不能查出单个用户的批改记录单个用户本办法 应用乌龟 的history 一个个复制粘贴将批改后的文件的门路复制粘贴到vscode 这样操作可能会有反复的数据 屡次对同一个文件批改会保留多条记录 此时应用vscode 的去重性能 ctrl +f 替换成ctrl + r 勾选正则表达式查找【^(.+)((?:\r?\n.))(?:\r?\n\1)$】替换【$1$2】应用everything进行门路匹配everything开启正则校验输出下列匹配门路即可 (20.0.3|trunk)\\bim\\bim-external-api\\src\\main\\java\\com\\bamboocloud\\im\\external\\entity\\ChangePasswordReport.java 20.0.3 门路或者trunk 门路下windows的\ 开启正则后须要加一个\进行本义

January 22, 2022 · 1 min · jiezi

关于svn:Linux搭建SVN服务器详细教程

前言本文解说Linux零碎下如何搭建SVN服务器,具体阐明各配置项的性能,最终实现可管控多个我的项目的简单配置。 SVN是subversion的缩写,是一个凋谢源代码的版本控制系统,通过采纳分支管理系统的高效治理,实现最终集中式的治理。 目前很多互联网公司在应用SVN,长处在于使用方便、易于治理。与之对应的分布式的版本控制系统Git则更加灵便。 搭建装置SVN//Ubuntuapt-get install subversion//Centosyum install subversion查看是否装置胜利,能够查看版本。 svnserve --version 提醒版本1.13.0,阐明已装置胜利。 创立版本库目录创立SVN版本库目录,为前面创立版本库提供寄存地位,也是最初启动SVN服务的根目录。 咱们在/usr门路下创立svn目录作为版本库目录。 cd /usrmkdir svnLinux零碎各目录常识延长: 所以,将SVN库存放在用户文件目录/usr下比拟正当。 创立SVN版本库在上一步建设门路根底上,创立版本库,如dev。 cd /usr/svnsvnadmin create dev创立胜利后,能够查看到dev目录下生成的文件。 批改SVN配置进入conf目录,查看须要批改的配置文件。 cd /usr/svn/dev/confls 配置文件: authz:权限配置文件,管制读写权限passwd:账号密码配置文件svnserve.conf:svn服务器配置文件批改svnserve.conf文件vim svnserve.conf 去掉anon-access、auth-access、password-db、authz-db、realm几项前的正文符号“#”。 配置项含意: anon-access = none|read|write 决定非受权用户的拜访级别。none 示意无拜访权限,read 示意只读,write 示意可读可写,默认为 read。auth-access = none|read|write 决定受权用户的拜访级别,应用与下面雷同的拜访级别。默认为 write。password-db = filename 指定账号密码数据库文件名。filename 是绝对仓库中 conf 目录的地位,也能够设置为绝对路径,默认为passwd。authz-db = filename 指定权限配置文件名,filename 是绝对仓库中 conf 目录的地位,也能够设置为绝对路径,默认为authz。realm = realm-name 指定版本库的认证域,即在登录时提醒的认证域名称。若两个版本库的认证域雷同,倡议应用雷同的账号密码数据库文件passwd。认证域常识延长: 在SVN客户端登录时,会提醒realm认证域,如下图的认证域My First Repository。 批改passwd文件vim passwd 只需在开端增加账号和明码,格局 账号 = 明码,如user1 = 123456,可增加多个。 ...

October 25, 2021 · 1 min · jiezi

关于svn:什么是SVN如何利用云效将代码从SVN-迁移到Codeup

什么是SVN?如何利用云效将代码从SVN 迁徙到Codeup。Subversion(简称SVN)是一个开源的版本控制系统,治理随工夫扭转的数据。本文介绍了什么是SVN及利用云效将代码从SVN 迁徙到Codeup,Codeup 反对导入你的 SVN 仓库,并且转换为 Git 仓库存储。 什么是SVN,SVN简介 SVN治理的数据寄存在地方材料档案库(Repository)中。该档案库会记录文件的每一次变动,这样您就能够把数据恢复至旧版本或浏览文件的变动历史。SVN中罕用的概念和操作如下: Repository(源代码库):源代码对立寄存的中央。Checkout(提取):该操作用于从Repository中提取一份源代码到本地。Commit(提交):该操作用于将批改代码后的代码提交到Repository。Update(更新):该操作用于同步本地源代码与Repository中的源代码。云效Codeup 反对导入你的 SVN 仓库,并且转换为 Git 仓库存储。 设置 SVN 仓库根本信息 如下图所示,填写 SVN 仓库的地址(反对 svn、http/https 协定)、用户名、明码信息 注:匿名可拜访的仓库能够不输出账号密码倡议配置一个长期的可读仓库的账号密码,导入实现后删除长期配置的账号密码 设置导入目录映射 规范布局规范布局指 SVN 仓库根目录下只有 trunk、branches、tags 三个目录,别离示意骨干分支目录、一般分支目录和标签目录。例如如下层级关系,branches 目录下有若干分支的目录,tags目录下有若干标签的目录。 如果你的 SVN 仓库布局如上,导入时间接抉择规范布局即可。非标准布局如果你的 SVN 仓库不是规范布局,导入时须要抉择非标准布局。 如上图,分两种状况:你的 SVN 代码库没有分支、标签这类信息这种状况,间接按上图的形式抉择即可,Codeup 会将你的 SVN 库根目录下的所有内容导入,并且不会生成 git 分支或者标签。你的 SVN 代码库有分支或者标签信息例如: 其中,master 目录下保留了骨干分支的内容,branch 目录下保留了一般分支的内容,没有标签内容,这种状况如下图填写布局信息: 注意事项 Codeup 会将你的 SVN 仓库转换为 Git 仓库,如果仓库越大,提交次数越多,导入的工夫也就越长。依据你的 SVN 仓库大小,导入工夫从几分钟至几小时不等,请急躁期待导入实现;目前非标准布局因为实现原理的起因,较大的 SVN 仓库可能会呈现导入失败的景象,如果屡次尝试依然失败,倡议间接应用规范布局的形式导入;什么是SVN?如何利用云效将代码从SVN 迁徙到Codeup。云效Codeup 反对导入你的 SVN 仓库,并且转换为 Git 仓库存储。云效代码治理 Codeup,10万企业都在用的代码治理平台,提供代码托管、代码评审、代码扫描、品质检测、继续集成等性能,全方位爱护企业代码资产,帮忙企业实现平安、稳固、高效的代码托管和研发治理。 ...

September 2, 2021 · 1 min · jiezi

关于svn:linux安装svn

在linxu机器上装置sv如果是centos或者Redhat 间接应用对用的包管理工具装置即可 题主因为用的是openSuse,这里介绍两种我晓得的形式 1.应用包管理工具装置 应用包管理工具进行装置 zypper install subversion 即可 如果没找到 参考我另外一个文章增加对应的仓库即可 传送门点这里 2.源码编译装置subversion 须要装置 aprapr-utilsqlite大家对号入座 如果有就间接跳过没有则须要装置 apr下载安装 wget http://archive.apache.org/dist/apr/apr-1.4.5.tar.gz  解压,tar -zxvf \`文件名\` 并进入解压后的目录目录下执行命令 ./configure --prefix=/usr/local/apr make && make installapr-util下载安装 wget http://archive.apache.org/dist/apr/apr-util-1.3.12.tar.gz   解压, tar -zxvf \`文件名\` 并进入解压后的目录目录下执行命令 ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/bin/apr-1-configmake && make installsqllite下载安装 wget http://www.sqlite.org/sqlite-amalgamation-3.6.13.tar.gz 解压, tar -zxvf \`文件名\` 并进入解压后的目录目录下执行命令 ./configure --prefix=/usr/local/sqlite make && make install最初回到subversion的目录下执行命令./configure --prefix=/usr/local/svn --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/sqlite --with-lz4=internal --with-utf8proc=internal如果报错 揭示版本过低 须要下载最新的文件并解压到对应的文件夹下: 依照图中操作即可 下载实现后的文件如下图 将其尽数搁置于图中提醒的文件夹中即可,如果没有则自行创立 最初再执行4.命令 make&& make install 发现编译装置胜利 ...

August 31, 2021 · 1 min · jiezi

关于svn:TortoiseSVN的使用

应用文档装置下载地址留神要勾选 command line client tools。 装置实现之后,最好重启电脑,这样就能够显示状态图标了。 应用本工具是应用右键开始,外面有丰盛的命令。 分为2种状况,我的项目根目录和选中文件。 导入已有我的项目TortoiseSVN - import 新增TortoiseSVN - add 拉取近程代码SVN - update 提交代码SVN - commit 暂存本次批改TortoiseSVN - shelve TortoiseSVN - unshelve 撤销更改TortoiseSVN - revert 新建分支TortoiseSVN - branch/tag 留神: 分支是以门路的形式进行命名,所以放弃与骨干分支同一级目录即可。能够勾选底部switch working copy to new branch/tag,这样就会基于选中的版本新建并且切换分支。切换分支TortoiseSVN - switch 合并分支TortoiseSVN - merge 留神查看以后是哪个分支,合并起源是哪个分支。如果有抵触,须要解决抵触。 删除分支TortoiseSVN - repo-browser选中左侧对应的分支,右键delete删除。 实战文件抵触如何解决SVN - update之后,如果有抵触,svn会弹窗提醒,图标状态会变动,并且会生成3个额定文件(.mine,.r7,.r9),能够点击文件右键,TortoiseSVN - edit conflicts解决,须要执行已解决来革除下面的3个额定文件。

July 14, 2021 · 1 min · jiezi

关于svn:svn客户端Cornerstone-上传-a文件

svn客户端Cornerstone 上传 .a文件2019-02-21ios开发中,应用百度地图须要用到*.a文件,而这些文件 Cornerstone居然不辨认,那么应该和git相似被 ignore掉了, 批改ignore配置就好了, 勾销勾选    use default  global  ignores,这时就能够应用自定义ignore配置。自定义配置,  删除 *.a点击save按钮

June 4, 2021 · 1 min · jiezi

关于svn:maven使用说明小记

Maven 翻译为"专家"、"外行",是 Apache 下的一个纯 Java 开发的开源我的项目。基于我的项目对象模型(缩写:POM)概念,Maven利用一个地方信息片断能治理一个我的项目的构建、报告和文档等步骤。 Maven 是一个项目管理工具,能够对 Java 我的项目进行构建、依赖治理。 Maven 也可被用于构建和治理各种我的项目,例如 C#,Ruby,Scala 和其余语言编写的我的项目。Maven 曾是 Jakarta 我的项目的子项目,现为由 Apache 软件基金会主持的独立 Apache 我的项目。作为一款日常应用软件,之前有许多不相熟的中央。明天略微整顿一下,如有不妥之处,能够留言交换。 maven装置1.下载maven的zip文件2.配置MAVEN_HOME:(对应为maven的解压地址门路)3.配置path:;%MAVEN_HOME%\bin4.查看是否装置胜利;mvn -version,则显示maven的版本 maven根本介绍1.次要分为本地仓库(confg上面的setting文件对应的local地址为本地仓库地址)和近程仓库(responselity中对应的近程仓库地址) <settings> <localRepository>本地目录⽬录</localRepository></settings>地方仓库 <repositories> <repository> <id>central</id> <name>Central Repository</name> <url>http://repo.maven.apache.org/...</url> <layout>default</layout> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories>2.从近程仓库地址拉取对应的jar文件,拉去到本地配置中,从而在我的项目能够援用到对应的jar3.外围文件pom,pom文件为外围配置核心, project 为工程跟标签modelVersion pom的版本模型,2.0或者3.0groupId 工程标识,一个组织或者一个我的项目惟一标识,www.felixwang.siteartifactId 这个是工程的名字,例如集体网站,博客之类的,groupId 和artifactId一起决定了在仓库中的地位version 这个是版本号packaging 打包的形式有三种,jar, war,还有EAR三种形式<modelVersion>4.0.0</modelVersion><groupId>com.xdclass</groupId><artifactId>demo</artifactId><version>1.0-SNAPSHOT</version>maven生命周期maven的生命周期是对所有构建过程中进行形象和对立。包涵了清理、初始化、编译、测试、打包、集成测试、验证、部署、的所有站点构建步骤。 maven的三个构建生命周期1.clean pre-clean执行后期须要清理筹备工作clean清理上一次实现构建post-clean执行前期须要实现的工作2.defaultvalidate 验证工程正确性compile 我的项目代码编译test 执行适宜单元测试框架测试相干packageȐ 打包代码verify 运行所有查看install装置到本地仓库地址(localRepository当中)deploy部署到近程仓库,能够共别人应用常用命令mvn validate 验证我的项目是否正确mvn package maven打包mvn generate-sources 生成源代码mvn compile 编译mvn test-compile 编译测试代码mvn test 运行测试mvn verify 运行查看mvn clean 清理我的项目mvn install 装置我的项目到本地仓库mvn deploy 公布我的项目到近程仓库mvn dependency:tree 显示Maven依赖树mvn dependency:list 显示Maven依赖列表罕用参数-D 指定参数,如 -Dmaven.test.skip=true 跳过单元测试;-P 指定 Profile 配置,能够用于辨别环境;web相干命令mvn tomcat:run 启动tomcatmvn jetty:run 启动jettymvn tomcat:deploy 运行打包部署 ...

April 25, 2021 · 1 min · jiezi

关于svn:SVN-Unable-to-create-pristine-install-stream

SVN 提交的时候报了一个谬误,如上图所示,莫名其妙地出了错,我最近也没有批改过什么 SVN 的设置,只是日常应用;我在资源管理器外面看了下 SVN 的同步目录的确呈现了异样,简直所有的文件夹都呈现了感叹号(就是那种 SVN 检测到被批改然而还没有提交的状态),在筹备提交的列表项外面发现了有许多空文件夹被删除了,我到当初还没有明确是被什么软件删除的,之前也没有用过垃圾清理这一类的软件,我就狐疑是不是中病毒了,于是赶紧下载了 360 ,但还是没有查出个所以然,也不明确为什么空文件夹被删除会影响 SVN 的提交,我在网上搜寻了下对于 SVN 的这些错误信息,找到了一个解决办法,在 SVN 的同步目录(同步目录上面有一个名字叫 '.svn' 的目录,可能有些状况下是暗藏目录)上面建设一个名字叫 'tmp' 的空文件夹: 就是在 '.svn' 目录上面新建这个文件夹,实现后就能够用 SVN 提交了,具体是什么原理还不分明,我猜是 SVN 提交的时候须要向这个目录做缓存,我看了很屡次这个文件夹上面都是空的。至于为什么我电脑上的空文件夹会被删除还不晓得,Windows 零碎应该不会被动删,也没有装垃圾清理软件,删除过后也没有什么提醒,预计是某个软件的破绽导致。 相干环境:Windows8.1 专业版、TortoiseSVN 1.10.1

April 16, 2021 · 1 min · jiezi

关于svn:如何构建安全的策略源码管理体系

前言 最近跟一些做策略研发的敌人沟通,发现不是技术背景的量化研究员,大部分都不会进行源码版本治理。最常见的场景就是每次有大的批改都把原来的代码重命名一下备份,而后再新建一个带不同标记的源码文件进行批改和测试。甚至还有一位敌人遭逢到交易服务器挂掉,导致最新版本的策略源码失落的这种极其状况。 遇到这样的敌人,笔者个别都会竭力安利一下版本治理的益处。正好最近筹备帮敌人整顿一下版本治理相干的一些货色,也就分享给大家,心愿能对各位有所帮忙。 版本治理简介版本治理的基本概念 置信技术背景的读者对版本治理都很相熟,本文这里还是简略介绍一下。版本治理就是对同一产品或零碎进行部分批改所产生的产品或零碎的系列变更状况进行记录、跟踪、保护和管制的过程。 版本治理的长处源码集中管理,能够从不同设施同步最新的源码源码每次批改都会被记录,随时能够进行回溯和跟踪除了代码中的正文,提交源码时的备注,能够帮忙开发人员从整体上理解某次批改的次要内容局部版本管理工具还提供丰盛的分支管理工具,非常不便版本治理的必要性对于略微简单一点的我的项目,不可能针对每个源文件进行独自的备份治理源码寄存在本地,很难反对多设施协同作业源码同时存在于本地和版本库中,相当于有了多点备份,除非版本库所在设施和本地设施同时不可逆的损坏,不然就不可能呈现源码失落的状况多人合作也须要依赖版本治理版本日志截图 代码比照截图 代码追溯截图 应用版本治理 后面大抵介绍了一下版本治理的一些特点,要建设版本库,抉择一个适合的版本管理工具,也是十分重要的。版本管理工具经验了不同期间风行的不同工具,而时下最风行的版本管理工具当为Git和SVN。Git绝对SVN来说更灵便,反对本地提交,同时也能更好的治理分支,所以受到整个行业的追捧。接下来本文将要介绍的三种构建版本库的办法,都是基于Git的。 利用代码托管平台治理源码 当下互联网有很多代码托管平台,这些平台一方面提供根底的版本治理的性能,同时还是开源库会集的中央。 github github是国外最风行的代码托管平台之一。次要面向开源及公有软件提供代码托管服务,只反对Git作为版本管理工具。现已被微软收买。 劣势 会集了大量的开源软件,其中不乏出名开源我的项目用户群微小,国内国外都有大量的用户除了开源我的项目,也反对公有库(最多3位合作人)国外知识产权爱护较好,源码的安全性绝对有保障一些劣势 因为国内网络的特殊性,github服务器在美国,国内访问速度受限重大公有库只反对最多3人合作老本 集体应用间接老本为0为了能够晦涩的拜访,可能须要购买VPNgitee gitee是开源中国(OSChina)推出的一个代码托管平台。基本功能和github基本一致,反对的版本管理工具还有SVN。 劣势 国内服务器,国内访问速度快反对间接从github同步开源我的项目,相当于针对github搭建了VPN劣势 国内认可度不够,只能在国内开源圈应用公有库只反对最多5人合作利用软件自建代码托管平台 量化策略的源码,相比软件源码更关注源码的安全性问题。有很多同行在管理策略源码的时候,都会放心本人策略源码泄露的问题。针对这样的顾虑,笔者举荐这些敌人能够思考自建一个代码托管平台。 相比在线的代码托管平台,自建托管平台的劣势是显著的: 相对公有齐全可控合作人数不受限服务配置更灵便 不过,这样的形式还是有一些劣势: 须要自备服务器,如果是租云机,老本至多上千一年引入技术栈太多,大多数量化研究员并不能很好地使用 然而对于一些曾经有设施投入的敌人,这也是一个十分不错的抉择。如果有敌人须要采纳这种形式搭建本人的版本治理的话,笔者目前在公司内采纳的是Gitblit进行代码治理,能够理解一下。 利用云盘搭建本地托管平台 后面介绍的两种办法,都是惯例的办法,要不然是安全性存疑,要不然是老本太高,还须要引入额定的技术栈。笔者明天着重想介绍的计划是第三种计划:利用云盘搭建本地托管平台。 基本原理这种办法有两个必要条件: SVN和Git都反对基于本地文件系统的版本库,简略来说就是版本库能够建在本地的一个文件夹中云盘的实时同步性能,笔者应用的是360云盘,同类的产品有坚果云等基于以上两个必要条件,就能够通过在云盘映射到本地的文件夹下,新建一个专用的文件夹,在此文件件建设一个本地的版本库(SVN、Git都能够),在应用的时候,只须要将版本库映射为云盘的本地门路即可。 搭建流程口说无凭,上面笔者以本人库为例,给大家展现一下搭建的流程。 先购买反对同步的云盘(请留神容量是否足够) 装置云盘同步软件,并映射到本地目录 新建一个SourceGit目录,并 利用Git在SourceGit创立一个纯版本库 新建一个工作目录,并clone方才建设的版本库 在工作目录新建一个readme.md,并轻易写一些内容 提交readme.md到本地版本库中(WorkDir) 将代码推送到近程版本库中(云盘中的SourceGit目录) 以上就是笔者重点举荐的计划,这种计划除了提供了一种残缺的源码治理形式以外,最重要的一点,可能也是诸多量化从业人员关注的一点就是,源码的私密性和安全性有相对的保障。起因如下: 云盘都是集体应用,很难外泄源码推送到近程版本库(即云盘中)当前,都是二进制模式存储的除非有人很分明的晓得用户应用云盘的形式以及云盘中某个目录的文件到底是什么文件,不然个别状况下,即便拿到这些二进制文件也是没有用的结束语 置信通过本文的介绍,各位读者对于如何治理本人的策略源码应该有了一个大抵的理解了。因为工夫无限,本文没有开展各种工具的具体用法。如果有读者对笔者举荐的计划有趣味,想要尝试的话,有疑难能够再私信笔者理解具体做法。 WonderTrader旨在给各位量化从业人员提供更好的轮子,将技术相干的货色都封装在平台中,力求给策略研发带来更好的策略开发体验。 随着WonderTrader逐步被更多人理解,有不少敌人对WonderTrader的架构设计和源码体现出十分浓重的趣味,想要深刻地理解一下WonderTrader的外部代码细节。也给笔者提出了一些心愿晓得架构细节的想法。笔者思前想后了一段时间,决定在之后的几个星期,公布一个系列文章,次要就是介绍WonderTrader的一些设计细节。文章内容可能有点偏技术,心愿感兴趣的敌人届时多捧场。 最初再安利一下WonderTrader WonderTrader的github地址:https://github.com/wondertrad... WonderTrader官网地址:https://wondertrader.github.io wtpy的github地址:https://github.com/wondertrad... 市场有危险,投资需谨慎。以上陈说仅作为对于历史事件的回顾,不代表对将来的观点,同时不作为任何投资倡议。

March 7, 2021 · 1 min · jiezi

关于svn:Ubantu搭建svn服务器

1.卸载svn 利用以下命令查看本人的零碎是否曾经装置了svn: svn 下面显示为未装置,如果显示一下信息阐明已装置,能够应用以下命令进行卸载: sudo apt-get remove --purge subversion (–purge 选项示意彻底删除改软件和相干文件) 2.装置svn 装置前倡议更新一下z,再进行装置: sudo apt-get update sudo apt-get install subversion 上图显示装置胜利。 能够验证一下,通过如下命令: svn help //--svn帮忙 svn --version //--svn版本 svnserve --version //--svn server版本 3.创立SVN版本库 a:创立我的项目目录和svn仓库: sudo mkdir /home/svn sudo mkdir /home/svn/repository sudo chmod -R 777 /home/svn/repository sudo svnadmin create /home/svn/repository 执行命令后,会在repository下生成以下文件: 对db进行权限设置: sudo chmod -R 777 db 注: 如果不执行上述命令,会报如下谬误: 这是因为咱们用的都是sudo权限做的操作,默认只有root用户对文件夹才有写权限,因为root的umask是0022,别的用户没有写权限。 设置拜访权限:须要对conf文件夹下的文件进行批改vim /usr/local/svn/repository/conf/svnserve.conf 简略的批改几处配置 匿名用户可读anon-access = read(可改成none,即不可读)#权限用户可写auth-access = write#密码文件为passwdpassword-db = passwd#权限文件为authzauthz-db = authz(去掉后面的#,并且顶格,不然可能会报错) ...

December 25, 2020 · 1 min · jiezi

关于svn:SVN

SVN次要内容SVN介绍简介 SVN全称Subversion,是一个凋谢源代码的版本控制系统,Subversion 在 2000 年由 CollabNet Inc 开发,当初倒退成为 Apache 软件基金会的一个我的项目,同样是一个丰盛的开发者和用户社区的一部分。 SVN是一个凋谢源代码的版本控制系统,治理着随工夫扭转的数据。这些数据搁置在一个地方材料档案库(repository) 中。 这个档案库很像一个一般的文件服务器, 不过它会记住每一次文件的变动。 这样你就能够把档案复原到旧的版本, 或是浏览文件的变动历史。说得简略一点SVN就是用于多集体共同开发同一个我的项目,共用资源的目标。 次要作用目录版本控制Subversion 实现了一个 “虚构” 的版本控管文件系统, 可能依工夫跟踪整个目录的变动。 目录和文件都能进行版本控制。 实在的版本历史Subversion中,能够减少(add)、删除(delete)、复制(copy)和重命名(rename),无论是文件还是目录。所有的新加的文件都从一个新的、洁净的版本开始。 主动提交一个提交动作,不是全副更新到了档案库中,就是齐全不更新。这容许开发人员以逻辑区间建设并提交变动,以避免当局部提交胜利时呈现的问题。 … 基本概念Repository(源代码库):源代码对立寄存的中央Checkout(提取):当你手上没有源代码的时候,你须要从repository checkout一份Commit(提交):当你曾经批改了代码,你就须要Commit到repositoryUpdate (更新):当你曾经Checkout了一份源代码, Update后就能够和Repository上的源代码同步工作流程开始新一天的工作 1、从服务器下载项目组最新代码。(Checkout)2、如果曾经Checkout并且有人已Commit了代码,你能够更新以取得最新代码。(Update) 3、进入本人的分支,进行工作,每隔一个小时向服务器本人的分支提交一次代码(很多人都有这个习惯。因为有时候本人对代码改来改去,最初又想还原到前一个小时的版本,或者看看前一个小时本人批改了哪些代码,就须要这样做了)。(Commit) 4、下班时间快到了,把本人的分支合并到服务器主分支上,一天的工作实现,并反映给服务器。(Commit) 留神:如果两个程序员同时批改了同一个文件, _SVN能够合并这两个程序员的改变,实际上SVN治理源代码是以行为单位的,就是说两个程序员只有不是批改了同一行程序,SVN都会主动合并两种批改。如果是同一行,SVN会提醒文件Confict, 抵触,须要手动确认。_ 生命周期创立版本库 版本库相当于一个集中的空间,用于寄存开发者所有的工作成绩。版本库不仅能寄存文件,还包含了每次批改的历史,即每个文件的变动历史。 Create 操作是用来创立一个新的版本库。大多数状况下这个操作只会执行一次。当你创立一个新的版本库的时候,你的版本控制系统会让你提供一些信息来标识版本库,例如创立的地位和版本库的名字。 检出 Checkout 操作是用来从版本库创立一个工作正本。工作正本是开发者私人的工作空间,能够进行内容的批改,而后提交到版本库中。 更新 顾名思义,update 操作是用来更新版本库的。这个操作将工作正本与版本库进行同步。因为版本库是由整个团队共用的,当其他人提交了他们的改变之后,你的工作正本就会过期。 让咱们假如 Tom 和 Jerry 是一个我的项目的两个开发者。他们同时从版本库中检出了最新的版本并开始工作。此时,工作正本是与版本库齐全同步的。而后,Jerry 很高效的实现了他的工作并提交了更改到版本库中。 此时 Tom 的工作正本就过期了。更新操作将会从版本库中拉取 Jerry 的最新改变并将 Tom 的工作正本进行更新。 执行变更 当检出之后,你就能够做很多操作来执行变更。编辑是最罕用的操作。你能够编辑已存在的文件来,例如进行文件的增加/删除操作。 你能够增加文件/目录。然而这些增加的文件目录不会立即成为版本库的一部分,而是被增加进待变更列表中,直到执行了 commit 操作后才会成为版本库的一部分。 ...

November 30, 2020 · 2 min · jiezi

关于svn:内网穿透对外共享文件

本节教程教大家如何对外共享本机的文件[](http://neiwangchuantou.cn/arc... "章节链接")一、注册网云穿官网传送门进入官网后,点击右上角登录 / 注册,注册网云穿账号,可微信扫码间接注册。注册完之后,咱们回到官网,点击支付收费隧道。 支付结束后,进入控制台首页,点击隧道治理,会看到已支付的收费隧道。PS 网云穿赠送的这条试用隧道能够永恒收费应用,能够欢快地白嫖了!如图,点击隧道治理后,隧道曾经呈现在账户中 点击最左边的配置隧道 网云穿 - 配置隧道 1. 内网地址,就填写你本地的地址:127.0.0.1 (或其余局域网地址)2. 内网端口,文件共享就填50123{网云穿自带的文件共享,内网端口默认为50123 能够按本人穿透需要批改内网端口}3. 二级域名,软件收费赠送一个二级域名4. 穿透协定,如果要穿透网站,能够抉择 Http,穿透数据库、远程桌面等就选 Tcp点击确定即可,隧道配置结束 二、下载客户端① 官网下载 windows 客户端并解压、启动。 ②启动客户端 如图所示,曾经登录胜利,进入软件主界面,咱们尝试一下文件共享咱们轻易抉择一个门路,点击开启共享1、抉择共享门路 2、设置拜访明码 3、点击开始共享 启动隧道,即可通过映射门路拜访本地文件,映射门路是能够在外网间接拜访的设置结束,咱们复制映射地址来浏览器拜访看一下 输出拜访明码测试胜利,可抉择拜访,共享结束,即可敞开共享

November 26, 2020 · 1 min · jiezi

关于svn:SVN使用

权限获取发送邮件申请开明svn权限 代码获取在集体目录新建文件夹 填写urlurl: http://svnedge.ebaotech.com/svn/aica 在须要下载的代码目录右键 点击 Checkout实现下载

October 30, 2020 · 1 min · jiezi

关于svn:svn-文件部分提交

以前用git的时候,代码能够局部暂存而后提交切到svn后发现没有这个性能,找了一圈,发现小乌龟提供了一个相似性能: 这个不起眼的选项 大略意思就是选了这个选项后,他会帮你按目前状态备份一份,而后你就按本人需要改目前的文件而后提交(间接去掉不想提交的局部)。提交之后小乌龟会主动把备份还原回来。相当于未失落原来的状态。 emmmmm......尽管没那么完满,然而凑合着用吧。

October 10, 2020 · 1 min · jiezi

关于svn:SVN-E230001-Server-SSL-certificate-verification-failed

https://blog.csdn.net/zengwende/article/details/86518269

August 10, 2020 · 1 min · jiezi

关于svn:centos7上svn配置

转载:https://blog.csdn.net/weixin_39218464/article/details/104093559https://blog.csdn.net/jctian000/article/details/80623621 折腾一下,所以还是记录下来不便当前应用(须要先装置svn)为了当前打算,能够配置多个仓库 1、先建设总仓库目录: mkdir -p /home/svn/project2、在总目录中创立仓库的文件夹,以及应用命令创立版本库: mkdir -p /home/svn/project/你的我的项目1svnadmin create /home/svn/project/你的我的项目1当前其余我的项目有需要的话,能够应用一下命令(以此类推): mkdir -p /home/svn/project/你的我的项目2svnadmin create /home/svn/project/你的我的项目23、如果是多个我的项目的话,方便管理。进入你的我的项目1目录下的conf文件夹。将其中的authz与passwd文件复制到project目录下(如果是单个我的项目疏忽这一步) cd /home/svn/project/你的我的项目1cp authz ../../cp passwd ../../4、批改authz和passwd文件4.1、passwd是用户账号配置如下图,等号前是账号,后是明码4.2、authz是权限配置如下图,只是很简略粗犷的配置一下,所有我的项目下都领有读写权限。如须要能够百度一下 5、最初批改svn服务配置文件svnserve.conf如下图:留神图片里的password-db和authz-db是多我的项目配置代表专用一份用户和权限配置。单我的项目请把两个../../都删了,只保留英文字母 6、启动和敞开svn服务:6.1、启动: svnserve -d -r /home/svn/project/6.2、敞开: killall svnserve到这里svn的配置就能够完结了。 上面记录一下和web搭配开发第一步:设置钩子自动更新 实现SVN与WEB同步,能够CO一个进去,也能够间接用自动更新web目录的办法,咱们要在svn版本库中配置钩子来实现,就是创立一个post-commit的配置文件,对其进行简略的配置,简简单单的四步就能够实现Linux下SVN自动更新web目录配置。 1、建设你的web程序目录 mkdir -p /home/wwwroot2、进入你建设的web程序目录(svn checkout能够简写为co) cd /home/wwwroot3、检出 不重命名文件夹,间接在当前目录下检出 svn checkout svn://localhost/你的我的项目1 检出文件并且重命名文件夹 svn checkout svn://localhost/你的我的项目2 你的我的项目3 第二步:在我的项目库的 hooks/ 目录下新建 post-commit 文件 【钩子脚本】 增加脚本内容如下 export LANG=en_US.UTF-8`DIR=/home/wwwrootWEB=/home/wwwroot/你的我的项目svn update $WEB --username joy --password 123456 --no-auth-cachechown -R www:www $WEBWEB=左边改成你理论的web目录 ...

July 29, 2020 · 1 min · jiezi

关于svn:centos7上svn配置

转载:https://blog.csdn.net/weixin_39218464/article/details/104093559https://blog.csdn.net/jctian000/article/details/80623621 折腾一下,所以还是记录下来不便当前应用(须要先装置svn)为了当前打算,能够配置多个仓库 1、先建设总仓库目录: mkdir -p /home/svn/project2、在总目录中创立仓库的文件夹,以及应用命令创立版本库: mkdir -p /home/svn/project/你的我的项目1svnadmin create /home/svn/project/你的我的项目1当前其余我的项目有需要的话,能够应用一下命令(以此类推): mkdir -p /home/svn/project/你的我的项目2svnadmin create /home/svn/project/你的我的项目23、如果是多个我的项目的话,方便管理。进入你的我的项目1目录下的conf文件夹。将其中的authz与passwd文件复制到project目录下(如果是单个我的项目疏忽这一步) cd /home/svn/project/你的我的项目1cp authz ../../cp passwd ../../4、批改authz和passwd文件4.1、passwd是用户账号配置如下图,等号前是账号,后是明码4.2、authz是权限配置如下图,只是很简略粗犷的配置一下,所有我的项目下都领有读写权限。如须要能够百度一下 5、最初批改svn服务配置文件svnserve.conf如下图:留神图片里的password-db和authz-db是多我的项目配置代表专用一份用户和权限配置。单我的项目请把两个../../都删了,只保留英文字母 6、启动和敞开svn服务:6.1、启动: svnserve -d -r /home/svn/project/6.2、敞开: killall svnserve到这里svn的配置就能够完结了。 上面记录一下和web搭配开发第一步:设置钩子自动更新 实现SVN与WEB同步,能够CO一个进去,也能够间接用自动更新web目录的办法,咱们要在svn版本库中配置钩子来实现,就是创立一个post-commit的配置文件,对其进行简略的配置,简简单单的四步就能够实现Linux下SVN自动更新web目录配置。 1、建设你的web程序目录 mkdir -p /home/wwwroot2、进入你建设的web程序目录(svn checkout能够简写为co) cd /home/wwwroot3、检出 不重命名文件夹,间接在当前目录下检出 svn checkout svn://localhost/你的我的项目1 检出文件并且重命名文件夹 svn checkout svn://localhost/你的我的项目2 你的我的项目3 第二步:在我的项目库的 hooks/ 目录下新建 post-commit 文件 【钩子脚本】 增加脚本内容如下 export LANG=en_US.UTF-8`DIR=/home/wwwrootWEB=/home/wwwroot/你的我的项目svn update $WEB --username joy --password 123456 --no-auth-cachechown -R www:www $WEBWEB=左边改成你理论的web目录 ...

July 29, 2020 · 1 min · jiezi

关于svn:svn学习记录

技巧整顿SVN版本自动更新揭示SVN补交log配置SVN反对http协定拜访svn装置第一步,搭建svn服务器(在centos7环境下) 先查看svn是否装置 svn --version若没有,则 yum intall subversion -y在运行一次svn --version确认胜利 接下来咱们就在服务器创立一个文件夹,用来寄存svn版本库。 创立文件夹/home/svn mkdir /home/svn创立一个svn仓库 svnadmin create /home/svn/project能够看到svn版本库创立胜利 ls /home/svn/project上面须要批改这个版本库配置 cd /home/svn/project1.批改conf/svnserve.conf vi svnserve.conf[general]anon-access = noneauth-access = writepassword-db = passwdauthz-db = authzrealm = My First Repositoryanon-access: 管制非鉴权用户拜访版本库的权限,取值范畴为"write"、"read"和"none"。 即"write"为可读可写,"read"为只读,"none"示意无拜访权限。 默认值:readauth-access: 管制鉴权用户拜访版本库的权限。取值范畴为"write"、"read"和"none"。 即"write"为可读可写,"read"为只读,"none"示意无拜访权限。 默认值:writeauthz-db: 指定权限配置文件名,通过该文件能够实现以门路为根底的访问控制。 除非指定绝对路径,否则文件地位为绝对conf目录的相对路径。 默认值:authzrealm: 指定版本库的认证域,即在登录时提醒的认证域名称。若两个版本库的 认证域雷同,倡议应用雷同的用户名口令数据文件。 默认值:一个UUID(Universal Unique IDentifier,全局惟一标示)。配置用户名和明码vi passwd用户名口令文件由svnserve.conf的配置项password-db指定,默认为conf目录中的passwd。该文件仅由一个[users]配置段组成。配置格局如下 <用户名> = <口令>[users]admin = adminthinker = 123456这里咱们创立2个用户admin、thinker. 批改配置文件vi authz# 增加用户组g_admin,这个组里蕴含admin这个2个用户 [groups]g_admin = admin,thinker# 版本仓库根目录下用户组`g_admin`的权限设置,会主动递归[admintools:/]@g_admin = rw配置实现之后就能够启动svn服务 svnserve -d -r /home/svn查看是否启动 ...

July 26, 2020 · 1 min · jiezi

svn实现钉钉代码提交通知

欢迎加入前端交流群:749539640 svn其实也和github一样有自己的钩子,我们先看下效果 钉钉机器人配置(webhook生成)设置=>添加机器人 添加自定义机器人,这里的关键词添加#即可 复制webhook svn设置我们进入到svn的服务器代码目录,会看到有个hooks的文件夹 目前svn提供了5个hooks,今天我们只介绍post-commit参考 它在事务完成后运行,创建一个新的修订版本。大多数人用这个钩子来发送关于提交的描述性电子邮件,或者作为版本库的备份。版本库传给程序两个参数:到版本库的路径和被创建的新的修订版本号。退出程序会被忽略。 接下来我们进入hooks文件夹,执行 vim post-commit如果没有会自动新建此文件 键入代码 #!/bin/bash# svn中变量1为仓库路径,2为提交版本号REPOS="$1"REV="$2"# 设置默认字符集,否则post信息到钉钉时中文乱码export LANG=en_US.UTF-8# 下方svnlook命令获取相应的结果time=$(date +%F/%T)AUTHOR=$(/bin/svnlook author -r ${REV} ${REPOS})CHANGEDDIRS=$(/bin/svnlook dirs-changed $REPOS)MESSAGE=$(/bin/svnlook log -r $REV $REPOS)CONTENT=提交时间:${time}\\n提交版本:#${REV}\\n提交者:${AUTHOR}\\n提交备注:${MESSAGE}\\n修改目录:$CHANGEDDIRScurl 'https://oapi.dingtalk.com/robot/send?access_token=这里输入你的webhooks的token' \ -H 'Content-Type: application/json' \ -d '{"msgtype": "text", "text": { "content":"'$CONTENT'" } }'我说一下之前钉钉webhoos生成时候安全设置的#号和上述代码中提交版本后的#对应了起来最后测试效果就是文字开始的图片!每次提交代码都会触发postcommit hook自动推送信息到钉钉

July 2, 2020 · 1 min · jiezi

Ubuntu下SubversionSVN的快速安装与配置

如果你是一个软件开发者,你一定对Subversion不会感到陌生。Subversion是一个自由开源的版本控制系统。在Subversion管理下,文件和目录可以超越时空。Subversion将文件存放在中心版本库里,这个版本库很像一个普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况,这样就可以借此将数据恢复到以前的版本,并可以查看数据的更改细节。正因为如此,许多人将版本控制系统当作一种神奇的“时间机器”。 如何快速搭建Subversion服务本文介绍的是如何在Ubuntu下通过URLOS快速搭建Subversion服务,没有复杂的命令行,一键安装。 首先,安装ULROS: curl -LO www.urlos.com/siu && sh siu安装成功后,通过http://ip:9968进行访问,使用默认账号密码登录URLOS。 在应用市场中搜索“Subversion”,找到Subversion后,点击安装: 在基本信息中填写服务名称,选择运行节点,填写端口号: 在设置SSH参数中输入一个SSH密码,注意这里不是服务器的SSH: 设置完成后点击提交按钮即可。到这里Subversion服务就搭建完成了。 如何使用Subversion我们可以使用SVN客户端访问地址:svn://ip/project, 默认账户:admin 密码:urlos520;输入svn://ip/project浏览版本库,然后向版本库中添加一个文件输入用户名:admin,密码:urlos520文件添加成功

July 15, 2019 · 1 min · jiezi

借助URLOS快速安装subversion服务

环境需求最低硬件配置:1核CPU,1G内存(1+1)提示:如果你的应用较多,而主机节点的硬件配置较低,建议在部署节点时开通虚拟虚拟内存;生产环境建议使用2G或以上内存;推荐安装系统:Ubuntu-16.04、Ubuntu-18.04、CentOS7.X、Debian9X的64位的纯净的操作系统;URLOS安装curl -LO www.urlos.com/iu && sh iusubversion服务安装流程登录URLOS系统后台,在应用市场中搜索“subversion”,找到之后,直接点击安装按填写服务名称、选择运行节点、服务端口号、选择智能部署填写ssh密码然后点击“提交”按钮,等待部署完成;签出代码库 svn checkout svn://ip/project # 这里的ip是你服务器的ip用户名是:admin密码是:urlos520

July 15, 2019 · 1 min · jiezi

SVN的操作流程及规范

安装说明:下载路径:https://tortoisesvn.net/downl... 选择对应版本: 安装中文语言包: 右键进入setting设置,选择中文简体。使用说明: 检出项目: 如果项目已经在服务器的仓库里,需要把它检出到本地。 首先在本地创建一个空文件夹。选中创建的文件夹,然后右键选择SVN检出。导入项目: 如果本地建立好了项目,需要把项目推到SVN上,此时应怎么做呢?右键选择版本库浏览器。 一定要先获取锁定,然后在更新。 提交: 当增加了新的文件时,新文件会有一个蓝色问号(蓝色表示不属于版本库的未知文件,未知文件是不能提交的) 要先增加,然后在再提交。 更新: 多人团队协作开发时,同学B写完代码提交到了SVN上,如果你想获取最新的修改,就需要选择更新(先获取锁定、然后更新)。 查看日志: 可以查看在具体时间对项目做了什么操作。 版本回滚: 如果你改了东西,但是还没有提交,可以使用还原功能。 当我们改动项目并提交过之后,可以通过版本回滚可以将文件恢复到以前的版本。具体做法:右键更新至版本,通过查看日志来选择版本,然后回滚即可。 注意事项: 使用SVN进行代码合入时: 1、[endif]先获取锁定 2、[endif]更新 3、[endif]利用比较工具(Beyond Compare)逐行的比较 4、[endif]如果不仅修改了代码,而且有新的文件时,要进行增加操作 5、[endif]提交代码(一定要添加修改操作的信息) 6、[endif]合入之后释放锁定(一般会自动释放)

July 3, 2019 · 1 min · jiezi

Linux-SVN-命令

SVN 安装官网下载: http://subversion.apache.org/... SVN客户端TortoiseSVN :https://tortoisesvn.net/downl... 1 yum install subversion安装 yum install subversion2 新建一个目录用于存储SVN目录 mkdir svn 3 新建一个测试仓库 svnadmin create /svn/code/ 4 目录结构说明 hooks目录:放置hook脚步文件的目录locks目录:用来放置subversion的db锁文件和db_logs锁文件的目录,用来追踪存取文件库的客户端format目录:是一个文本文件,里边只放了一个整数,表示当前文件库配置的版本号conf目录:是这个仓库配置文件(仓库用户访问账户,权限)5 conf 目录详情 5.1 authz 配置新用户的授权文件. [groups]admin = demo1,demo2user = demo1[/svn/code/]@admin = rw @user = r备注: admin = demo1,demo22 创建admin组,组成员为:demo1,demo2 user = demo1 创建用户组,用户成员:demo1 [code:/] 赋予根权限,为了便于管理和权限的控制,可以把权限细化到版本库中相应的目录 @admin = rw admin组有读写的权限 @user = r user组只有读的权限5.2 passwd 配置访问用户及密码 [users]demo1 = 123456demo2 = 1234565.3 svnserve.conf 配置SVN服务的配置文件 ...

June 17, 2019 · 1 min · jiezi

SVN-的图形化管理工具Cornerstone

在使用SVN时,常见的图形化界面管理工具Cornerstone使用如下 公司后台人员给出SVN地址(例如:https://101.226.241.210:8443/svn/kei-ks/项目名/IOS)和个人SVN账号点击左下角的加号选择 Add Repository显示如下界面 4 . 添加地址如下图 5.创建完成后就可以Check Out到本地 6.把项目拖到此文件夹就完成了

June 10, 2019 · 1 min · jiezi

Please-execute-the-Cleanup-command

下拉更新时有文件冲突,打开冲突使用线上版本,点击标记解决冲突,然后没等SVN加载处理好,手贱点击了“取消”,报错: Previous operation has not finished; run 'cleanup' if it was interruptedPlease execute the 'Cleanup' command.根据提示 使用SVN 自带的cleanup就可以解决, 然后报错,不行。网上很多方法要下载什么软件,但懒。 进入冲突目录,把冲突的文件XXX.r.mine(文件名记不清了)删掉,然后再使用一遍 cleanup,然后下拉,即可。

May 5, 2019 · 1 min · jiezi

SVN Update Error Please execute the ‘Cleanup‘ command 解决方案

问题 - SVN Update Error: Please execute the ‘Cleanup’ command详细描述使用SVN更新文件时,会碰到失败的情况(可能因为上次拉取被强制中断等操作),提示需要cleanup ,但是你clean up时又提示文件夹已经locked,这时候你又去release lock,但是还是失败,提示 Please execute the ‘Cleanup’ command.(TMD真难用)<!–more–>解决方案显然这个无法操作因为是svn文件被锁需要释放,但是手动释放又行不通,so需要进入被锁定文件夹所在的svn根目录,然后将隐藏文件设置为可见找到.svn文件夹,用数据库管理工具如navicat,datagrip等ide链接wc.db,这是一个sqlite数据库,找到WC_LOCK表 进去将被锁定的记录删除掉并提交更新到数据库。再去更新代码或文件时候就ok了

April 20, 2019 · 1 min · jiezi

maven项目在svn中的上传与检出

前言企业开发中经常使用svn来为我们控制代码版本,也经常使用maven来管理项目。下面将介绍一下如何将maven项目上传到svn中,如何将项目从svn中检出。上传到svnmaven项目上传与普通项目上传并无区别。这里做一下简单介绍:右击项目;选择Team;选择Share Project;仓库类型选择svn 点击next选择你要分享的资源库。点击next选择使用指定的模块名。然后在浏览中选择要上传的位置。然后点击finish。点击finish后进入同步视图界面。这个界面需要我们选择将哪些内容资源上传至svn。 我们将除了.classpath .project .setting .git 的文件选中然后右键选择提交(1.选中不需要提交的文件右键添加到忽略或者在window->preference->svn中设置忽略的文件)。检出检出maven项目与其他项目的区别在于检出后需要转换为maven项目在svn资源库中选中要导出的maven项目。然后右击选择 检出为。然后选择作为工作空间中的项目检出(注意不要选错)。点击finish。检出项目后,此时的项目并不是maven项目。需要转换为maven项目。选中项目然后右击 选择 configure 下的 convert to Maven Project。如果是聚合型maven项目我们上传时只上传总的聚合模块,当我们检出后可以先改项目删除,但记住删除时不要勾选delete project contents on disk.然后我们再导入maven项目即可。

February 14, 2019 · 1 min · jiezi

linux 搭建svn服务器

一:安装svnyum install -y subversion二:创建仓库1:创建仓库目录mkdir -p /var/project/test2:创建仓库svnadmin create /var/project/test创建成功后,在/var/project/test目录下如下目录:drwxr-xr-x. 2 root root 51 1月 30 13:26 confdrwxr-sr-x. 6 root root 4096 1月 30 13:26 db-r–r–r–. 1 root root 2 1月 30 13:26 formatdrwxr-xr-x. 2 root root 4096 1月 30 13:26 hooksdrwxr-xr-x. 2 root root 39 1月 30 13:26 locks-rw-r–r–. 1 root root 229 1月 30 13:26 README.txtconf目录下是svn的配置目录,其中包括:-rw-r–r–. 1 root root 1080 1月 30 13:26 authz #权限控制-rw-r–r–. 1 root root 309 1月 30 13:26 passwd #密码管理-rw-r–r–. 1 root root 3090 1月 30 13:26 svnserve.conf #SVN服务进程配置三:svn配置1:权限配置(/var/project/test/conf/authz)#用户分组(admin->管理员,development ->开发 other->其他)[groups]admin = test1 #管理员用户test1development = test2,test3 #开发用户test2,test3other = test4,test5,test6 #其他用户test4,,test5,test6#权限配置[/]@admin = rw #管理员读写权限@development = rw #开发读写权限@other = r #其他读权限test7 = rw #test7用户读写权限2:密码配置(/var/project/test/conf/passwd)#密码配置,格式为用户名=密码,密码为明文[users]test1 = test1test2 = test2test3 = test3test4 = test4test5 = test5test6 = test6test7 = test73:SVN服务进程配置(/var/project/test/conf/svnserve.conf)[general]anon-access = none #匿名用户无权访问auth-access = write #认证用户可读写password-db = passwd #指定用户认证密码文件authz-db = authz #指定权限配置文件四:启动svn服务(默认端口号3690)svnserve -d -r /var/project #-d 服务后台运行 -r 指定工作目录,/var/project表示指定工作目录,注意不能指定仓库名地址(/var/project/test)指定端口启动svnsvnserve -d -r /var/project –listen-port 3691五:关闭防火墙,或开启指定端口号1:关闭防火墙systemctl stop firewalld2:开启指定防火墙#开启3690端口firewall-cmd –zone=public –add-port=3690/tcp –permanent#刷新配置firewall-cmd –reload六:客户端连接并上传文件windows上连接svn1:新建一个目录,右击选择svn 检出2:在版本库上填写linux的svn地址 svn://ip:3690/仓库名 (这里的仓库名不是/var/project/test而是/test)2:填写用户名密码这时候我们可以看到此目录下生成了一个.svn文件,说明我们已经连接上了linux上的svn服务器3:上传文件现在我们新建一个test.txt文件,在里面随便填一些信息(1)右击选择add然后选择test.txt文件,点击确定,这时候我们会看到test.txt文件上会多了一个加号(2):上传右击选择提交填写备注选择要上传的文件后点击确定这时候我们可以看到test.txt文件上的加号会变成绿色的对号,表示上传成功但是这时候我们发现我们在/var/project/test目录下根本就没有找到我们上传的文件,这是为什么呢?难道我们没有上传成功,这是由于把文件上传到SVN版本库后,上传的文件不再以文件原来的格式存储,而是被svn以它自定义的格式压缩成版本库数据,存放在版本库中,svn服务器版本库有两种格式,一种为FSFS,一种为BDB这时候我们就需要在linux中实现检出4:检出svn checkout svn://192.168.11.201/test /data/test #svn://192.168.11.201/test表示需要检出的仓库地址 /data/test表示需要检出到哪个目录下这是我们可以在/data/test目录下看到我们之前在客户端上传的文件,但是现在问题又来了,我们在客户端上传文件之后,不可能每次都在服务器进行检出操作吧,那么如何进行自动检出呢?5:自动检出配置在/var/project/test/hooks目录下新建一个post-commit文件,post-commit文件添加内容为:#!/bin/shREPOS="$1" #仓库REV="$2" #版本号export.UTF-8 #编码SVN=/usr/bin/svn #svn地址WEB=/data/test #要更新的项目目录$SVN update $WEB –username test1 –password test1 #–username test1表示设置用户名 –password test1表示设置密码将post-commit设置为可执行chmod +x /var/project/test/hooks/post-commit到此自动检出配置完成,不过注意,第一次的时候需要手动检出,之后就不需要了,到此linux搭建svn服务器完成 ...

January 30, 2019 · 1 min · jiezi

CornerStone使用教程

前言不管你在什么公司,对我们程序员来说,都要使用源码版本控制工具,否则多人开发就成了很大的问题,而且源码一般都保存在公司的远程仓库中,这样也能保证写好的代码不会丢失。现在源码版本控制工具有两种:git和svn,使用git的团队应该是最多的,但是也有使用svn的,windows中svn客户端一般使用TortoiseSVN,mac中比较好用的当属CornerStone了,接下来主要介绍CornerStone的使用。使用教程安装由于Cornerstone是收费的,因此你可以去网上下载破解版,直接安装即可。配置远程仓库首先,打开CornerStone,在界面左下角出有一个“+”,点击后选择“Add Repository”。然后出现以下界面,选中SVN Server。其中,Server填写svn的服务器地址。如果主机后有端口路径,则Port填写相对应的端口。Path填写仓库访问路径。Title为名称,会显示在侧边栏中。Name和Password为你访问的用户名和密码。填写完后点击Add添加即可。注意:填写完后检查一下Path下面的合成的svn地址是不是 “svn://用户名@主机地址:端口号/路径” 格式。上传文件如果你想要将本地文件上传到svn仓库的话,可以直接将本地文件拖到repository的子文件夹中,或者点击软件上方的Import按钮,选择文件后点击import,填写提交信息即可。下载文件下载文件分为两种:Export和Check Out,Export后的项目不会与repository中的源文件相关联,是一个独立的版本。Check Out下来的文件会创建一个working copy,此文件与repository中源文件相关联,当有别人修改或是自己修改时,working copy会显示修改数量,白色数量为别人修改数量,灰色数量为自己修改数量,所以如果你是项目中的开发人员,可以选择check out。版本控制作为开发人员,我们要对代码进行版本控制,这时候就要将代码check out到本地。然后,当你要提交代码的时候,记得先要update代码,直到working copy不再显示白色圈,然后再commit自己的代码。暂时先写这些,以后要是遇到问题再添加。参考CornerStone的使用Cornerstone的使用

January 25, 2019 · 1 min · jiezi

SVN的使用(程序员的一天)

碰到要使用svn的场景,在这里总结一下,虽然git横着走,偶尔也要关怀一下老前辈一些通用场景查看日志svn log代码锁定或很多诡异情况svn cleanup编辑特定属性定制忽略规则svn propedit (pedit, pe) svn:ignore .依赖其他SVN路径svn propedit (pedit, pe) svn:externals .svn客户端更新svn upgrade一个分支上的工作流程入职加入一个现有项目你新加入某个团队,马上要参与到一个项目得开发,假设项目名为’abc’,那么首先要做的是获取项目代码svn checkout (co) https://your.svn/svn/abc/trunk abc确认工作目录中SVN得信息cd ~/projects/abcsvn info确认没有问题,就可以开始熟悉代码,展开具体的工作了发起一个新项目当然,也有可能是由你开始发起一个项目,那么就需要初始化项目工程放到SVN版本仓库中svn import abc https://your.svn/svn确认初始化成功svn list (ls) https://your.svn/svn/abc/trunk苦逼的码农上班当你已经融入一个项目后,就会进入一个工作周期,周期可能是这样的更新修改检查取消修改解决冲突提交更新来上班,打完卡,准备开始上班,第一件事就是更新你的工作目录cd ~/projects/abcsvn update (up)这样保证你的工作副本是最新的,并以此为基础开始工作修改打开编辑器修改属于常规用法,这里pass新增模块svn add new_module.py移除模块svn delete (del,remove,rm) old_modele.py重命名模块svn move (mv) module1.py module2.py新增目录svn mkdir directory复制模块svn copy (cp) dir/module.py /dir2/module.py终于一个任务完成了忙碌的一天过去了,又或者终于完成一个任务了,为了不做白工,需要将工作成果更新到版本仓库检查一下修改状态代码审查(code review)一下要先检查一下修改状态svn status (stat,st)执行上述命令会看到一些状态信息,可以看到修改了哪些文件,接下去一般会进行代码的审查工作(虽然实际中很多人把这步跳过去,但我个人认为不应该跳)代码审查代码审查的主要目的是要自己写的代码能通过单元测试,如果没有问题就要进行"提交"代码了,然后结束一个工作周期,当然,一般情况下没有那么顺利,总会出现一些特殊情况查看代码做了哪些修改svn diff (di)发现有些改动不满意,取消修改svn revert abc.py查看代码是谁写的svn blame (praise, annotate, ann)提交代码的流程提交代码需要经过如下过程再一次更新自己的工作副本将别人提交的工作代码进行合并(解决冲突)提交代码再一次更新自己的工作副本这一步即使不手动执行,也会出现这样一种情况,就是直接提交代码,发现没有提交成功,一看,原来别人也提交了代码,并且好死不死正好和你的代码属于同一个位置,这样也会产生冲突,所以建议提交代码前手动更新一次工作副本svn update (up)更新完工作副本,很多时候会产生代码冲突,既然冲突了,就是要解决冲突。由于各个工作的实际环境不一样,究竟是自己解决冲突还是别人处理,亦或者有其他额外处理,这都不一定,这边假设后提交代码的处理冲突(也就是你自己处理冲突),处理冲突人工确认并进行代码合并处理完毕后执行的命令svn resolve abc.py –accept working也有一个命令叫做svn resolved abc.py //这个命令按官方的说法是被上一个命令取代了,不推荐使用了冲突解决了,最后提交 svn commit (ci) 分支之间的操作创建新分支svn copy (cp) https://your.svn/svn/abc/trunk https://your.svn/svn/abc/branches/feature1切换到新分支确认当前在哪个分支svn info确认工作目录是干净的svn status (st)切换到刚刚创建的新分支svn switch (sw) https://your.svn/svn/abc/branches/feature1在新分支中工作就是上述的流程,一般情况下我们在分支上进行工作,不管是新特性分支还是debug分支当我们开发完一个新功能,或者排除一个bug之后,相关功能代码,测试代码,文档等都提交完毕,单元测试通过,代码审查没问题,审核通过,并在该分支的持续集成完整build同故宫,这个时候,就可以将开发分支合并到主分支(trunk)了合并到主分支确认分支工作目录干净svn status (st)切换工作目录会trunk(其实就是切换分支)svn switch (sw) https://your.svn/svn/abc/trunk切换完分支要确认当前在哪个分支(是否切换成功)svn info进行合并工作svn merge -r9527:9549 https://your.svn/svn/abc/branches/feature1合并分支的时候,一般会指定合并版本范围,一般都是分支建立时候的版本号到分支工作完毕时候最后一次提交的版本号,就是上述命令中-r后面的参数合并过程中很大情况下会出现代码冲突,解决就是了确认本地代码变更,代码审查一下,进行单元测试svn status(st)svn diff(di)确认合并完的代码没有问题,就正式提交到trunksvn commit (ci)合并完成之后,开发分支就没有用了,在适当时机删除(主要是公司制度)svn delete (del, remove, rm) https://your.svn/svn/abc/branches/feature1开发周期结束,发布新版本一般来说,我们有一个发布分支复制了trunk,当然我也常碰到以trunk作为发布分支的svn copy (cp) https://your.svn/svn/abc/trunk https://your.svn/branches/2.1.x复制最新的发布分支为标签svn copy (cp) https://your.svn/branches/2.1.x https://your.svn/svn/abc/tags/2.1.0正式发布(这个一般是自动化工具完成的)发布总的来说是比较复杂的,比如有:快速发布、快速回滚(包括数据回滚)、灰度发布等等情况一:完整包导出代码,执行打包命令(有些动态语言是不需要打包的)svn export https://your.svn/svn/abc/tags/2.1.0 abc情况二:补丁升级包这其实相对复杂,如果代码体量不是非常大,基本上使用情况一就行,因为需要综合运用下列命令,制作补丁安装升级包svn status (st)svn diff (di)svn patch情况三:线上更新(不推荐,看看就好)特别注意不能暴露“.svn”(特别是旧版本的SVN,每个目录下都会有“.svn”)svn update (up)svn switch (sw) https://your.svn/svn/abc/tags/2.1.0事实上,很多场景都是由自动化工具(即使是手动写脚本)可以代替手工操作,基本上都是一键发布好习惯要保持保持工作目录干净,即保证工作副本中的代码是一次完成一件事,如上流程可以看出来,如果目录不干净会导致很多冲突svn日志信息要使别人阅读的时候能知道本次提交做了什么svn提交之前要先更新,如果是用小乌龟图形界面没有这个问题,但是如果不先更新,各种冲突是很难受的提交之前进行代码审阅是一种更加严谨的方式,如果自己发现不了问题,可以试试小黄鸭调试法提交之前跑一下单元测试可以使代码更加健壮代码有变更要及时提交,一般会在自己的开发分支中进行结束这里涉及的场景很有限,官方文档还是要看的 ...

January 24, 2019 · 1 min · jiezi

大名鼎鼎的Requests库用了什么编码风格?

原文:https://www.kennethreitz.org/…作者:Kenneth Reitz原题:Kenneth Reitz’s Code Style™Requests 的代码库使用 PEP-8 编码风格。除了 PEP-8 中列出的标准外,我们还有一些指导原则:如果方便的话,行长(Line-length)可超过 79 个字符,达到 100 个字符。如果换行会导致严重的不方便,则行长可以超过 100 个字符。除非在字符串中出现单引号,否则始终使用单引号字符串(例如,’#flatearth’)。此外,PEP-8 推荐的用于连续行的编码风格毫无一点品味,绝不允许在 Requests 代码库使用:# 与开局定界符对齐foo = long_function_name(var_one, var_two, var_three, var_four)No。千万别。请。文档字符串(docstrings)应遵循以下语法:def the_earth_is_flat(): “““NASA divided up the seas into thirty-three degrees.””” passdef fibonacci_spiral_tool(): “““With my feet upon the ground I lose myself / between the sounds and open wide to suck it in. / I feel it move across my skin. / I’m reaching up and reaching out. / I’m reaching for the random or whatever will bewilder me. / Whatever will bewilder me. / And following our will and wind we may just go where no one’s been. / We’ll ride the spiral to the end and may just go where no one’s been. Spiral out. Keep going… "”” pass所有函数、方法和类都要求包含 docstrings 。除了对象数据模型方法(例如,repr),这些是此规则的例外。Thanks for helping to make the world a better place!资料来源(译注:即 Requests 的开发者指南):http://t.cn/E5VgNJF(译文完)K 神的这篇文章很短,实际上,这只是摘自 Requests 的开发者指南的一小部分。但是,关于灵活设定行长的部分,我举双手双脚赞同。如果你所在的公司有“清白盒”的优良传统(不仅指Python),那你极有可能遇到被迫换行的麻烦,而实际上才仅仅刚刚超出了几个字符。那时候,你就会明白,这 3 条灵活规则的好处了。另外,关于连续行的部分,PEP-8 相关内容在:http://t.cn/Rq4mxOoPEP-8 反对的是如下写法:# Arguments on first line forbidden when not using vertical alignment.# 不使用垂直对齐的参数禁止在第一行上foo = long_function_name(var_one, var_two, var_three, var_four)PEP-8 推荐的写法是垂直地将换行的参数对齐起始的参数:# 与开局定界符对齐foo = long_function_name(var_one, var_two, var_three, var_four)K 神反对了 PEP-8 推荐的写法。在我看来,任何有品味的人,都会反对以上的两种写法。即使一个方法的参数超级多,超出了 100 个字符,我本人也是极不情愿换行的。所以,K 神的说法深得我心。关于代码风格,没有绝对完全一致的标准。本文也不想引起争论。不过,我认同 K 神设定的规则,因为一种与主流不同的审美倾向,值得发现它的同类。—————–本文原创并首发于微信公众号【Python猫】,后台回复“爱学习”,免费获得20+本精选电子书。 ...

January 20, 2019 · 1 min · jiezi

版本管理工具之Git 和SVN

1.简介Git 是一个免费并且开源的分布式版本控制系统,被设计用来快速、高效的管理一切从小到大的项目。SVN是一个开源的集中式版本控制系统。这些数据放置在一个中央资料档案库(repository) 中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。 这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。2.区别集中式 VS 分布式那么什么是集中式版本控制系统,什么又是分布式版本控制系统呢?这两者又有什么区别呢?首先先说集中式版本控制系统,它的版本库是存放在中央服务器,但是开发人员用的都是自己的电脑,所以在干活之前,开发人员需要先从中央服务器获取最新的代码,然后才可以工作。工作完了,再把新代码传到中央服务器去。它最大的缺点就是必须联网才可以干活,没网就可以回家睡觉了。而且如果网速慢的话,你想要把代码从服务器下载下来或者提交代码到服务器都会非常慢。那么分布式版本控制系统又有何不同呢?首先所谓的分布式版本控制系统,没有所谓的 “中央服务器” 一说,因为每一台电脑上都有一个完整的版本库,每一台电脑理论上都可以是“中央服务器”。因为每一台电脑都有一个完整的版本库,所以工作时并不需要联网。如果是团队协作的话,只需要把修改的文件推送给对方即可。那么有的人会说,既然如此,为何还有 Git 服务器?其实这个服务器只是非常稳定,24 小时开机,为了方便团队之间不同的人交换大家的修改而已。没有它一样可以正常的工作,而集中式便不行。所以在安全性上也是分布式的更好,如果某一台电脑坏了,只需要拷贝一份版本库即可。而集中式的服务器如果出了故障那就是很大的问题了。当然 Git 相比于 SVN 这种集中式版本控制系统,并不仅有这一点优势,Git 强大的分支管理,快速、高效的处理,便捷的使用,这些优势在我的教程中你会慢慢感受到!3.拓展GitHub 是一个利用 Git 进行版本控制、专门用于存放软件代码与内容的共享虚拟主机服务。Github 社区 - :[ https://github.com]

January 18, 2019 · 1 min · jiezi

Python进阶:全面解读高级特性之切片!

导读:切片系列文章连续写了三篇,本文是对它们做的汇总。为什么要把序列文章合并呢?在此说明一下,本文绝不是简单地将它们做了合并,主要是修正了一些严重的错误(如自定义序列切片的部分),还对行文结构与章节衔接做了大量改动,如此一来,本文结构的完整性与内容的质量都得到了很好的保证。众所周知,我们可以通过索引值(或称下标)来查找序列类型(如字符串、列表、元组…)中的单个元素,那么,如果要获取一个索引区间的元素该怎么办呢?切片(slice)就是一种截取索引片段的技术,借助切片技术,我们可以十分灵活地处理序列类型的对象。通常来说,切片的作用就是截取序列对象,然而,对于非序列对象,我们是否有办法做到切片操作呢?在使用切片的过程中,有什么要点值得重视,又有什么底层原理值得关注呢?本文将主要跟大家一起来探讨这些内容,希望我能与你共同学习进步。1、切片的基础用法列表是 Python 中极为基础且重要的一种数据结构,也是最能发挥切片的用处的一种数据结构,所以在前两节,我将以列表为例介绍切片的一些常见用法。首先是切片的书写形式:[i : i+n : m] ;其中,i 是切片的起始索引值,为列表首位时可省略;i+n 是切片的结束位置,为列表末位时可省略;m 可以不提供,默认值是1,不允许为0 ,当m为负数时,列表翻转。注意:这些值都可以大于列表长度,不会报越界。切片的基本含义是:从序列的第i位索引起,向右取到后n位元素为止,按m间隔过滤 。li = [1, 4, 5, 6, 7, 9, 11, 14, 16]# 以下写法都可以表示整个列表,其中 X >= len(li)li[0:X] == li[0:] == li[:X] == li[:] == li[::] == li[-X:X] == li[-X:]li[1:5] == [4,5,6,7] # 从1起,取5-1位元素li[1:5:2] == [4,6] # 从1起,取5-1位元素,按2间隔过滤li[-1:] == [16] # 取倒数第一个元素li[-4:-2] == [9, 11] # 从倒数第四起,取-2-(-4)=2位元素li[:-2] == li[-len(li):-2] == [1,4,5,6,7,9,11] # 从头开始,取-2-(-len(li))=7位元素# 步长为负数时,列表先翻转,再截取li[::-1] == [16,14,11,9,7,6,5,4,1] # 翻转整个列表li[::-2] == [16,11,7,5,1] # 翻转整个列表,再按2间隔过滤li[:-5:-1] == [16,14,11,9] # 翻转整个列表,取-5-(-len(li))=4位元素li[:-5:-3] == [16,9] # 翻转整个列表,取-5-(-len(li))=4位元素,再按3间隔过滤# 切片的步长不可以为0li[::0] # 报错(ValueError: slice step cannot be zero)上述的某些例子对于初学者(甚至很多老手)来说,可能还不好理解,但是它们都离不开切片的基本语法,所以为方便起见,我将它们也归入基础用法中。对于这些样例,我个人总结出两条经验:(1)牢牢记住公式[i : i+n : m] ,当出现缺省值时,通过想象把公式补全;(2)索引为负且步长为正时,按倒数计算索引位置;索引为负且步长为负时,先翻转列表,再按倒数计算索引位置。2、切片的高级用法一般而言,切片操作的返回结果是一个新的独立的序列(PS:也有例外,参见《Python是否支持复制字符串呢?》)。以列表为例,列表切片后得到的还是一个列表,占用新的内存地址。当取出切片的结果时,它是一个独立对象,因此,可以将其用于赋值操作,也可以用于其它传递值的场景。但是,切片只是浅拷贝 ,它拷贝的是原列表中元素的引用,所以,当存在变长对象的元素时,新列表将受制于原列表。li = [1, 2, 3, 4]ls = li[::]li == ls # Trueid(li) == id(ls) # Falseli.append(li[2:4]) # [1, 2, 3, 4, [3, 4]]ls.extend(ls[2:4]) # [1, 2, 3, 4, 3, 4]# 下例等价于判断li长度是否大于8if(li[8:]): print(“not empty”)else: print(“empty”)# 切片列表受制于原列表lo = [1,[1,1],2,3]lp = lo[:2] # [1, [1, 1]]lo[1].append(1) # [1, [1, 1, 1], 2, 3]lp # [1, [1, 1, 1]]由于可见,将切片结果取出,它可以作为独立对象使用,但是也要注意,是否取出了变长对象的元素。切片既可以作为独立对象被“取出”原序列,也可以留在原序列,作为一种占位符使用。不久前,我介绍了几种拼接字符串的方法(链接见文末),其中三种格式化类的拼接方法(即 %、format()、template)就是使用了占位符的思想。对于列表来说,使用切片作为占位符,同样能够实现拼接列表的效果。特别需要注意的是,给切片赋值的必须是可迭代对象。li = [1, 2, 3, 4]# 在头部拼接li[:0] = [0] # [0, 1, 2, 3, 4]# 在末尾拼接li[len(li):] = [5,7] # [0, 1, 2, 3, 4, 5, 7]# 在中部拼接li[6:6] = [6] # [0, 1, 2, 3, 4, 5, 6, 7]# 给切片赋值的必须是可迭代对象li[-1:-1] = 6 # (报错,TypeError: can only assign an iterable)li[:0] = (9,) # [9, 0, 1, 2, 3, 4, 5, 6, 7]li[:0] = range(3) # [0, 1, 2, 9, 0, 1, 2, 3, 4, 5, 6, 7]上述例子中,若将切片作为独立对象取出,那你会发现它们都是空列表,即 li[:0]==li[len(li):]==li[6:6]==[] ,我将这种占位符称为“纯占位符”,对纯占位符赋值,并不会破坏原有的元素,只会在特定的索引位置中拼接进新的元素。删除纯占位符时,也不会影响列表中的元素。与“纯占位符”相对应,“非纯占位符”的切片是非空列表,对它进行操作(赋值与删除),将会影响原始列表。如果说纯占位符可以实现列表的拼接,那么,非纯占位符可以实现列表的替换。li = [1, 2, 3, 4]# 不同位置的替换li[:3] = [7,8,9] # [7, 8, 9, 4]li[3:] = [5,6,7] # [7, 8, 9, 5, 6, 7]li[2:4] = [‘a’,‘b’] # [7, 8, ‘a’, ‘b’, 6, 7]# 非等长替换li[2:4] = [1,2,3,4] # [7, 8, 1, 2, 3, 4, 6, 7]li[2:6] = [‘a’] # [7, 8, ‘a’, 6, 7]# 删除元素del li[2:3] # [7, 8, 6, 7]切片占位符可以带步长,从而实现连续跨越性的替换或删除效果。需要注意的是,这种用法只支持等长替换。li = [1, 2, 3, 4, 5, 6]li[::2] = [‘a’,‘b’,‘c’] # [‘a’, 2, ‘b’, 4, ‘c’, 6]li[::2] = [0]*3 # [0, 2, 0, 4, 0, 6]li[::2] = [‘w’] # 报错,attempt to assign sequence of size 1 to extended slice of size 3del li[::2] # [2, 4, 6]3、自定义对象实现切片功能切片是 Python 中最迷人最强大最 Amazing 的语言特性(几乎没有之一),以上两小节虽然介绍了切片的基础用法与高级用法,但这些还不足以充分地展露切片的魅力,所以,在接下来的两章节中,我们将聚焦于它的更高级用法。前两节内容都是基于原生的序列类型(如字符串、列表、元组……),那么,我们是否可以定义自己的序列类型并让它支持切片语法呢?更进一步,我们是否可以自定义其它对象(如字典)并让它支持切片呢?3.1、魔术方法:getitem()想要使自定义对象支持切片语法并不难,只需要在定义类的时候给它实现魔术方法 getitem() 即可。所以,这里就先介绍一下这个方法。语法: object.getitem(self, key)官方文档释义:Called to implement evaluation of self[key]. For sequence types, the accepted keys should be integers and slice objects. Note that the special interpretation of negative indexes (if the class wishes to emulate a sequence type) is up to the getitem() method. If key is of an inappropriate type, TypeError may be raised; if of a value outside the set of indexes for the sequence (after any special interpretation of negative values), IndexError should be raised. For mapping types, if key is missing (not in the container), KeyError should be raised.概括翻译一下:getitem() 方法用于返回参数 key 所对应的值,这个 key 可以是整型数值和切片对象,并且支持负数索引;如果 key 不是以上两种类型,就会抛 TypeError;如果索引越界,会抛 IndexError ;如果定义的是映射类型,当 key 参数不是其对象的键值时,则会抛 KeyError 。3.2、自定义序列实现切片功能接下来,我们定义一个简单的 MyList ,并给它加上切片功能。(PS:仅作演示,不保证其它功能的完备性)。import numbersclass MyList(): def init(self, anylist): self.data = anylist def len(self): return len(self.data) def getitem(self, index): print(“key is : " + str(index)) cls = type(self) if isinstance(index, slice): print(“data is : " + str(self.data[index])) return cls(self.data[index]) elif isinstance(index, numbers.Integral): return self.data[index] else: msg = “{cls.name} indices must be integers” raise TypeError(msg.format(cls=cls))l = MyList([“My”, “name”, “is”, “Python猫”])### 输出结果:key is : 3Python猫key is : slice(None, 2, None)data is : [‘My’, ’name’]<main.MyList object at 0x0000019CD83A7A90>key is : hiTraceback (most recent call last):…TypeError: MyList indices must be integers or slices从输出结果来看,自定义的 MyList 既支持按索引查找,也支持切片操作,这正是我们的目的。3.3、自定义字典实现切片功能切片是序列类型的特性,所以在上例中,我们不需要写切片的具体实现逻辑。但是,对于其它非序列类型的自定义对象,就得自己实现切片逻辑。以自定义字典为例(PS:仅作演示,不保证其它功能的完备性):class MyDict(): def init(self): self.data = {} def len(self): return len(self.data) def append(self, item): self.data[len(self)] = item def getitem(self, key): if isinstance(key, int): return self.data[key] if isinstance(key, slice): slicedkeys = list(self.data.keys())[key] return {k: self.data[k] for k in slicedkeys} else: raise TypeErrord = MyDict()d.append(“My”)d.append(“name”)d.append(“is”)d.append(“Python猫”)print(d[2])print(d[:2])print(d[-4:-2])print(d[‘hi’])### 输出结果:is{0: ‘My’, 1: ’name’}{0: ‘My’, 1: ’name’}Traceback (most recent call last):…TypeError上例的关键点在于将字典的键值取出,并对键值的列表做切片处理,其妙处在于,不用担心索引越界和负数索引,将字典切片转换成了字典键值的切片,最终实现目的。4、迭代器实现切片功能好了,介绍完一般的自定义对象如何实现切片功能,这里将迎来另一类非同一般的对象。迭代器是 Python 中独特的一种高级对象,它本身不具备切片功能,然而若能将它用于切片,这便仿佛是锦上添花,能达到如虎添翼的效果。所以,本节将隆重地介绍迭代器如何实现切片功能。4.1、迭代与迭代器首先,有几个基本概念要澄清:迭代、可迭代对象、迭代器。迭代 是一种遍历容器类型对象(例如字符串、列表、字典等等)的方式,例如,我们说迭代一个字符串“abc”,指的就是从左往右依次地、逐个地取出它的全部字符的过程。(PS:汉语中迭代一词有循环反复、层层递进的意思,但 Python 中此词要理解成单向水平线性 的,如果你不熟悉它,我建议直接将其理解为遍历。)那么,怎么写出迭代操作的指令呢?最通用的书写语法就是 for 循环。# for循环实现迭代过程for char in “abc”: print(char, end=” “)# 输出结果:a b cfor 循环可以实现迭代的过程,但是,并非所有对象都可以用于 for 循环,例如,上例中若将字符串“abc”换成任意整型数字,则会报错: ‘int’ object is not iterable .这句报错中的单词“iterable”指的是“可迭代的”,即 int 类型不是可迭代的。而字符串(string)类型是可迭代的,同样地,列表、元组、字典等类型,都是可迭代的。那怎么判断一个对象是否可迭代呢?为什么它们是可迭代的呢?怎么让一个对象可迭代呢?要使一个对象可迭代,就要实现可迭代协议,即需要实现__iter__() 魔术方法,换言之,只要实现了这个魔术方法的对象都是可迭代对象。那怎么判断一个对象是否实现了这个方法呢?除了上述的 for 循环外,我还知道四种方法:# 方法1:dir()查看__iter__dir(2) # 没有,略dir(“abc”) # 有,略# 方法2:isinstance()判断import collectionsisinstance(2, collections.Iterable) # Falseisinstance(“abc”, collections.Iterable) # True# 方法3:hasattr()判断hasattr(2,”iter”) # Falsehasattr(“abc”,"iter") # True# 方法4:用iter()查看是否报错iter(2) # 报错:‘int’ object is not iterableiter(“abc”) # <str_iterator at 0x1e2396d8f28>### PS:判断是否可迭代,还可以查看是否实现__getitem__,为方便描述,本文从略。这几种方法中最值得一提的是 iter() 方法,它是 Python 的内置方法,其作用是将可迭代对象变成迭代器 。这句话可以解析出两层意思:(1)可迭代对象跟迭代器是两种东西;(2)可迭代对象能变成迭代器。实际上,迭代器必然是可迭代对象,但可迭代对象不一定是迭代器。两者有多大的区别呢?如上图蓝圈所示,普通可迭代对象与迭代器的最关键区别可概括为:一同两不同 ,所谓“一同”,即两者都是可迭代的(iter),所谓“两不同”,即可迭代对象在转化为迭代器后,它会丢失一些属性(getitem),同时也增加一些属性(next)。首先看看增加的属性 next , 它是迭代器之所以是迭代器的关键,事实上,我们正是把同时实现了 iter 方法 和 next 方法的对象定义为迭代器的。有了多出来的这个属性,可迭代对象不需要借助外部的 for 循环语法,就能实现自我的迭代/遍历过程。我发明了两个概念来描述这两种遍历过程(PS:为了易理解,这里称遍历,实际也可称为迭代):它遍历 指的是通过外部语法而实现的遍历,自遍历 指的是通过自身方法实现的遍历。借助这两个概念,我们说,可迭代对象就是能被“它遍历”的对象,而迭代器是在此基础上,还能做到“自遍历”的对象。ob1 = “abc"ob2 = iter(“abc”)ob3 = iter(“abc”)# ob1它遍历for i in ob1: print(i, end = " “) # a b cfor i in ob1: print(i, end = " “) # a b c# ob1自遍历ob1.next() # 报错: ‘str’ object has no attribute ‘next’# ob2它遍历for i in ob2: print(i, end = " “) # a b c for i in ob2: print(i, end = " “) # 无输出# ob2自遍历ob2.next() # 报错:StopIteration# ob3自遍历ob3.next() # aob3.next() # bob3.next() # cob3.next() # 报错:StopIteration通过上述例子可看出,迭代器的优势在于支持自遍历,同时,它的特点是单向非循环的,一旦完成遍历,再次调用就会报错。对此,我想到一个比方:普通可迭代对象就像是子弹匣,它遍历就是取出子弹,在完成操作后又装回去,所以可以反复遍历(即多次调用for循环,返回相同结果);而迭代器就像是装载了子弹匣且不可拆卸的枪,进行它遍历或者自遍历都是发射子弹,这是消耗性的遍历,是无法复用的(即遍历会有尽头)。写了这么多,稍微小结一下:迭代是一种遍历元素的方式,按照实现方式划分,有外部迭代与内部迭代两种,支持外部迭代(它遍历)的对象就是可迭代对象,而同时还支持内部迭代(自遍历)的对象就是迭代器;按照消费方式划分,可分为复用型迭代与一次性迭代,普通可迭代对象是复用型的,而迭代器是一次性的。4.2、迭代器切片前面提到了“一同两不同”,最后的不同是,普通可迭代对象在转化成迭代器的过程中会丢失一些属性,其中关键的属性是 getitem 。在前一节中,我已经介绍了这个魔术方法,并用它实现了自定义对象的切片特性。那么问题来了:为什么迭代器不继承这个属性呢?首先,迭代器使用的是消耗型的遍历,这意味着它充满不确定性,即其长度与索引键值对是动态衰减的,所以很难 get 到它的 item ,也就不再需要 getitem 属性了。其次,若强行给迭代器加上这个属性,这并不合理,正所谓强扭的瓜不甜……由此,新的问题来了:既然会丢失这么重要的属性(还包括其它未标识的属性),为什么还要使用迭代器呢?这个问题的答案在于,迭代器拥有不可替代的强大的有用的功能,使得 Python 要如此设计它。限于篇幅,此处不再展开,后续我会专门填坑此话题。还没完,死缠烂打的问题来了:能否令迭代器拥有这个属性呢,即令迭代器继续支持切片呢?hi = “欢迎关注公众号:Python猫"it = iter(hi)# 普通切片hi[-7:] # Python猫# 反例:迭代器切片it[-7:] # 报错:‘str_iterator’ object is not subscriptable迭代器因为缺少__getitem__ ,因此不能使用普通的切片语法。想要实现切片,无非两种思路:一是自己造轮子,写实现的逻辑;二是找到封装好的轮子。Python 的 itertools 模块就是我们要找的轮子,用它提供的方法可轻松实现迭代器切片。import itertools# 例1:简易迭代器s = iter(“123456789”)for x in itertools.islice(s, 2, 6): print(x, end = " “) # 输出:3 4 5 6for x in itertools.islice(s, 2, 6): print(x, end = " “) # 输出:9# 例2:斐波那契数列迭代器class Fib(): def init(self): self.a, self.b = 1, 1 def iter(self): while True: yield self.a self.a, self.b = self.b, self.a + self.bf = iter(Fib())for x in itertools.islice(f, 2, 6): print(x, end = " “) # 输出:2 3 5 8for x in itertools.islice(f, 2, 6): print(x, end = " “) # 输出:34 55 89 144itertools 模块的 islice() 方法将迭代器与切片完美结合,终于回答了前面的问题。然而,迭代器切片跟普通切片相比,前者有很多局限性。首先,这个方法不是“纯函数”(纯函数需遵守“相同输入得到相同输出”的原则);其次,它只支持正向切片,且不支持负数索引,这都是由迭代器的损耗性所决定的。那么,我不禁要问:itertools 模块的切片方法用了什么实现逻辑呢?下方是官网提供的源码:def islice(iterable, *args): # islice(‘ABCDEFG’, 2) –> A B # islice(‘ABCDEFG’, 2, 4) –> C D # islice(‘ABCDEFG’, 2, None) –> C D E F G # islice(‘ABCDEFG’, 0, None, 2) –> A C E G s = slice(*args) # 索引区间是[0,sys.maxsize],默认步长是1 start, stop, step = s.start or 0, s.stop or sys.maxsize, s.step or 1 it = iter(range(start, stop, step)) try: nexti = next(it) except StopIteration: # Consume iterable up to the start position. for i, element in zip(range(start), iterable): pass return try: for i, element in enumerate(iterable): if i == nexti: yield element nexti = next(it) except StopIteration: # Consume to stop. for i, element in zip(range(i + 1, stop), iterable): passislice() 方法的索引方向是受限的,但它也提供了一种可能性:即允许你对一个无穷的(在系统支持范围内)迭代器进行切片的能力。这是迭代器切片最具想象力的用途场景。除此之外,迭代器切片还有一个很实在的应用场景:读取文件对象中给定行数范围的数据。我们知道,从文件中读取内容主要有两种方法(参见之前关于文件读写的文章):read() 适合读取内容较少的情况,或者是需要一次性处理全部内容的情况;而 readlines() 适用性更广,因为它是迭代地读取内容,既减少内存压力,又方便逐行对数据处理。虽然 readlines() 有迭代读取的优势,但它是从头到尾逐行读取,若文件有几千行,而我们只想要读取少数特定行(例如第1000-1009行),那它还是效率太低了。考虑到文件对象天然就是迭代器 ,我们可以使用迭代器切片先行截取,然后再处理,如此效率将大大地提升。# test.txt 文件内容’‘‘猫Python猫python is a cat.this is the end.‘‘‘from itertools import islicewith open(’test.txt’,‘r’,encoding=‘utf-8’) as f: print(hasattr(f, “next”)) # 判断是否迭代器 content = islice(f, 2, 4) for line in content: print(line.strip())### 输出结果:Truepython is a cat.this is the end.本节内容较多,简单回顾一下:迭代器是一种特殊的可迭代对象,可用于它遍历与自遍历,但遍历过程是损耗型的,不具备循环复用性,因此,迭代器本身不支持切片操作;通过借助 itertools 模块,我们能实现迭代器切片,将两者的优势相结合,其主要用途在于截取大型迭代器(如无限数列、超大文件等等)的片段,实现精准的处理,从而大大地提升性能与效率。5、小结最后总结一下,切片是 Python 的一种高级特性,常用于截取序列类型的元素,但并不局限于此,本文主要介绍了它的基础用法、高级用法(如占位符用法)、自定义对象切片、以及迭代器切片等使用内容。除此之外,切片还有更广阔多样的使用场景,例如 Numpy 的多维切片、内存视图切片、异步迭代器切片等等,都值得我们去探索一番,今限于篇幅而无法细说,欢迎关注公众号“Python猫 ”,以后我们慢慢学习之。切片系列(原单篇): Python进阶:切片的误区与高级用法Python进阶:自定义对象实现切片功能Python进阶:迭代器与迭代器切片相关链接: 官方文档getitem用法:http://t.cn/EbzoZyp切片赋值的源码分析:http://t.cn/EbzSaoZ官网itertools模块介绍:http://t.cn/EbNc0otPython是否支持复制字符串呢?来自Kenneth Reitz大神的建议:避免不必要的面向对象编程给Python学习者的文件读写指南(含基础与进阶,建议收藏)详解Python拼接字符串的七种方式—————–本文原创并首发于微信公众号【Python猫】,后台回复“爱学习”,免费获得20+本精选电子书。 ...

December 31, 2018 · 5 min · jiezi

svn提示被has been locked

之前做项目的时候从svn上更新资源都是直接upate就可以了,这点上没有太大的问题。但是经常会去修改文件的内容,并且保存等等这些操作会导致文件在二次update的时候被锁住。分享一个解决方案:TortoiseSvn->选择clean up ->勾选break write locks -> ok即可解锁!然后重新更新

December 24, 2018 · 1 min · jiezi

对比 Git 与 SVN,这篇讲的很易懂

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~本文由腾讯工蜂发表于云+社区专栏导语本文从 Git 与 SVN 的对比入手,介绍如何通过 Git-SVN 开始使用 Git,并总结平时工作高频率使用到的 Git 常用命令。一、Git vs SVNGit 和 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命令 ]三、Git-SVN常用命令本节命令针对使用 Git-SVN 的开发者,请务必掌握。若服务器使用的 SVN,但是本地想要体验 Git 的本地分支,离线操作等功能,可以使用 Git-SVN功能。常用操作如下(图片来源于网络): [ 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 用户的配置文件位于 ~/.gitconfigGit 单个仓库的配置文件位于 ~/$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]十二、其他写在后面从 SVN 到 Git,除本文列举的基础概念和常用命令,包括但不限于如何从 SVN 服务器切换到 Git 服务器,分支模型管理等也非常重要。本文篇幅有限,针对没有介绍到但很重要的知识点会列举到参考资料里,希望作为本文的延伸阅读。相关阅读【每日课程推荐】机器学习实战!快速入门在线广告业务及CTR相应知识 ...

October 31, 2018 · 2 min · jiezi