可能的重复:
如何在保留子目录的同时拆分 git 存储库?
有一次,我将我的代码添加到了现有的 git 存储库中,并从那时起就对其进行了很多承诺,而另一位开发人员则致力于存储库中的其他现有文件。现在我想将我的代码拆分到自己的存储库中,但保留我的特定文件的所有更改历史记录。
阅读其他人为拆分代码所做的工作,我正在查看filter-branch
和做--index-filter
or --tree-filter
with rm
我不关心的文件的命令。我不想使用--subdirectory-filter
因为将保存我的代码的子目录作为顶级目录是不合适的(我们也共享一个子目录)。使事情变得复杂的是,原始存储库中的一些文件随着时间的推移发生了一些移动,并且有些文件被创建然后被删除。这使得设计 rm 列表有点……具有挑战性。
我正在寻找一种方法来过滤除文件/目录列表之外的所有内容。有人知道有办法做到这一点吗?
只是为了关闭此循环,使其显示为已回答。
通过使用index-filter
or tree-filter
然后应用反向逻辑,例如git ls-tree
通过管道输送到(多个)grep -v
被输送到xargs
for git rm
您确实可以删除与一组狭窄的文件名/目录不匹配的所有内容。这是我用来拆分特定文件的命令:
git filter-branch \
--prune-empty \
--index-filter '
git ls-tree -z -r --name-only --full-tree $GIT_COMMIT \
| grep -z -v "^src/pyfedpkg$" \
| grep -z -v "^src/fedpkg" \
| grep -z -v "^git-changelog" \
| xargs -0 -r git rm --cached -r
' \
-- \
--all
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)