我有这种情况。
我将我的存储库重构为两个src文件夹,以便我可以使用git filter-branch拆分文件夹。
所以不是src而是我创建了AAA和BBB文件夹
问题是,在我关注Detach (move) subdirectory into separate Git repository之后,我得到了没有历史记录的分离的git提交。
0 | 0 < ---在这里休息 0 | 0 | 0 | 0 ...
我也试过这个How to split a git repository and follow directory renames?
将BBB和AAA放入Name1和Name2但它没有用..
对此问题的任何帮助,我知道可以做到:)
答案 0 :(得分:0)
您是否使用命令“git mv”来重构现有目录? 你是如何将文件从一个目录复制到另一个目录的?
答案 1 :(得分:0)
如果我理解正确,您的总git历史记录中有3个文件夹: src , AAA 和 BBB 。 基本上是洞历史,你只有 src ,最后你做了一次提交,你把文件从 src 分成 AAA 和< em> BBB ,从而删除 src ,并创建另外两个。
在原理图历史记录视图中(每行是提交,最新/最新提交在顶部,如在gitk中):
AAA, BBB
src
src
src
src
.
.
.
如果您现在使用git filter-branch --prune-empty -subdirectory-filter AAA
,
它将删除历史记录中不在文件夹 AAA 内的每个提交的所有内容(然后使 AAA 成为新的根目录)。由于文件夹 AAA 仅存在于历史记录中的单个提交中,因此您只能使用此单一提交。
有多种方法可以解决这个问题,但我只会解释一下我认为最通用的方法,而且可能与更复杂的情况最兼容。
如何通过重写整个历史记录来创建AAA子仓库编写一个(shell-)脚本,删除所有不应属于 AAA 的文件,例如使用:
git rm --cached --ignore-unmatch "${fileName}"
使用此脚本重写历史记录中的每个命令,例如:
git filter-branch --prune-empty --index-filter "myCleanupScript.sh" HEAD
(注意最后一步可能需要很长时间!)