将项目从github迁移到gitlab的命令行工具
hub2lab的Python项目详细描述
github2gitlab
注:这是基于https://pypi.python.org/pypi/github2gitlab的工作。 然而,最初的回购http://workbench.dachary.org/dachary/github2gitlab 无法访问。这是一个有一些改进的克隆。
github2gitlab是一个命令行工具,用于从github镜像项目 去Gitlab。它按顺序执行以下操作:
- 如果找不到~/.ssh/id_rsa.pub ssh密钥,请将其上载到gitlab
- 如果不存在 ,则创建GITLAB项目
- 将github git存储库镜像到gitlab git存储库
- 创建或更新gitlab合并请求以匹配 GitHub请求
示例
镜像http://github.com/dachary/test到http://workbench.dachary.org/dachary/test
github2gitlab \ --gitlab-url http://workbench.dachary.org \ --gitlab-token sxQJ67SQKihMrGWVf \ --github-repo dachary/test
镜像http://github.com/ceph/ceph到 http://workbench.dachary.org/ceph/ceph-backports并使用github 允许令牌执行比匿名时更多的请求。 使用-忽略已关闭以删除已关闭和 从未合并。
github2gitlab \ --gitlab-url http://workbench.dachary.org \ --gitlab-token sxQJ67SQKihMrGWVf \ --gitlab-repo ceph/ceph-backports \ --github-token 64933d355fda9844aadd4e224d \ --github-repo ceph/ceph \ --ignore-closed
镜像详细信息
github git存储库包含每个请求的引用。 例如,pull请求483具有refs/pull/483/head引用 那是被推的树枝的尖端。如果请求是 打开并可以在目标上合并,引用 REF/PLA/ 483/合并也存在,是合并的结果。
它们不是将refs/pull/*引用镜像到gitlab,而是 移到refs/heads/pull/*使它们成为分支。如果gitlab ci是 监视项目时,每次pull/*/head 引用已更新。
拉取请求的标题和描述完全镜像。这个 拉取请求的状态无法精确映射并被转换 如下所示:
if the pull request is opened, the merge request is opened if the pull request is closed, if the pull request merged_at field is null, the merge request is closed else the merge request is merged
如果打开合并请求以镜像 已经合并,Gitlab将拒绝将其设置为合并状态 因为它注意到没有东西可以合并。在这种情况下 合并请求被设置为关闭状态,并且:merged:string 附加到描述中。
- Gitlab API http://doc.gitlab.com/ce/api/
- Github API https://developer.github.com/v3/
黑客攻击
获取代码:git clonehttp://workbench.dachary.org/dachary/github2gitlab.git
运行单元测试:tox
运行集成测试。他们需要一个gitlab令牌和一个github令牌 具有删除和创建项目权限的实际用户。Github项目 使用–github repo指定,使用–gitlab repo指定github项目 将被删除,并且在测试期间丢失所有数据和git存储库。
- Python=。测试/集成.py
–gitlab urlhttp://workbench.dachary.org–gitlab令牌xxxxxxxxx–gitlab repo dachary/testrepo2–github令牌xxxxxxxxx–github repo dachary/testrepo–ssh公钥~/.ssh/id_rsa.pub–详细
标记版本
- version=1.3.0 ; perl -pi -e “s/^version.*/version = $version/” setup.cfg ; for i in 1 2 ; do python setup.py sdist ; amend=$(git log -1 –oneline | grep –quiet “version $version” && echo –amend) ; git commit $amend -m “version $version” ChangeLog setup.cfg ; git tag -a -f -m “version $version” $version ; done
- 查看文档:rst2html<;readme.rst>;/tmp/a.html
- 发布新版本
- python setup.py sdist upload –sign
- git push ; git push –tags
- PYPI维护
- python setup.py register # if the project does not yet exist
- trim old versions at https://pypi.python.org/pypi/github2gitlab