简化修订合并和分支切换操作
项目描述
易简SVN是一个Python脚本,简化了Subversion分支的一些常见操作。
安装
从Python包索引获取
pip install eazysvn
您需要Python 2.7或更高版本,以及Subversion命令行客户端。
用法
获取帮助
在shell提示符下输入
eazysvn help
它将打印出一系列命令。其中一些命令有别名
ezswitch = eazysvn switch ezmerge = eazysvn merge ezrevert = eazysvn revert ezbranch = eazysvn branchurl
在分支间切换
在Subversion工作目录中运行
ezswitch -l
以查看项目中可用的所有分支。这假设您的Subversion存储库使用标准的布局,其中包含“trunk”、“tags”和“branches”。
然后运行
ezswitch branchname
以切换到分支,然后
ezswitch trunk
以切换回trunk。
与分支一起工作
假设你正在处理一个项目,在进行艰难的重构时突然意识到你所做的更改对主线分支来说风险太大,你希望将它们放入一个分支。运行
ezswitch --create my-branch
这将创建一个新的分支并将你的工作目录切换到它。所有进行中的更改都将保持不变,你可以直接使用 svn commit 将它们提交到新分支。
查看分支上的所有更改
你可能想查看自分支创建以来所做的更改的总体差异,例如在尝试合并之前进行审查。
eazysvn branchdiff branchname
它正是这样做的。为了提高可读性,安装 colordiff 并使用
eazysvn branchdiff branchname | colordiff | less -R
合并分支
在你完成分支上的修改后,你将想切换回主线并开始合并。运行
ezswitch trunk
然后
ezmerge my-branch
你将看到用于合并的 svn 命令以及所有更改的日志。解决合并冲突(如果有),运行测试套件,然后提交。ezmerge 的输出可以帮助你生成一个信息丰富的提交信息。
如果你不希望将更改合并到工作目录中,而是想查看合并的差异,请在 ezmerge 中传递 -d(或 –diff)选项
ezmerge -d featurebranch
选择分支的更改
如果你想合并分支中的一部分更改,可以将修订号(或范围)传递给 ezmerge。例如,要将主线修订 1234 中实现的错误修复回滚到发布分支中,
ezswitch release-branch ezmerge 1234 trunk
你还可以合并修订范围的更改
ezmerge 1234-1236 trunk
此范围是包含的,与 Subversion 不同。如果你想,你也可以使用类似 Subversion 的半开范围
ezmerge 1233:1236 trunk
–diff 选项也适用于此。
ezmerge -d 1234-1236 trunk
撤销已提交的更改
这就像 cherry-picking 的反向操作:你希望取消应用已提交到此分支的更改。
ezrevert 1234
操作分支
要完全删除分支,运行
eazysvn rmbranch branchname
要重命名分支,运行
eazysvn mvbranch oldbranchname newbranchname
要执行其他类型的操作,eazysvn 提供了一个快捷方式,允许你使用分支名称而不是完整的分支 URL(此部分假设是 Unix 类型的 shell)
svn ls $(ezbranch branchname) svn diff `ezbranch branch1` `ezbranch branch2`
另一个可能有用的 eazysvn 命令是 branchpoint。它显示分支创建时的修订。例如,要查看主线中不存在于分支中的更改,运行
svn diff -r `eazysvn branchpoint branch`:HEAD `ezbranch trunk`
总体选项
所有需要分支名称作为参数的命令都接受一个 -l(或 –list)选项,列出所有分支,例如
ezbranch -l
所有更改仓库或工作目录的命令都接受一个 -n(或 –dry-run)选项,只打印出原本会执行的 svn 命令。
ezmerge -n 1234 otherbranch
所有更改仓库(创建/删除/重命名分支或标签)的命令都接受一个 -m 选项,带有提交信息。如果没有指定,subversion 本身将启动一个文本编辑器来输入提交信息。
ezswitch -c newbranch -m "Create branch for the new feature"
许多命令还接受其他选项。使用
eazysvn cmd --help ezmerge --help ezswitch --help etc.
来发现那些。
附录
修订号
在 Subversion 中,一个修订意味着在给定时间点整个项目树的状态。有时将一个修订转换为另一个修订的更改集更有趣。当你向 ezmerge 指定单个数字 N 时,它假定你想要合并将修订(N-1)转换为修订 N 的更改集。
如果你指定范围 N-M,ezmerge.py 将合并所有将修订(N-1)转换为修订 M 的更改集。为了与 svn merge 兼容,你可以指定修订范围作为 N:M,ezmerge 将合并所有将修订 N 转换为修订 M 的更改集。在最后一种情况下,N 可以大于 M,这对于你想回滚一些更改是有用的,尽管 ezrevert 在此方面更为方便。
当你指定范围(N-M 或 N:M)时,M 可以是一个特殊名称 HEAD。它表示仓库中最新的修订。
您还可以指定一个特殊的范围 ALL,表示分支中所有更改集。ezmerge 将解析 svn log 的输出以获取您所需的修订号。 ezmerge branchname 是 ezmerge ALL branchname 的快捷方式。
为了方便从 svn log 输出中复制和粘贴,您可以在数字前加上字母 r,例如 r1234。
分支名称
Eazysvn 期望您使用传统的仓库布局,并且如果您指定所需的分支名称为 'trunk'、'foo' 或 'bar',则可以从这些 URL 中的任何一个找到另一个。
scheme://server/path/to/svn/repo/trunk/subdirs scheme://server/path/to/svn/repo/branches/foo/subdirs scheme://server/path/to/svn/repo/branches/bar/subdirs
您不必在项目的顶部切换或合并,任何子目录都可以工作。合并/切换不会触及当前目录之上的您的签出部分。
部分支持替代方案。
scheme://server/path/to/svn/repo/trunk/subdirs scheme://server/path/to/svn/repo/branch/foo/subdirs scheme://server/path/to/svn/repo/branch/bar/subdirs
如果您从一个分支签出开始,Eazysvn 将能够找到主干或其他分支的位置,但如果您从一个主干签出开始,它将无法找到您的分支。这是一个应该有一天得到修复的漏洞。
如果您显式地在前缀前面加上斜杠,强制 eazysvn 使用任何非标准方案,例如在主干签出中使用 ezswitch feature/foo,则将从
scheme://server/path/to/svn/repo/trunk/subdirs
切换到
scheme://server/path/to/svn/repo/feature/foo/subdirs
如果您从一个这样的非标准位置开始签出,Eazysvn 将无法找到主干或其他分支的位置。这是一个应该有一天得到修复的漏洞。
分支合并逻辑
当您合并一个分支(到主干或到另一个分支)时,eazysvn 再次使用 svn log 来找到分支点,然后合并在该分支上提交的所有更改。
这意味着您通常不能从同一个分支合并多次。这是 Subversion 缺乏合并跟踪的结果。
此外,由于没有对共同祖先进行复杂搜索或类似操作,如果您从主干分支 A 进行一些更改,然后从分支 A 分支 B 进行一些更改,然后您在主干上 ezmerge B,您将不会获得分支 A 中所做的任何更改。
当您将主干合并到分支时,eazysvn 再次使用 svn log 来找到分支点,然后合并从该修订号以来在主干上所做的所有更改。
从主干到分支合并是一个坏主意,因为这样您就很难将分支合并回主干。您可能会尝试,subversion 可能会干净利落地应用已应用更改两次,但这完全是运气。
让它保持简单:始终只合并一次分支,回到您分支的地方,这样您就可以避免麻烦。删除已合并的分支,以避免意外制作难以合并的新更改。
变更日志
1.15.1 (2019-04-23)
添加对 Python 3.7 的支持。
放弃对 Python 3.4 的支持。
1.15.0 (2018-04-13)
添加对 Python 3.6 的支持。
放弃对 Python 3.3 的支持。
100% 测试覆盖率。
1.14.0 (2016-09-17)
放弃对 Python 2.6 和 3.2 的支持。
实际上支持 Python 3。
1.13.0 (2015-01-13)
在执行外部命令之前刷新输出缓冲区。以前,如果您这样做,例如 eazysvn branchdiff > DIFF,您将看到 svn diff 命令本身的输出。
在 Windows 上修复命令别名处理(https://github.com/mgedmin/eazysvn/pull/1)。由 Timon Wong <timon86.wang@gmail.com> 修补。
支持 Python 3。
1.12.2 (2012-02-20)
新参数: ezmerge --accept=ARG,直接传递给 subversion。
将源代码从自托管的 Subversion 移动到 GitHub。
1.12.1 (2010-09-14)
当 eazysvn 无法理解分支结构时,为 ezswitch -c newbranch 提供了更好的错误信息(LP#446369)。
ezswitch -t tagname; ezswitch branchname 将切换到名为 branchname 的分支,而不是尝试切换到名为 branchname 的标签(LP#617888,由 Wolfgang Schnerring 修复)。
1.12.0 (2010-07-22)
对各种选项进行了微小修复 – 帮助信息。
使用 ezmerge --reintegrate 时不要传递修订范围。由 Michael Howitz <mh@gocept.com> 提供的补丁。
新增选项: ezmerge --tag。由 Michael Howitz <mh@gocept.com> 贡献。
1.11.0 (2009-05-26)
新增选项: ezmerge --reintegrate,直接传递给 svn merge。由 Wolfgang Schnerring <wosc@wosc.de> 贡献。
1.10.0 (2009-04-08)
使用 subprocess 而不是 os.popen2;在 Python 2.6 上不再有弃用警告。
1.9.0 (2008-08-08)
eazysvn tag 接受 -l (–list) 选项。
ezbranch 和 ezswitch 接受 -t 选项。
新增命令: eazysvn branchpoint。
您可以在接受分支名称的所有命令中引用标签;使用名为“tags/tagname”的分支。这对于所有类型的前缀都有效,例如“obsolete-branches/branchname”等。
1.8.0 (2008-06-26)
拥有良好的 PyPI 文档页面和变更日志。
新增命令: eazysvn tag。
eazysvn --version 打印版本号。
1.7.0 (2008-06-11)
新增命令: eazysvn branchdiff。
1.6.1 (2007-12-12)
ezmerge 接受 -l (–list) 选项。
ezmerge branchname 等同于 ezmerge ALL branchname。
1.6.0 (2007-12-11)
ezmerge 接受 -d (–diff) 选项。
1.5.1 (2007-06-28)
ezrevert 等同于 eazysvn revert。
1.5 (2007-06-28)
新增命令: ezbranch,等同于 eazysvn branchurl。
1.5 (2007-06-28)
新增命令: ezbranch,等同于 eazysvn branchurl。
1.4.1 (2007-06-20)
修复了 eazysvn rmbranch 的错误。
1.4.0 (2007-06-11)
新增命令: eazysvn rmbranch。
新增命令: eazysvn mvbranch。
1.3.1 (2007-04-04)
使 ezmerge ALL trunk 有用:从当前分支的分支点合并更改,而不是从 trunk 的起始点。
1.3 (2007-01-25)
新增命令: eazysvn revert。
1.2 (2007-01-16)
第一个基于 setuptools 的版本,感谢 Philipp von Weitershausen。
新增命令: eazysvn,包含四个子命令: merge(与旧的 ezmerge 命令相同),switch(与旧的 ezswitch 命令相同),help 和 selftest。
1.1 (2007-01-12)
新增命令: ezswitch。
将 ezmerge 输出格式修改得更清晰。
ezmerge 现在接受 ‘rXXX’ 作为修订号。
ezmerge XXX:YYY 将范围视为与 SVN 兼容
ezmerge XXX-YYY 是用户友好型包含范围的新的语法
ezmerge ALL branchname 确定合并该分支中所有更改的适当修订号。
ezmerge 现在接受 -n (–dry-run) 选项。
ezmerge 现在接受 -h (–help) 并显示帮助信息。
1.0 (2006-08-23)
原始的 ezmerge.py 由 Philipp von Weitershausen 提供。
版本 1.7.0 之前的某些日期可能是近似的,并且更改可能被错误地归因于错误的修订。
许可和源代码
Eazysvn遵循GNU通用公共许可证版本2或更高版本。
您可以使用以下方式获取最新源代码:
git clone https://github.com/mgedmin/eazysvn
Eazysvn最初是Philipp von Weitershausen的ezmerge.py。然后Marius Gedminas接管了项目,创建了主页,并开始添加各种功能。
错误
愿望清单/待办事项
ezmerge应接受以逗号分隔的修订列表(1,2,4-6,9)。
应存在eazysvn rmtag和eazysvn mvtag。
eazysvn help cmd应与eazysvn cmd --help相同,而不是错误。
eazysvn -n cmd应与eazysvn cmd -n相同,而不是错误。
eazysvn应执行svn ls以发现使用的分支方案('branch'或更传统的'branches')。
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
构建分布
eazysvn-1.15.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | bf9b8ce5f38552291d345aee99ba357816f0403ae2ac08f26dde06f84d809c03 |
|
MD5 | 924fefe05cc8bd5cd68f851bbfc696b6 |
|
BLAKE2b-256 | ca1a074c0a046c04755c0705243eb8a3bad4143924fbd103c7fe116d9b35dfcf |
eazysvn-1.15.1-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0ca66172165c5169480cbef8c14359bcf4f8ca8b25c38b51cd1c47acea22dcb2 |
|
MD5 | 74a2cdf8abc3c1f3666a0bc92d31e648 |
|
BLAKE2b-256 | 4bd6d9ac1b0984a9c97787ecc02f8734facf947be93ac3d0b3da50041b145051 |