一个特定的Git工作流程实现,具有开发/预发布/生产代码流模型,并支持作为更大项目一部分的多个仓库。
项目描述
Git克隆URL: git://github.com/dokai/gitctl.git
项目页面: http://github.com/dokai/gitctl
变更历史
2.0a8 (2010-04-11)
绑定GitPython依赖版本0.1.7。gitctl与较新版本不兼容。[dokai]
添加了实验性的Growl支持。要使其工作,您需要安装Growl的Python绑定。
2.0a7 (2009-08-03)
添加了一个新的–from-file选项,该选项告诉从给定的文件中读取组件名称。然后命令仅应用于给定的组件。[rnd]
添加了“gitctl path”命令,该命令打印给定组件名称的目录路径。[rnd]
添加了“gitctl sh”命令,该命令在每个组件目录中执行指定的shell命令(使用-c选项给出)。例如,gitctl sh -c ‘git status’将执行“git status”每个组件。[rnd]
2.0a6 (2009-05-27)
重构了“gitctl pending”命令,使其仅支持比较外部配置中固定的修订版本和生产分支的HEAD。在实践中,这意味着原来的“-production”选项是默认行为,而“-production”、“-staging”和“-dev”选项已被删除。重构后的“gitctl status”取代了原来的功能。[dokai]
重构了“gitctl status”命令,以提供更多有关仓库状态的详细信息。[dokai]
重构了美观打印器,在组件名称和点状对齐之间包含一个空格。这将使在其他脚本中使用gitctl的输出更容易。[dokai]
添加了一个新的–verbose全局选项。提供–verbose选项将产生与2.0a5相同的输出。没有此选项,gitctl将仅报告已更改的组件,这将显著减少输出并更容易看到哪些已更改。
将正常程序输出打印到stdout,仅将错误打印到stderr。[dokai]
在更新硬固定的修订版本时,执行“git reset –hard”以强制修订版本。这解决了某些工作目录处于不一致状态且检出失败的问题。[dokai]
重构了generate_externals函数,以保证生成配置文件中各部分的顺序。[dokai]
2.0a5 (2008-10-01)
将“gitctl update”更改为尝试在所有配置分支上执行快速前进合并。如果无法快速前进,将显示一条消息,并且分支保持不变。[dokai]
2.0a4 (2008-09-25)
修复了“gitctl pending –production”比较错误树的问题。当使用固定的修订版本(无HEAD的工作目录)时,我们需要始终与远程分支进行比较。[dokai]
修复了“gitctl pending”中如果所有分支不可用时的一个错误。[dokai]
添加了“-v”开关以显示gitctl的版本。[dokai]
2.0a3 (2008-09-21)
添加了对使用“gitctl create –message”指定初始提交信息的支持。[dokai]
修复了“gitctl create”,使其不会将上游仓库的HEAD置于损坏状态。[dokai]
添加了对指定要操作的项目以及执行外部配置中所有项目的操作的支持。[dokai]
为“gitctl pending”添加了–no-fetch选项以避免获取。[dokai]
当使用固定的修订版本时,“gitctl update”现在将显示哪些项目已更新以及哪些未更新。[dokai]
2.0a2 (2008-09-15)
修复了使用固定的修订版本时“gitctl update”的严重错误。[dokai]
2.0a1 (2008-09-15)
对实现(特定)Git工作流程过程进行了彻底的重构,除了自定义外部处理外。这将与1.x版本断开向后兼容性,但提供了某种程度上等效的功能。[dokai]
1.0b1 (2008-06-12)
首次公开发布 [dokai]
目的
此软件包的目的是实现一个特定的工作流程,以使用Git管理由多个独立子项目组成的项目。原始动机是由zc.buildout驱动的系统,但实现不依赖于此。这不是一个100%通用的工具,但工作流程相当常见,因此也可能适用于其他用例。[dokai]
此工作流程包括使用三个预定义的分支来模拟代码的开发、预发布和生产阶段。我们假设使用一个标准中央仓库,开发人员使用它来同步他们的官方更改。该仓库被认为是标准源,并为项目提供了“官方”状态。开发人员可以自由地使用任何数量的分支、标签和仓库作为他们日常工作的部分。[dokai]
代码通常从开发流向预发布再到生产,该软件包提供工具以简化此过程。每个单独的Git仓库都使用Git提供的任何工具进行管理。
此外,该软件包提供了一个轻量级的“外部”机制,便于拉取和管理子项目。这与git-submodule提供的功能不同,因为可以定义固定和开放的依赖项。这类似于Subversion中处理外部的方式。此外,单个Git仓库不知道外部,而外部配置保存在一个单一的位置。
配置
该软件包使用两个不同的配置文件。gitctl.cfg文件提供高级配置,允许您指定如规范仓库和您的开发、预发布和生产分支的名称。gitexternals.cfg定义了项目特定配置所需的子组件。
gitctl.cfg
上游
用于引用规范仓库服务器的名称,例如“origin”。
上游URL
规范仓库服务器的地址。此地址需要指向支持推送的服务器。目前仅测试了SSH。例如:git@my.gitserver.com
分支
以换行符分隔的分支列表,这些分支将在本地仓库中进行跟踪。当为列出的每个分支克隆仓库时,将自动创建本地跟踪分支。
开发分支
开发分支的名称。上面的分支列表将隐式包含此分支。
预发布分支
预发布分支的名称。上面的分支列表将隐式包含此分支。
生产分支
生产分支的名称。上面的分支列表将隐式包含此分支。
提交邮件
提交邮件将被发送到的电子邮件地址。仅在创建新仓库时使用。
提交邮件前缀
提交邮件前缀。仅在创建新仓库时使用。
以下是一个配置示例
[gitctl] upstream = origin upstream-url = git@myserver.com branches = development staging production development-branch = development staging-branch = staging production-branch = production commit-email = commit@myserver.com commit-email-prefix = [GIT]
gitexternals.cfg
外部配置由一个或多个具有以下属性的节组成。每个节名称将用于命名外部将被克隆到的目录。
url(必需)
远程仓库的完整URL,例如:git@myserver.com:my.project.git
type(可选)
远程仓库的类型。目前仅支持git。
treeish(可选)
在首次克隆远程仓库时默认检出“treeish”对象的名称。该treeish对象可以引用分支或标记等。默认为master。
container(可选)
项目将被检出到的目录的名称。在此目录下将创建一个附加目录,其中包含项目文件,因此可以安全地为多个项目使用相同的值。相对路径被认为是相对于配置文件的位置。
以下是一个配置示例
[my.project] url = git@myserver.com:my.project.git type = git treeish = v1.0-dev container = src
这会将my.project.git仓库克隆到./src/my.project,并将v1.0-dev检出到工作目录。
gitctl 脚本
gitctl脚本提供子命令来实现工作流程。每个子命令都提供额外的选项。有关详细信息,请参阅gitctl [subcommand] --help。
usage: gitctl [-h] [-v] [--config CONFIG] [--externals EXTERNALS] [--verbose] {status,create,update,sh,branch,path,fetch,pending} ... Git workflow utility for managing projects containing multiple git repositories. positional arguments: {status,create,update,sh,branch,path,fetch,pending} Commands create Initializes a new local repository and creates a matching upstream repository. update Updates the configured repositories by either attempting a fast-forward merge on existing project branches or cloning new projects. path Shows the path to the project directory. sh Executes shell command for specified projects. status Shows the status of each external project and alerts if any are out of sync with the upstream repository. branch Provides information and operates on the branches of the projects. pending Checks if there are any pending changes in the production branches compared to the pinned down versions in externals configuration. fetch Updates the remote branches on all projects without merging. optional arguments: -h, --help show this help message and exit -v, --version show program's version number and exit --config CONFIG Location of the configuration file. If omitted the following locations will be search: $PWD/gitctl.cfg, ~/.gitctl.cfg. --externals EXTERNALS Location of the externals configuration file. Defaults to $PWD/gitexternals.cfg --verbose Prints more verbose output about repositories.
安装
使用setuptools
$ easy_install gitctl
示例
gitctl 路径
输出项目目录的路径
$ cd /Users/rnd/buildout/ $ gitctl path -f refactoring_these_projects /Users/rnd/buildout/products/Project1 /Users/rnd/buildout/products/Project2 /Users/rnd/buildout/src/Project3
其中 refactoring_these_projects 文件包含项目名称,每行一个
ProjectI ProjectII ProjectIII
这些项目名称映射到 gitexternals.cfg 配置文件中的各个部分。
如果不提供项目名称,将输出所有项目路径。
gitctl sh
在每个项目目录中执行shell命令(即路径包含 gitctl path 的目录)。一些示例(使用上述相同的 refactoring_these_projects 文件)。
显示每个项目的分支(PROJECT 环境变量包含项目名称)
gitctl sh -f refactoring_these_projects -c 'echo $PROJECT; git branch'
创建功能分支
gitctl sh -f refactoring_these_projects -c 'git checkout -b my_f_branch'
大量检出特定功能分支(首先将所有项目切换到开发分支,然后只为重构下的项目检出功能分支)
gitctl sh -c 'git checkout development' gitctl sh -f refactoring_these_projects -c 'git checkout my_f_branch'
获取具有与开发环境不同的生产环境的项目的列表(注意:通过提交进行检查,而不是diff,因此,列表中的一些项目可能在文本上确实是相同的)
gitctl sh -f refactoring_these_projects -c '[ `git rev-parse development` != `git rev-parse origin/production` ] && echo $PROJECT' 2> /dev/null
对所选项目执行一些操作
gitctl sh -f refactoring_these_projects -c 'git commit -m "Added newfeature"'
依赖项
贡献者
凯·劳塔波特,作者 [dokai]
罗马·苏西,[rnd]
项目详情
gitctl-2.0a8.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0de2d6619431b36bd1925faf77be8d4c71ae324395eedada9ed3e4d6d6cfd653 |
|
MD5 | 8943e80f2ea512729bbe66b674227648 |
|
BLAKE2b-256 | 9d0ffee251e712ce25ab1f5a8d6ef346e60778f297c92b31440fd19cb7250900 |