可能重复:
How to split a git repository while preserving subdirectories?
有一次,我将我的代码添加到现有的git repo中,并且已经承诺了很多,因为其他开发人员已经提交到repo中的其他现有文件。 现在我想将我的代码拆分为自己的repo,但保留我的特定文件的所有更改历史记录。
通过阅读其他人为分割代码所做的工作,我正在查看filter-branch
并使用--index-filter
--tree-filter
执行rm
命令来查找我不关心的文件关于。我不想使用--subdirectory-filter
,因为它不适合将我的代码保存为topdir的子目录(我们也共享一个子目录)。更复杂的是,原始存储库中的一些文件随着时间的推移已经移动了一些,并且有一些文件被创建然后被删除。这使得设计一个rm列表有点......具有挑战性。
我正在寻找一种方法来过滤所有/除了/文件/目录列表。有没有人知道这样做的方法?
答案 0 :(得分:45)
只需关闭此循环就可以显示已回答。
使用index-filter
或tree-filter
,然后将管道git ls-tree
的反向逻辑应用到(多个)grep -v
管道传输到xargs
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