我有这种情况。
我正在将我的存储库重构为两个 src 文件夹,以便我可以使用 git filter-branch 拆分文件夹。
所以我创建了 AAA 和 BBB 文件夹而不是 src
问题是,在我按照分离(移动)子目录进入单独的 Git 存储库后,我得到了没有历史记录的分离 git 提交。
0 | 0 <--- 在这里打断 0 | 0 | 0 | 0 ...
通过将 BBB 和 AAA 放入 Name1 和 Name2 但它没有工作..
对此有任何帮助,我知道可以做到:)
我有这种情况。
我正在将我的存储库重构为两个 src 文件夹,以便我可以使用 git filter-branch 拆分文件夹。
所以我创建了 AAA 和 BBB 文件夹而不是 src
问题是,在我按照分离(移动)子目录进入单独的 Git 存储库后,我得到了没有历史记录的分离 git 提交。
0 | 0 <--- 在这里打断 0 | 0 | 0 | 0 ...
通过将 BBB 和 AAA 放入 Name1 和 Name2 但它没有工作..
对此有任何帮助,我知道可以做到:)
您是否使用命令“git mv”重构现有目录?您是如何将文件从一个目录复制到另一个目录的?
如果我理解正确,您的 git 历史记录中有 3 个文件夹:src、AAA和BBB。基本上,对于漏洞历史,您只有src,最后您进行了一次提交,将文件从src分成AAA和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
(注意这最后一步可能需要很长时间!)