群英汇 TopGit 改进 (1): tg push 全部分支
TopGit 的项目名称是来自于 Topic Git 的简写,是用于管理多个 Git 的特性分支的工具。如果您对 Hg 的 MQ 有所了解的话,我可以告诉你,TopGit 是用 Git 维护补丁列表的工具;TopGit 就是 MQ 在 Git 中的等价物 ,而且做的更好。 :yes:
- 什么是 TopGit?参见 TopGit 手册
- TopGit 代码库:http://repo.or.cz/w/topgit.git
为 tg push 命令增加 --all 参数
我之前的一篇文章:《Git 如何拆除核弹起爆码,以及 topgit 0.7到0.8的变迁》,曾经提到过,TopGit 0.7 到 0.8 的一个非常大的改变,就是取消了在 .git/config 中的 强制 non-fast-forward 更新的 push 参数。 在 TopGit 0.7 以及之前的版本,可以通过执行一个简单的 git push 命令,就可以将所有的 TopGit 分支以及相关的 top-bases 分支 PUSH 到服务器上。 但是 TopGit 0.8 版本之后,不再向 .git/config 中添加相关 PUSH 指令,因为强制 non-fast-forward 的 PUSH 会导致多人协同工作时,互相覆盖对方改动!!!但是这么做的结果,也就失去了使用 git push 向远程服务器同步 TopGit 分支的便利。 TopGit 0.8 版本提供了一个新命令 tg push,用于向服务器 PUSH TopGit 分支以及关联的 top-bases 分支。这样,就弥补了不能再使用 git push 和服务器同步 TopGit 以及 top-bases 分支的遗憾了。 一个让人痒痒的问题产生了:- tg push 只能 push 当前工作的 TopGit 分支;
- 或者 tg push 后面加上各个分支的名字,实现对分支的 PUSH
- 但是 tg push 没有一个 --all 选项,必须一个一个的将需要 PUSH 的 tg 分支罗列出来
- 我们有的项目的分支有上百个!!!如果改动的多的话,要一个一个切换或者一个一个写在命令行中,太恐怖了。 :sweat:
- 增加了对 -a 以及 --all 参数的支持
- 如果用户没有指定分支,并且提供了 -a | --all 参数,则将当前所有 topgit 分支加入同步的分支列表中
- 创建新的分支,开始写代码:
$ tg create t/tg_push_all tgmaster tg: Creating t/tg_push_all base from tgmaster... Switched to a new branch 't/tg_push_all' tg: Topic branch t/tg_push_all set up. Please fill .topmsg now and make initial commit. tg: To abort: git rm -f .top* && git checkout tgmaster && tg delete t/tg_push_all # Hack, Hack, Hack... # Test, Test, Test... $ git st # On branch t/tg_push_all # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: .topdeps # new file: .topmsg # # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: .topmsg # modified: tg-push.sh # $ git ci -a -m "add --all option support to tg_push" [t/tg_push_all 7df16a5] add --all option support to tg_push 3 files changed, 22 insertions(+), 1 deletions(-) create mode 100644 .topdeps create mode 100644 .topmsg
- 切换到 master (debian) 分支,编译新的 群英汇 软件包 topgit+,并安装
$ git co master $ git br * master t/debian_locations t/export_quilt_all t/fast_tg_summary t/tg_completion_bugfix t/tg_patch_cdup t/tg_push_all tgmaster $ make -f debian/rules debian/patches rm -rf debian/patches tg export --quilt --all debian/patches Exporting t/debian_locations Exporting t/export_quilt_all Exporting t/fast_tg_summary Exporting t/tg_completion_bugfix Exporting t/tg_patch_cdup Exporting t/tg_push_all Exported topic branch (total 6 topics) to directory debian/patches $ git st # On branch master # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: debian/patches/series # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # debian/patches/t/tg_push_all.diff no changes added to commit (use "git add" and/or "git commit -a") $ git add debian/patches/t/tg_patch_all.diff $ vi debian/changelog edit, edit, edit... $ head -5 debian/changelog topgit (0.8-1+ossxp7) unstable; urgency=low * add --all support to tg patch. -- Jiang Xin <jiangxin@ossxp.com> $ git ci -a -m "new patch: add --all option support to tg_push." [master c927b02] new patch: add --all option support to tg_push. 3 files changed, 61 insertions(+), 0 deletions(-) create mode 100644 debian/patches/t/tg_push_all.diff $ dpkg-buildpackage -b -rfakeroot ... dpkg-deb:正在新建软件包“topgit”,包文件为“../topgit_0.8-1+ossxp7_all.deb”。 dpkg-genchanges -b >../topgit_0.8-1+ossxp7_amd64.changes ... $ sudo dpkg -i ../topgit_0.8-1+ossxp7_all.deb ...
- 改动 PUSH 到 Github
$ git remote -v github git@github.com:ossxp-com/topgit.git (fetch) github git@github.com:ossxp-com/topgit.git (push) origin git@bj.ossxp.com:users/jiangxin/topgit.git (fetch) origin git@bj.ossxp.com:users/jiangxin/topgit.git (push) upstream git://repo.or.cz/topgit.git (fetch) upstream git://repo.or.cz/topgit.git (push) $ tg -r github summary r t/debian_locations [PATCH] make file locations Debian-compatible r t/export_quilt_all [PATCH] t/export_quilt_all r t/fast_tg_summary [PATCH] t/fast_tg_summary r t/tg_completion_bugfix [PATCH] t/tg_completion_bugfix r t/tg_patch_cdup [PATCH] t/tg_patch_cdup l t/tg_push_all [PATCH] t/tg_push_all $ tg -r github push --all Everything up-to-date Everything up-to-date Everything up-to-date Everything up-to-date Everything up-to-date Counting objects: 7, done. Delta compression using up to 2 threads. Compressing objects: 100% (4/4), done. Writing objects: 100% (5/5), 757 bytes, done. Total 5 (delta 2), reused 0 (delta 0) To git@github.com:ossxp-com/topgit.git * [new branch] refs/top-bases/t/tg_push_all -> refs/top-bases/t/tg_push_all * [new branch] t/tg_push_all -> t/tg_push_all
- 改完,收工。