delphij's Chaos

选择chaos这个词是因为~~实在很难找到一个更合适的词来形容这儿了……

16 Dec 2011

作弊条:几个不太常用的git库管操作

配合 svn 使用 git 时可能会遇到许多问题,例如两个人分别做了 git svn clone,然后希望合并到同一个 git 库中。如何做合并呢?假定两个库分别是 old, new,将这两个库对应的分支和对应的源分支 (svn/*) 通过 .git/config 分别复制到不同的分支名字下面,例如 svn/releng/8.2 和 old-svn/releng/8.2。假定需要合并的分支是 old/my8.2,则做以下操作:


git checkout my8.2 # 签出一份工作副本
git rebase old-svn/releng/8.2 # 更新到原始上游的最新状态
git rebase --onto svn/releng/8.2 old-svn/releng/8.2 # 用新库作为基础重新rebase;
git push origin my8.2 # 将结果push回代码库

把本地新建分支推到上游:


git push origin 分支名

问题:首次push时会收到 git post-receive remote: fatal: Invalid revision range 0000000000000000000000000000000000000000..XXXXXXXXXXX,不过并不影响push本身。这个错误是由于post-receive的hook里面引用了git提供的旧版本,但查了一下似乎没有很好的办法知道这个分支的上游是谁?(基本逻辑应该大致是:和库中已经存在的所有其他分支进行比较并找到公共版本与本分支HEAD距离最近的一个,返回那个版本号)。

删除远程代码库中的分支:


git push origin :分支名