版本控制库管理器
项目描述
Python包 vcs-repo-mgr 提供了一个命令行程序和Python API,用于在版本控制库(在打包/部署的上下文中)执行常见操作。它目前在Linux和Mac OS X上针对Python 2.6、2.7、3.4、3.5和3.6进行了测试。Bazaar、Mercurial 和 Git 库均受支持。
安装
vcs-repo-mgr 包可在 PyPI 上找到,这意味着安装应该像这样简单
$ pip install vcs-repo-mgr
实际上有无数种安装Python包的方法(例如,每个用户的site-packages目录、虚拟环境 或仅安装到系统范围内),我没有打算在这里进行讨论,所以如果你感到害怕,请在返回这些说明之前查阅你的选项;-)。
您还需要安装Bazaar、Mercurial和/或Git(根据您想工作的存储库类型而定)。以下是在基于Debian和Ubuntu的系统上安装它们的步骤
$ sudo apt-get install bzr mercurial git-core
用法
使用vcs-repo-mgr包有两种方式:作为命令行程序vcs-tool和作为Python API。有关Python API的详细信息,请参阅Read the Docs上的API文档。下面将描述命令行界面。
用法: vcs-tool [OPTIONS] [ARGS]
用于在版本控制存储库上执行常见操作(在打包/部署的上下文中)的命令行程序。支持Bazaar、Mercurial和Git存储库。
支持选项
选项 |
描述 |
---|---|
-r,--repository=REPOSITORY |
通过提供在配置文件~/.vcs-repo-mgr.ini和/etc/vcs-repo-mgr.ini中定义的存储库名称来选择要操作的存储库。 或者可以给出远程存储库的位置。位置应以存储库类型(中间用“+”分隔)为前缀,除非位置以“.git”结尾,在这种情况下,前缀是可选的。 |
--rev,--revision=REVISION |
选择要操作的修订版本。接受VCS系统支持的任何字符串,这意味着您可以提供分支名称、标签名称、确切的修订版本ID等。此选项与--find-revision-number、--find-revision-id和--export选项一起使用。 如果未提供此选项,则选择默认修订版本:“last:1”适用于Bazaar存储库,“master”适用于Git存储库,“default”(不是“tip”)适用于Mercurial存储库。 |
--release=RELEASE_ID |
选择要操作的发布版本。此选项与--revision选项以相同的方式工作。有关“发布”的详细信息,请参阅vcs-repo-mgr文档。 尽管发布标识符基于分支或标签名称,但它们可能不会逐字对应,这就是为什么在此指定的发布标识符在传递给VCS系统之前被转换为全局修订版本ID的原因。 |
-n,--find-revision-number |
打印与--revision选项一起给出的修订版本的本地修订版本号(一个整数)。修订版本号对于作为构建号或在需要简单、递增版本号时很有用。不应使用修订版本号来明确引用修订版本(应使用修订版本ID来代替)。此选项与--repository和--revision选项一起使用。 |
-i,--find-revision-id |
打印与--revision选项一起给出的修订版本的全球修订版本ID(一个字符串)。全局修订版本ID对于明确引用修订版本很有用。此选项与--repository和--revision选项一起使用。 |
--list-releases |
打印与--repository选项一起给出的存储库中的发布标识符。发布标识符按自然顺序比较打印到标准输出(每行一个)。 |
--select-release=RELEASE_ID |
打印与--repository选项一起给出的存储库中不晚于RELEASE_ID的最新发布标识符。发布标识符打印到标准输出。 |
-s, --sum-revisions |
打印多个仓库/修订版本对的修订版本总和。仓库/修订版本对从vcs-repo-mgr的位置参数中获取。 当你基于多个VCS仓库的修订版本构建包时,这很有用。通过在生成版本号时考虑所有仓库的更改,你可以确保每次更改都会增加版本号。 |
--vcs-control-field |
打印包含Debian控制文件字段和值的行。字段名称将是“Vcs-Bzr”、“Vcs-Hg”或“Vcs-Git”之一。值将是仓库的远程位置和选定的修订版本(由“#”字符分隔)。 |
-u, --update |
通过从远程仓库拉取最新更改来创建/更新远程仓库的本地克隆。此选项与--repository选项一起使用。 |
-m, --merge-up |
将更改合并到一个或多个发布分支和默认分支。 默认情况下,合并从当前分支开始。您可以使用--rev、--revision和--release选项显式选择合并应开始的分支。 您还可以首先将功能分支合并到选定的发布分支中,然后再将更改合并到后续发布分支和默认分支。要做到这一点,您需要将功能分支的名称作为位置参数传递。 如果功能分支位于不同的仓库中,您可以使用“#”标记将仓库位置的前缀与功能分支的名称分开,以区分位置和分支名称。 |
-e, --export=DIRECTORY |
将仓库特定修订版本的 内容导出到本地目录。此选项与--repository和--revision选项一起使用。 |
-d, --find-directory |
打印本地仓库的绝对路径名。此选项与--repository选项一起使用。 |
-v, --verbose |
增加日志详细程度(可重复)。 |
-q, --quiet |
减少日志详细程度(可重复)。 |
-h, --help |
显示此消息并退出。 |
使用vcs-tool命令的主要方式要求您创建一个配置文件
$ cat > ~/.vcs-repo-mgr.ini << EOF
[coloredlogs]
type = git
local = /tmp/coloredlogs
remote = git@github.com:xolox/python-coloredlogs.git
EOF
因为-r、--repository选项除了名称外还接受远程仓库位置,因此实际上不需要创建配置文件。当然,这取决于您的使用情况。
以下是一些命令行界面的示例。如果您对使用Python API感兴趣,请参阅在线文档。
更新库
如果配置文件定义了本地和远程仓库,并且本地仓库尚不存在,则第一次更新时将创建它
$ vcs-tool --repository coloredlogs --update
2014-05-04 18:55:54 INFO Creating Git clone of git@github.com:xolox/python-coloredlogs.git at /tmp/coloredlogs ..
Cloning into bare repository '/tmp/coloredlogs'...
remote: Reusing existing pack: 96, done.
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 101 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (101/101), 28.11 KiB, done.
Resolving deltas: 100% (44/44), done.
后续运行将拉取最新更改而不是执行完整克隆
$ vcs-tool --repository coloredlogs --update
2014-05-04 18:55:56 INFO Updating Git clone of git@github.com:xolox/python-coloredlogs.git at /tmp/coloredlogs ..
From github.com:xolox/python-coloredlogs
* branch HEAD -> FETCH_HEAD
查找修订号/ID
修订版本号是随着每个添加的修订版本递增的整数。它们在打包/部署期间非常有用
$ vcs-tool --repository coloredlogs --revision master --find-revision-number
24
修订ID(哈希)是唯一的十六进制字符串,用于标识修订。它们非常有用,可以明确地引用修订及其历史(例如,在构建软件包时,可以将修订ID作为软件包来源的提示嵌入其中)。
$ vcs-tool --repository coloredlogs --revision master --find-revision-id
bce75c1eea88ebd40135cd45de716fe9591e348c
导出修订版
默认情况下,由vcs-repo-mgr创建的存储库不包含工作树,只包含版本控制文件(在Git术语中,这称为“裸仓库”)。这有两个原因
裸仓库有助于节省磁盘空间。对于小型存储库,这并不重要,但在大型存储库上,这可以产生明显的差异。特别是如果你使用了很多的话 :-)
裸仓库强制实施在打包过程中不应使用工作树的原则(相反,您应该将特定修订的树导出到临时目录中并使用该目录)。这种在打包过程中不使用工作树的坚持有两个原因
工作树可能包含不在版本控制之下的文件。这些文件当然不应该无意中包含在软件包中。
如果使用存储库的工作树,这将使得从同一存储库安全地进行并行构建变得不可能(构建可能会相互损坏工作树)。
这意味着如果您想对存储库中的文件进行操作,您必须将修订导出到(临时)目录中
$ vcs-tool --repository coloredlogs --export /tmp/coloredlogs-snapshot
2014-05-04 19:17:24 INFO Exporting revision master of /tmp/coloredlogs to /tmp/coloredlogs-snapshot ..
$ ls -l /tmp/coloredlogs-snapshot
total 28K
drwxrwxr-x 2 peter peter 4.0K May 3 14:31 coloredlogs
drwxrwxr-x 3 peter peter 4.0K May 3 14:31 vim
-rw-rw-r-- 1 peter peter 1.1K May 3 14:31 LICENSE.txt
-rw-rw-r-- 1 peter peter 56 May 3 14:31 MANIFEST.in
-rw-rw-r-- 1 peter peter 5.4K May 3 14:31 README.rst
-rwxrwxr-x 1 peter peter 1.1K May 3 14:31 setup.py
未来改进
本节目前是一个“思维导图”,这意味着我还没有对这些改进做出承诺,我只是在自言自语 ;-).
- 改进交互式存储库选择
vcs-tool程序的交互式使用方面的两个改进
当提供的路径名与配置文件中的一个条目匹配时,自动加载存储库的配置(目前,您需要提供存储库的名称才能加载其配置)。
当在命令行上未指定存储库但工作目录与配置的存储库匹配时,执行显而易见的事情。
- 配置文件中的通配符匹配
是否支持对本地目录名使用shell通配符匹配以将默认配置应用于一组存储库可能很有趣?
- 启用更广泛的定制
目前,版本控制命令是硬编码的,对于那些现有API已经使您达到90%的目标,但最后10%却无法实现的情况,这些命令并不容易进行定制。技术上,这已经通过子类化实现,但一个更轻量级的解决方案当然会更好 :-).
已知问题
本节记录了用户可能会遇到的问题。
有问题的依赖项
Bazaar和Mercurial都是用Python编写的,可在PyPI上获得,因此我将它们包含在vcs-repo-mgr的安装要求中,因为我找不到不这么做的良好理由。
将Python 3添加到vcs-repo-mgr使得事情更加复杂,因为Bazaar和Mercurial不支持Python 3,导致安装错误。为了解决这个问题,Bazaar和Mercurial的要求被设置为与Python版本相关
在Python 2上,Bazaar和Mercurial包将与vcs-repo-mgr一起安装。
在Python 3上,用户负责确保Bazaar和Mercurial已安装(例如,使用系统包)。
这工作得很好,因为vcs-repo-mgr只通过命令行接口调用Bazaar和Mercurial,所以版本控制系统是否使用与vcs-repo-mgr相同的Python版本并不重要。
从那时起,Bazaar包的安装开始在PyPy上失败,遗憾的是,这次由于setuptools中的错误,没有可靠且向后兼容的方法可以使Bazaar依赖项在wheel发行版中可选。
在我调查了对匹配Python实现的环境标记的支持时(参考上面的链接),我决定与其编写一个充满恶心的和脆弱的诡计的设置脚本,不如仅仅取消对PyPy的官方(测试)支持,尽管这个决定可能听起来很荒谬。
联系方式
最新版本的 vcs-repo-mgr 可在 PyPI 和 GitHub 上找到。文档托管在 Read the Docs 上,包括一个 变更日志。如需提交错误报告,请在 GitHub 上创建一个问题。如果您有任何问题或建议,请随时通过peter@peterodding.com 发送电子邮件给我。
许可证
本软件遵循 MIT 许可证。
© 2018 Peter Odding。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪一个,请了解更多关于 安装包 的信息。
源代码分布
构建分布
vcs-repo-mgr-4.2.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d420f52eaf8abe130ddff08b03ac8cedee087920abd4dde425044ba6710f0a27 |
|
MD5 | dce4fc38574d10ce48dcf232aec7eed3 |
|
BLAKE2b-256 | f4a18d0488632c93cd0cdfb532ef7710079f929e064c86c1bc0c4a7440fab507 |
vcs_repo_mgr-4.2-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d8b29214130bc26acae1df881c9132b29eff599add2af796c92a499d49f79be2 |
|
MD5 | fcc30ed5b6d2e263a729f2282dd356da |
|
BLAKE2b-256 | ba9544fc5e24892a08da8a05378d06072f9130f01b73a6a8e275644a94d73fce |