在保留基于文件的提交信息的同时组合多个.git存储库

时间:2011-02-27 07:58:00

标签: git github cvs

来自CVS我们有一个包目录,其中包含每个包的单个.git存储库。

可悲的是,这些并不像原始CVS所有者想象的那样独立,所以通常它们都会一起检出并作为一个整体包合并到你碰巧用作开发人员的任何版本系统中。

Combining multiple git repositorieshttp://progit.org/book/ch6-7.html已经告诉我如何将它们全部合并到一个.git存储库中,而不是:

packages/intranet-asus-client/.git
packages/intranet-timesheet/.git
packages/intranet-core/.git

看起来像

packages/.git
packages/intranet-core (without .git, and so on).
包中的

git log向我展示了整个提交历史(很棒),但缺少的是:

  1. 基于文件的git历史记录,如git log --pretty=oneline -- intranet-core/intranet-core.info。它只显示了我在组合存储库(意思是/packages/.git
  2. 中提交的提交
  3. 没有分支或标签。我有一种预感,我必须在/packages/.git中为/packages/acs-kernel/.git中的每个分支创建一个分支,依此类推。但是标签怎么样?
  4. 或者这是子模块真正有用的一个很好的例子吗?遗憾的是,这对我们来说意味着(因为我们经常对包进行客户端补丁),我们必须将每个包.git远程存储库分叉(我们使用github ....)到私有存储库并在那里使用我们自己的客户端分支。虽然这对github来说太棒了(更多钱)但对我们来说不太方便。

    我们的问题是否有解决方案,可能是脚本运行一系列git命令以正确地将分支拉到一起,更重要的是重新使用时间戳和作者重做新包目录中的所有提交,因此看起来好像提交在哪里一直在做而不是在子树上?或者我只是以错误的方式使用git log?

1 个答案:

答案 0 :(得分:1)

您可能想要调查gitslave(http://gitslave.sf.net),它在git框架中提供CVSish递归超级项目管理。使用git-submodules更简单,更容易,但有一些缺点(你不会注意到来自CVS)。与git-submodules不同,gitslave不会接管您的存储库,因此您可以混合使用legacy和gitslave命令。一种用法总是可以使用gitslave另一种可以总是使用纯git,而第三种可以来回使用混合物。

设置gitslave后,您可以通过一个简单的命令在所有存储库上创建分支或标记,并切换分支,签入,推送或执行任何操作。

它目前可能不会为您提供您想要的文件历史记录,而无需工作,但可以添加(欢迎使用补丁: - )。