0

假设我有一个如下所示的 git repo。

分支主

./.gitignore
./README
./foo/
./foo/magic.py
./foo/document.txt
./bar/
./bar/baxy.c
./herp/
./herp/derp.h

有一堆提交,修改或创建这些文件。如果我想将历史记录(不需要共享第一个初始提交,但如果他们这样做很好)分成两个分支(假设分支是执行此操作的最佳方式)怎么办?

分支A

./.gitignore
./foo/
./foo/magic.py
./foo/document.txt

B分公司

./.gitignore
./README
./bar/
./bar/baxy.c
./herp/
./herp/derp.h

例如,不能保证提交不会同时foo/magic.py涉及herp/derp.h到同一个提交。分支应该具有影响这些文件的所有提交历史,影响多个文件的提交(跨历史拆分)可以被分解。

我应该做什么/怎么做?(我考虑过只是耸耸肩,复制文件,然后说把历史搞砸,但这似乎是在逃避。)

编辑:

很确定这git filter-branch就是这里的关键,但以前从未使用过它,会做一些阅读。

4

1 回答 1

0

这不是一个完整的解决方案,但git filter-branch --subdirectory-filter foo会重写存储库以具有 ./foo 的新根,所以它看起来像

./magic.py
./document.txt

以及这些提交的随附历史记录。

它肯定与我想要的足够接近,.gitignore 文件的历史不是必需的,并且可以很容易地作为第一次提交追溯插入,因为无论如何我们都在破坏 SHA1 哈希兼容性。

于 2013-05-30T13:15:17.560 回答