Python-SVN自动化脚本(一):update,revert,checkout

目录

一、SVN简介

二、添加环境变量

三、SVN自动化代码

3.1、svn update

3.2、svn revert

3.3、svn checkout


一、SVN简介

SVN是一种开源的版本控制系统,它用于管理随着时间变化的数据,它会记录每个文件的更改历史。因此,我们可以将文件恢复到旧版本,或者浏览文件的变更历史记录。

在工作上,由于使用到svn的频率较为频繁,所以写了一个svn自动化脚本。

二、添加环境变量

一般在安装svn的时候,会默认不把svn添加到环境变量中。可以按下win+r,再输入cmd,打开命令行窗口,在里面输入"svn help",如果出现以下情况,就说明svn未被添加到环境变量中。

那么就需要手动把svn添加到环境变量中。

步骤一:在搜索栏中搜索“应用和功能”。

 步骤二:打开之后,搜索“TortoiseSVN”,单击该应用,然后点击修改。

步骤三:点击“Next”

 步骤四:点击“Modify”,再点击“Next”

 步骤五:点击“Command line client tools”,再点击“Will be ins.talled on local hard drive”,然后点击“Next”

步骤六:点击“Install”

稍等一会儿,svn环境变量就安装完毕。

安装完后,再次按下win+r,输入“cmd”打开命令行窗口,输入“svn help”,出现如下界面就说明环境变量添加成功。

安装成功后,就可以编写svn自动化脚本代码。


三、SVN自动化代码

导入os模块,在安装Python环境的时候会自动安装该模块,所以直接导入即可。创建一个名为Svn的类,类中的魔法方法__init__根据实际情况添加代码。

3.1、svn update

svn update的作用是将我们本地的工作拷贝默认更新至svn中的最新版本(HEAD),当然也可以给定自己想要更新到的版本。

类方法update中定义了两个参数,一个是local_path,另一个是默认值command。

local_path表示本地的工作拷贝路径,这边用双引号包住路径,防止路径中带有空格导致编译报错。

command表示svn update的可选项,可以通过在命令行窗口中输入“svn help update”查看所有可选项。command默认是空(即默认更新至最新版本)。

如果想要更新至指定版本,则在调用类方法update时,改为command='-r xxxxx',例如“-r 1111”。

r表示revision。版本号的格式不局限于数字,也可以指定日期,例如“-r {2022-11-10}”。当然也可以是“-r HEAD”,这个就是更新至最新版本,如果你想要更新至最新版本,那么可以不去定义command。

变量cmd_update是个字符串,为了在字符串中插入变量值,所以在单引号前加上f。也可以选择用"+"进行连接。

最后通过os.system运行svn update命令。

import os

class Svn:
    def __init__(self):
        pass

    def update(self, local_path, command=''):
        """
        将本地路径默认更新至svn中的最新版本
        """
        cmd_update = f'svn update {command} "{local_path}"'
        os.system(cmd_update)

 调用类方法update。需要注意的是复制的本地路径用的是反斜杠"\",可以用转义字符"\\"或是在字符串前加"r",或者将路径中的反斜杠"\"改成正斜杠"/"。

if __name__ == '__main__':                              #表示当前py文件为主程序 若被其他py文件调用 则不会进入该if的函数体中(便于进行调试)
    tmp = Svn()                                         #实例化
    path = r'D:\folder\sub_folder'                      #反斜杠\
    svn_command = '-r 1111'                             #
    tmp.update(path, command=svn_command)               #更新到指定版本1111

    path = 'D:/folder/sub_folder'                       #正斜杠/
    tmp.update(path)                                    #默认更新到最新版本

3.2、svn revert

svn revert的作用就是撤销对本地工作拷贝所作的修改。但是一旦revert了,是没有办法恢复对本地的修改的。

定义方法与svn update相同。

同样可以通过在命令行窗口中输入"svn help revert"查看revert命令的可选项。

command='--depth=infinity'表示撤销当前本地路径下所有文件和文件夹所作的修改

def revert(self, local_path, command=''):
    cmd_revert = f'svn revert {command} "{local_path}"'
    os.system(cmd_revert)

调用类方法revert。

if __name__ == '__main__':                              #表示当前py文件为主程序 若被其他py文件调用 则不会进入该if的函数体中(便于进行调试)
    tmp = Svn()                                         #实例化
    path = r'D:/folder/sub_folder/tmp.txt'              #单个文件
    tmp.revert(path)                                    #撤销对于单个文件的修改

    path = 'D:/folder/sub_folder'                       #当前目录
    svn_command = '--depth=infinity'                    #
    tmp.revert(path, command=svn_command)               #撤销当前路径下所有文件和文件夹的改动

3.3、svn checkout

svn checkout的作用是将svn上的文件夹中所有内容复制到本地路径中,使得本地的文件和svn上的文件相互联系。

注意:直接将svn上的文件拖至本地,那么本地的文件和svn是没有任何联系的,这样就无法对本地文件执行任何svn命令(revert,update...)。

类方法新添加了一个参数svn_path,这个是指svn上文件夹路径。

def checkout(self, svn_path, local_path, command=''):
    cmd_checkout = f'svn checkout {command} "{svn_path}" "{local_path}"'
    os.system(cmd_checkout)

调用类方法checkout。

在checkout时,会将svn中的subfolder下的所有文件或文件夹被拷贝至本地中,并且如果本地路径不存在,那么执行checkout的过程中会自动新建文件夹。

if __name__ == '__main__':                                          #表示当前py文件为主程序 若被其他py文件调用 则不会进入该if的函数体中(便于进行调试)
    tmp = Svn()                                                     #实例化
    svn_path = 'svn://111.11.11.111/project/folder/subfolder'       #svn上的路径
    local_path = r'D:/folder/sub_folder'                            #本地路径
    tmp.checkout(svn_path, local_path)                              #将svn路径下的文件复制到本地

暂时就先记录这么多吧,写不动啦。下期文章会继续分享我用到过的svn命令,例如add, changelist, log, commit等等。

声明:

文章会在CSDN,知乎,b站上传~

文章只为记录下写svn自动化脚本过程中遇到的问题,命令行当中的可选项也并不是每个都用过,文章中只是列举了我自己使用过的可选项。如果对上述代码有改进建议或是编译有误无法实现功能的话,欢迎大家在评论区提出~

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值