我知道有一个大线程Detach subdirectory into separate Git repository,但总会有一些变化。我的任务与上述问题的区别在于有一些文件而不是子目录。
实施例
XYZ/
.git/
XY1/
ABC/foo.py
ABC/bar.py
ABC/asdf.py
ABC/...
我想将 foo.py 和 bar.py 提取到一个单独的Git存储库中。
我的第一个试验是为这两个文件创建一个子目录,并使用1中提到的方法:
$ mkdir foobar
$ git mv ABC/foo.py ABC/bar.py foobar
$ git commit -m '...'
$ git filter-branch --subdirectory-filter foobar HEAD
到目前为止,除了提交历史记录丢失之外这么好。有什么想法?
答案 0 :(得分:0)
您必须使用the subtree merge strategy将“远程”文件夹“ABC”合并到本地文件夹“ABC”中并保留历史记录。然后,您将使用filter-branch删除不需要的文件。
答案 1 :(得分:0)
我做的是:
git clone ABC/ DEF/; cd DEF
git remote rm origin
git filter-branch --prune-empty --tree-filter 'rm -fr <list of files/folders to remove>' -- --all
git filter-branch -f --prune-empty --subdirectory-filter DEF -- --all
就是这样。添加了新项目远程,并继续在单独的存储库中工作。