提供对您的git/hg/bzr/svn检出/克隆的概览和控制。
项目描述
Checkoutmanager
根据配置文件 (.checkoutmanager.cfg) 在多个位置创建bzr/hg/git/svn检出。这个配置文件位于您的家目录中。
优点:您有一个命令可以更新所有检出。您还可以请求未提交更改的列表。您只需复制配置文件即可在新的机器上重新构建整个检出结构(这实际上是我构建它的目的:我换工作时不得不更换笔记本电脑…)。
Checkoutmanager适用于linux,osx和windows。
开始使用
开始使用非常简单。只需 pip install checkoutmanager 并运行 checkoutmanager。
第一次,您将获得一个示例配置,您可以将其复制到您家目录中的 .checkoutmanager.cfg。
第二次,您将获得使用说明。(您需要运行 checkoutmanager co 以获取初始检出)。
通用用法
每天早上到公司后,我通常会执行checkoutmanager up操作。这会从服务器上抓取所有签出文件的最新版本。所以对于subversion签出文件,执行svn up,对于mercurial,执行hg pull -u,等等。
时不时地,我会执行checkoutmanager st来检查是否有未提交的文件。如果你一天中在几个目录中工作,这非常方便:它可以帮助你防止整个星期忘记提交那个bug修复。
新项目意味着我在配置文件中添加一行,然后运行checkoutmanager co。
Checkoutmanager允许你在多个目录中分散你的签出文件。但是它不能在每个目录中混合版本控制系统。例如,我有一个~/buildout/目录,其中包含我的大型subversion网站项目;还有一个包含我的subversion工作Python库的目录;还有一个~/hg/目录,其中包含我的mercurial项目。我在家目录中签出了几个配置目录,如~/.emacs.d,~/.subversion等等。一切正常工作。
命令
可用命令
- exists
打印签出是否存在或缺失
- up
从服务器抓取最新版本。
- st
打印签出文件的状态
- co
从服务器抓取缺失的签出文件
- missing
打印配置文件中缺失的目录
- out
显示尚未推送到服务器的更改集
- in
显示与“up”一起拉取的传入更改集。对于某些版本控制系统,这取决于相应命令的英文输出,因此本质上是不稳定的。
输出目录命名
如果你没有为签出URL指定输出目录名,它将只取最后一部分。为了使生活更简单,我们进行了一些调整
https://xxx/yyy/product/trunk变为product而不是trunk。(对subversion很有用)
https://xxx/yyy/product/branches/experiment变为product_experiment而不是experiment。(对subversion很有用)
https://xxx/customername/buildout/trunk变为customername而不是“trunk”或“buildout”。(我们仍然支持的老约定)
Bzr签出以“lp:”(特殊的launchpad URL)开头,其“lp:”将被移除。
Git签出将url末尾的“.git”移除。
如果您想保留版本控制系统的目录配置,请将 preserve_tree 选项添加到一组中。它应包含一个或多个基本检出 URL(每行一个)。如果检出 URL 以 preserve_tree URL 之一开头,则保留其后的文件夹结构。
使用 preserve_tree 的 https://github.com,https://github.com/reinout/checkoutmanager 变为 reinout/checkoutmanager 而不是 checkoutmanager。对于经常有嵌套目录的子版本控制也很方便。
如果找不到 preserve_tree 基础 URL,则使用标准规则,因此您不会收到错误。
如果您想从上述默认设置中获取不同的行为,只需在配置文件中 URL 后指定一个目录名(用空格分隔)即可。因此,https://github.com/reinout/checkoutmanager bla_bla 变为 bla_bla 而不是 checkoutmanager
自定义命令
您可以编写自己的自定义命令。为了这样做,您需要创建一个 Python 包并在您的 setup.py 中为 checkoutmanager.custom_actions 目标注册一个入口点。
checkoutmanager 包含一个 test 命令,可作为示例。它在其自己的 setup.py 中注册如下:
entry_points={
'checkoutmanager.custom_actions': [
'test = checkoutmanager.tests.custom_actions:test_action'
]
}
入口点函数必须接受一个位置参数,它将是与正在执行命令的目录关联的 checkoutmanager.dirinfo.DirInfo 实例。函数还可以接受可选的关键字参数。请参阅 checkoutmanager.tests.custom_actions.test_action 以获取示例。
使用以下语法将参数传递给自定义命令:
checkoutmanager action:arg1=val1,arg2=val2
配置文件
示例配置文件
# Sample config file. Should be placed as .checkoutmanager.cfg in your home # directory. # # There are different sections per base location and version control # system. # # ``checkoutmanager co`` checks them all out (or clones them). # ``checkoutmanager up`` updates them all. # ``checkoutmanager st`` to see if there are uncommitted changes. # ``checkoutmanager out`` to see if there are unpushed git/hg commits. [git-example] vcs = git basedir = ~/example/git checkouts = https://github.com/reinout/checkoutmanager git@github.com:django/django.git [recipes] # Buildout recipes I work on. vcs = svn basedir = ~/example/svn checkouts = http://svn.zope.org/repos/main/z3c.recipe.usercrontab/trunk [hg-example] vcs = hg basedir = ~/example/utilities checkouts = https://bitbucket.org/reinout/eolfixer https://bitbucket.org/reinout/createcoverage # [dotfolders] # # Advanced usage! # # Folders that end up as dotted configfolders in my home dir. # # Note that there's a directory name behind the repository # # location, separated by a space. # vcs = bzr # basedir = ~ # checkouts = # lp:emacsconfig/trunk .emacs.d # sftp://somewhere/subversion/trunk .subversion # # By ignoring everything, we do not find missing import files but also # # don't get warnings for every subdirectory in our home dir # ignore = # * # .*
待办事项
等待反馈,以便我可以改进文档。
也许可以制作一个更好的示例配置(一个实际可以工作的而不是为自动化测试而构建的配置)。
现代化测试设置(pytest 而不是 zope 的 testrunner + doctests)。
致谢
由 Reinout van Rees 创建。
“out” 命令由 Dmitrii Miliaev 编写。
Git 支持由 Robert Kern 提供。
Globbing 支持由 Patrick Gerken 提供。
自定义命令支持由 Rafael Oliveira 提供。
并行化代码由 Morten Lied Johansen 提供。
源代码在 github 上,网址为 https://github.com/reinout/checkoutmanager。
可以在 https://github.com/reinout/checkoutmanager/issues 上报告错误和功能请求。
checkoutmanager 的变更日志
3.0.2 (2024-01-11)
修复了在现代化 python 2.7 代码时出错的 MultiExecutor 中的 super() 调用 :-)
3.0.1 (2024-01-11)
清理了 readme 中的剩余 TODO 注释。
3.0 (2024-01-11)
添加了基本的 github 行动进行测试。
移除了古老的 buildout 设置,包括 z3c.testsetup。现在使用 pytest。
移除了 python 2.7 支持,我们现在使用 3.8+。
实现了与 python 3.12 的兼容性:Safeconfigparser->ConfigParser。
2.7 (2021-09-28)
更健壮的错误处理。[mortenlj]
2.6.1 (2019-09-23)
修复了 README 中的小但关键的错误。
2.6 (2019-09-10)
更新了设置(主要是:buildout 版本固定),以便可以再次开发/测试项目。
原有的“exists”和“co”命令仅用于检查目录是否存在。现在它还会检查点目录(如.git,.svn)是否存在。这样,空目录也会通过检出过程被填充。
2.5 (2016-11-07)
修复了问题 #19:有时在没有任何更改的情况下,git远程更改被检测到。[reinout]
2.4.1 (2015-09-10)
修复了2.4版本中引入的run_one()函数的bug。[chintal]
2.4 (2015-09-09)
添加了in命令,用于报告传入的更改(即运行checkoutmanager up会得到的更改)。由于git/svn/hg/bzr版本之间的差异,报告可能不完全准确。要完全正确是非常困难的。因此,如果有什么地方不太对,请报告问题。[chintal]
增加了对将checkoutmanager用作库的支持。在首先加载配置文件后,现在可以以编程方式对单个目录或URL执行操作。请参阅源代码中的checkoutmanager.runner.run_one()函数。[chintal]
2.3 (2015-09-08)
在配置文件中添加了
选项,以允许结构化检出,以反映仓库树。[chintal]
2.2 (2015-08-24)
Checkoutmanager现在也支持在python 3上运行![reinout]
已从bitbucket(https://bitbucket.org/reinout/checkoutmanager)迁移到github(https://github.com/reinout/checkoutmanager)。[reinout]
2.1 (2015-08-18)
修复了缺失的命令:在查找尚未检出的项目时,不要吞咽输出。修复了问题 #24。[maurits]
2.0 (2015-03-25)
由于命令现在是并行而不是顺序运行,因此速度大幅提高。Morten Lied Johansen的出色修复使“checkoutmanager up”现在只需19秒,而不是105秒!
1.17 (2015-02-06)
添加了对自定义命令的支持:现在您可以为checkoutmanager编写扩展,以便您可以运行checkoutmanager your_custom_command。请参阅README以获取文档。由Rafael Oliveira提供的补丁。
1.16 (2015-01-02)
为忽略项添加了通配符支持。
1.15 (2013-09-27)
处理了确定git克隆目录名称的边缘情况。
1.14 (2013-08-12)
为svn 1.8及以上版本的svn info添加了--force-interactive选项。这对于“隐藏的”instancemanager info命令很有用,当您切换svn版本时,该命令可用于更新您的仓库。(请参阅1.10版本的变更日志条目)。由Maurits提供的补丁。
1.13 (2012-07-20)
不再使用示例配置文件作为测试配置文件。这意味着现在有一个更友好、更有用的示例配置文件。
(感谢Craig Blaszczyk的拉取请求,这是本修改的基础!)
1.12 (2012-04-14)
对于bzr,现在“out”命令使用退出码而不是命令输出。这更可靠、更舒适。由Jendrik Seipp修复,谢谢!
1.11 (2012-03-20)
在一个目录中允许使用多个vcs。这之前也是可能的,但现在您不再需要在忽略选项中列出竞争vcs的所有检出。此外,现在一个部分中忽略的项目也将被同一目录的其他部分忽略。修复了#11。[maurits]
1.10 (2012-01-16)
在运行checkoutmanager的“out”命令时,使用-bzr缺失的--mine-only选项,以仅显示我们的出站更改集。
如果不存在,则复制示例.cfg文件,而不是仅建议复制。修复了#12。
添加了隐藏的info命令。如果您已经更新了svn程序,并且您的操作系统要求您为每个仓库再次提供svn访问存储的凭据,则这可能只对subversion有用。[maurits]
1.9 (2011-11-08)
添加了upgrade命令,该命令将您的subversion检出升级到新的1.7布局的.svn目录。[maurits]
1.8 (2011-10-13)
现在使用 git push --dry-run 来检测尚未推送的出站更改,使用 checkoutmanager out. 修复了 #9(由 Maurits van Rees 报告)。
1.7 (2011-10-06)
添加了 –configfile 选项。当您想要使用 checkoutmanager 来管理除常规开发项目之外的其他项目的检出时非常有用。实际上:我想用它来为与 git 一起工作的“sdistmaker”。
1.6 (2010-12-27)
对 #7 的完整修复:checkoutmanager 不会在第一个错误停止,而是继续。它还会报告之后的所有错误。当您的 svn/hg/whatever 服务器中只有一个服务器宕机时,这很有帮助:其余的服务器将继续工作。
对 #7 的部分修复:svn up 现在以 --non-interactive 运行,因此会报告冲突错误而不是几乎无声地等待永远不会到来的交互式输入。
1.5 (2010-09-14)
为了与 python2.4 兼容,使用 except CommandError, e 而不是 except CommandError as e。
1.4 (2010-08-17)
添加了 git 支持(由 Robert Kern 提供补丁:感谢!)修复了问题 #6。
1.3 (2010-08-09)
添加了新的“out”操作,该操作显示 dvcs(hg、bzr)仓库默认推送位置找不到的更改集。对于 svn,此操作没有意义,因此对 svn 检出被忽略。修复了问题 #1。感谢 Dmitrii Miliaev 对此修复的贡献!
1.2.1 (2010-08-06)
错误修复:在报告错误时,会打印 os.getcwd 方法本身,而不是 os.getcwd() 的 输出...
1.2 (2010-08-04)
如果配置文件不存在,则仅打印配置文件提示,而不是通用用法信息。
修复了问题 #4:从路径中移除了通用的“buildout”名称。svn://somewhere/customername/buildout/trunk 是一个常见的模式。
添加了 -v 选项,该选项会打印命令及其执行的目录。修复了问题 #3。
在运行“checkoutmanager missing”时,报告尚未检出的项。修复了问题 #2。
检查执行命令的返回码。在出错时,会打印命令和工作目录,以及输出。脚本会立即停止。修复了 #5。
更新了文档,例如通过提及配置文件名称和位置。
1.1 (2010-08-02)
从“commands”模块切换到“subprocesses”以实现 Windows 兼容性。
1.0 (2010-08-01)
一些小修复。在实践中效果很好。
从 bzr 切换到 hg,并在 bitbucket.org 上公开。
由于即将发布,因此进行了大量文档更新。
0.1 (2010-05-07)
第一个相对可行的版本。
由 thaskel 创建的初始库骨架。