jke*_*ing 36 git git-filter-branch
可能重复:
如何在保留子目录的同时拆分git存储库?
有一次,我将我的代码添加到现有的git repo中,并且已经承诺了很多,因为其他开发人员已经提交到repo中的其他现有文件. 现在我想将我的代码拆分为自己的repo,但保留我的特定文件的所有更改历史记录.
通过阅读其他人为分割代码所做的工作,我正在查看filter-branch和执行--index-filter或--tree-filter使用rm命令来查找我不关心的文件.我不想使用,--subdirectory-filter因为它不适合将我的代码保存为topdir的子目录(我们也共享一个子目录).更复杂的是,原始存储库中的一些文件随着时间的推移已经移动了一些,并且有一些文件被创建然后被删除.这使得设计一个rm列表有点......具有挑战性.
我正在寻找一种方法来过滤所有/除了/文件/目录列表.有人知道这样做的方法吗?
jke*_*ing 47
只是为了关闭循环,所以它似乎回答了.
通过使用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8141 次 |
| 最近记录: |