根据触摸的文件将git存储库/历史记录分成两个独立的分支

时间:2013-05-30 12:43:17

标签: git

假设我有一个如下所示的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.pyherp/derp.h。分支应该具有影响这些文件的提交的所有历史记录,可以分解影响多个文件的提交(跨历史分割)。

我该怎么做/怎么办? (我考虑过只是耸耸肩,复制文件,并说历史,但这似乎是一个警察。)

编辑:

非常确定git filter-branch在这里持有密钥,但以前从未使用它,会做一些阅读。

1 个答案:

答案 0 :(得分:0)

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

./magic.py
./document.txt

附上这些承诺的历史记录。

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