我有两个房间,我使用git维护一些源代码,大多数开发发生的"开发"房间和我们实际使用软件的"部署"房间.部署室中也不可避免地发生了一些变化.我希望两个房间在git中分享相同的历史.
限制:
将更改移动到部署室是很简单的git bundle,并跟踪我们移动到部署室的最后一次提交.由于纯文本限制,将更改移出房间更加困难.
目标:在两个未连接的房间之间来回移动,就像发生git pull了一样,即两个房间中的SHA1哈希相同.
至今:
我已尝试git format-patch将更改从部署移回dev,但这不记录合并,因此需要为每个连续的更改集生成不同的补丁集以及如何重现精确合并提交的一些记录发生在两者之间.有一些关于为合并提交制作差异的讨论,但这似乎并没有捕获实际的祖先,只捕获了变化.似乎补丁可能不是足够丰富的格式来提供必要的信息.
可以使用一些bundle-to-text脚本将bundle转换为非压缩和人类可读(ish)格式(然后在下载后再返回)但我没有发现存在这样的脚本的证据.
也许可以编写一个脚本来将历史记录从一些共同的祖先转到最新的提交,并且a)制作补丁或b)重新创建一些众所周知的引用的合并.
回退: 我总是可以将从部署室出来的提交压缩成一个原始补丁并打破历史记录,但是从dev-> deploy进一步下载会破坏任何现有的工作副本.不理想.
更新:
我相信git fast-export可能会做我需要的东西,虽然大多数例子都有它在整个存储库上工作,而不是像部分历史git bundle.我有一个工作的玩具示例,我可以将部分历史记录导出到一个过时的克隆,但它需要我手动编辑快速导出输出,以便我添加from <sha1>到第一个提交.如果没有这个修改,导入会创建不同的sha1,然后抱怨Not updating refs/heads/master (new tip <hash> does not contain <master's hash>).
Update2:
我的git fast-export解决方案确实有效,但它有带宽问题,因为它通过提供全新文件而不是以前文件的差异来工作.这是不可接受的,因为我实际上必须阅读所有这些额外的行.