将一些文件分离到单独的Git存储库中

时间:2011-12-01 03:10:05

标签: git git-filter-branch

我知道有一个大线程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

到目前为止,除了提交历史记录丢失之外这么好。有什么想法?

2 个答案:

答案 0 :(得分:0)

您必须使用the subtree merge strategy将“远程”文件夹“ABC”合并到本地文件夹“ABC”中并保留历史记录。然后,您将使用filter-branch删除不需要的文件。

答案 1 :(得分:0)

我做的是:

  1. git clone ABC/ DEF/; cd DEF
  2. git remote rm origin
  3. git filter-branch --prune-empty --tree-filter 'rm -fr <list of files/folders to remove>' -- --all
  4. git filter-branch -f --prune-empty --subdirectory-filter DEF -- --all
  5. 就是这样。添加了新项目远程,并继续在单独的存储库中工作。