Python 一键commit文件、目录到SVN服务器
一键commit文件、目录到SVN服务器
by:授客 QQ:1033553122
实现功能
一键提交文件、目录到svn
测试环境
Win7 64位
Python 3.3.2
TortoiseSVN 1.9.6-64 Bit
代码show
#!/usr/bin/env/ python
#
-*- coding:utf-8 -*-
__author__
=
'shouke'
import
subprocess
import
os.path
class
SVNClient:
def
__init__(self):
self.svn_work_path
=
'D:\svn\myfolder'
if
not
os.path.exists(self.svn_work_path):
print('svn工作路径:%s
不存在,退出程序'
%
self.svn_work_path)
exit()
self.try_for_filure
=
1
# 提交失败,重试次数
def
get_svn_work_path(self):
return
self.svn_work_path
def
set_svn_work_path(self,
svn_work_path):
self.svn_work_path
= svn_work_path
def
update(self):
args
=
'cd /d '
+
self.svn_work_path
+
' & svn update'
with
subprocess.Popen(args,
shell=True,
universal_newlines
=
True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
as
proc:
output
= proc.communicate()
print('执行svn
update命令输出:%s'
%
str(output))
if
not
output[1]:
print('svn
update命令执行成功'
)
return
[True,'执行成功']
else:
print('svn
update命令执行失败:%s'
%
str(output))
return
[False,
str(output)]
def
add(self,
path):
args
=
'cd /d '
+
self.svn_work_path
+
' & svn add '
+ path
with
subprocess.Popen(args,
shell=True,
universal_newlines
=
True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
as
proc:
output
= proc.communicate()
print('执行svn
add命令输出:%s'
% str(output))
if
not
output[1]
or
(
not
str(output) and
str(output).find('is
already under version control')
!= -1):
print('svn
add命令执行成功'
)
return
[True,'执行成功']
else:
print('svn
add命令执行失败:%s'
%
str(output))
return
[False,
'svn add命令执行失败:%s'
% str(output)]
def
commit(self,
path):
args
=
'cd /d '
+
self.svn_work_path
+
' & svn commit -m "添加版本文件"'
+ path
with
subprocess.Popen(args,
shell=True,
universal_newlines
=
True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
as
proc:
output
= proc.communicate()
print('执行svn
commit命令输出:%s'
%
str(output))
if
not
output[1]:
print('svn
commit命令执行成功'
)
return
[True,'执行成功']
else:
print('svn
commit命令执行失败,正在重试:%s'
% str(output))
if
self.try_for_filure
!=
0:
self.commit(path)
self.try_for_filure
=
self.try_for_filure
-
1
return
[False,
str(output)]
filepath_list
= []
#
获取目标目录下的文件|子目录|子文件路径
def
get_subdir_or_subfile_paths(dirpath, excludes):
global
filepath_list
if
not
os.path.exists(dirpath):
print('路径:%s
不存在,退出程序'
% dirpath)
exit()
elif
not
os.path.isdir(dirpath):
print('路径:%s
不为目录'
% dirpath)
return
[]
for
name
in
os.listdir(dirpath):
for
exclude
in
excludes.strip(',').split(','):
if
not
name.endswith(exclude):
full_path
= os.path.join(dirpath, name)
filepath_list.append(full_path)
if
os.path.isdir(full_path):
get_subdir_or_subfile_paths(full_path,
exclude)
return
filepath_list
if
__name__ ==
'__main__':
svn_client
= SVNClient()
svn_client.update()
dirpath
=
'dirname' #
'D:\svn\myfolder\dirname'
if
svn_client.add(dirpath)[0]:
svn_client.commit(dirpath)
dirpath
=
'D:\svn\myfolder\dirname'
#
''
#
传递每个文件、目录的绝对路径,确保重复执行时,给定目录下新增的文件也可以被提交
paths
= get_subdir_or_subfile_paths(dirpath,
'.svn')
# .svn文件需要被过滤掉,因为无法提交成功
for
path
in
paths:
if
svn_client.add(path)[0]:
svn_client.commit(dirpath)
filepath
=
'myfile.txt'
# 'D:\svn\myfolder\dirname\myfile.txt'
if
svn_client.add(filepath)[0]:
svn_client.commit(filepath)
#
报错
#
dirpath =
'd:/svn/dir_out_of_svn_workpath'
#
if svn_client.add(dirpath)[0]:
#
svn_client.commit(dirpath)
注意:
例中,svn工作路径为:'D:\svn\myfolder',即“执行checkout时选择的目录”
1、只能添加并提交位于svn工作目录下的文件目录,否则会报错,如下:
if
__name__ ==
'__main__':
svn_client
= SVNClient()
svn_client.update()
dirpath
=
'd:/svn/dir_out_of_svn_workpath'
if
svn_client.add(dirpath)[0]:
svn_client.commit(dirpath)

2、如果未对给定目录执行过add类函数,那么执行add函数后,执行commit函数,将会把该目录下的文件、目录及其下子文件、子目录,一起提交svn;否则不会做任何提交操作;所以,给add传递参数,最好是通过遍历的方式,传递每个文件、目录的绝对路径。
3、安装svn时,第二项,必须选择图示红色选框框选项,否则运行会报错:svn不是内部或外部命令,也不是可运行的程序


Python 一键commit文件、目录到SVN服务器的更多相关文章
- 取消本地文件夹与SVN服务器的关联
我们在开发项目中用SVN作为版本管理工具时,从服务器下载到本地的项目是有.svn文件夹的,这个代表是与svn服务器代码相关联的,如果我们想取消本地文件夹与svn服务器的关联,那么有多种方法,这里介绍导 ...
- 解除单个文件的与svn服务器的关联
有些文件和个人开发环境有关不需要和svn服务器做同步,可以取消其和svn服务的关联. 右键选中要取消关联的文件,右键菜单 Tortoise SVN ---> unversion and a ...
- linux下svn导入新目录到svn服务器特定地址
svn import transplant-apps/ svn://xx.xx.xx.90/ -m "changelog:add transplant-apps to 90-svn" ...
- 使用C#代码追加和提交文件到SVN服务器
windows系统下使用svn的命令需要安装一个插件,下载地址:http://sourceforge.net/projects/win32svn/?source=typ_redirect 安装后程序会 ...
- 从svn服务器自动同步到另一台服务器
需求场景 A commit B post-commit C (workstation) --------------> (svn server) ---------------------> ...
- CentOS7 配置SVN服务器
也可以参考这里:https://jingyan.baidu.com/article/148a1921d84be34d71c3b18f.html 1.安装svn yum install -y subve ...
- IntelliJ IDEA之如何提交代码到SVN服务器
一.准备 参照<IntelliJ IDEA教程之如何配置SVN>这篇文章配置SVN插件.提交代码到SVN之前,记得要先创建版本库,请参照<<SVN如何建立版本库>> ...
- Windows下SVN服务器及客户端的使用
原文地址:windows下配置VisualSVN Server服务器 作者:Deem_passion 下载安装文件: 服务端安装文件:VisualSVN-Server-1.6.2 客户端安装文件:To ...
- SVN服务器和客户端使用教程总结
一.SVN简介 Subversion是什么? 它是一个自由/开源的版本控制系统,一组文件存放在中心版本库,记录每一次文件和目录的修改,Subversion允许把数据恢复到早期版本,或是检查数据修改的历 ...
随机推荐
- Aseprite入门:第一个gif动图
前言:Aseprite入门教程 1.新建图片: 选择新建文件,然后选定宽高和颜色及背景类型,点击OK进行图片的创建: 2.绘制一个基础图形,为了方便还是选用球形: 填充上颜色: 美化(添加阴影增加小球 ...
- Python - 安装并配置Anaconda环境
1- 简介 官网:https://www.anaconda.com/ Anaconda是一个用于科学计算的Python发行版,适用于数据分析的Python工具,也可以用在大数据和人工智能领域. 支持 ...
- 项目中git版本控制及协作开发的常用操作(命令行,小乌龟,sourcetree)
一. git命令:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 小乌龟:htt ...
- 良好的JavaScript编码风格(语法规则)
编码风格 1.概述 "编程风格"(programming style)指的是编写代码的样式规则.不同的程序员,往往有不同的编程风格. 有人说,编译器的规范叫做"语法规则& ...
- Java核心技术及面试指南 集合部分总的面试题归纳以及答案
3.6.1ArrayList和LinkedList有什么差别?在哪种场景里应当用ArrayList(或LinkedList)? 大家如果学过数据结构,这个问题不难回答:前者是基于数组,数组比较擅长索引 ...
- lua中 table 重构index/pairs元方法优化table内存占用
转载请标明出处http://www.cnblogs.com/zblade/ lua作为游戏的热更新首选的脚本,其优势不再过多的赘述.今天,我主要写一下如何重写lua中的元方法,通过自己的重写来实现对l ...
- Vue.js + Nuxt.js 项目中使用 Vee-validate 表单校验
vee-validate 是为 Vue.js 量身打造的表单校验框架,允许您校验输入的内容并显示对应的错误提示信息.它内置了很多常见的校验规则,可以组合使用多种校验规则,大部分场景只需要配置就能实现开 ...
- Unity3D中利用Action实现自己的消息管理(订阅/发布)类
引言 一般的软件开发过程中,为了方便对项目进行管理.维护和扩展,通常会采用一种MVC框架,以将显示逻辑.业务逻辑和数据进行分离. 这在传统企业软件的开发中很常见,但我在使用Unity做游戏开发的时候却 ...
- 解决 VS2017 打断点无效
打断点无效 断点显示白色,鼠标移上去,提示:The breakpoint will not currently be hit. No Symbols have been loaded for this ...
- 【Python】正则表达式简单教程
说明:本文主要是根据廖雪峰网站的正则表达式教程学习,并根据需要做了少许修改,此处记录下来以备后续查看. <Python正则表达式纯代码极简教程>链接:https://www.cnblogs ...