2011-12-01 96 views
1

我知道有一个大的线程Detach subdirectory into separate Git repository但总是有一些变化。我的任务与上述问题不同的是,有一些文件而不是子目录。分离一些文件到一个单独的Git仓库

Ex。

XYZ/ 
    .git/ 
    XY1/ 
    ABC/foo.py 
    ABC/bar.py 
    ABC/asdf.py 
    ABC/... 

而且我想提取foo.pybar.py到一个单独的Git仓库。

我的第一次试验是让这些2个文件的子目录,并利用在1一方法:

$ mkdir foobar 
$ git mv ABC/foo.py ABC/bar.py foobar 
$ git commit -m '...' 
$ git filter-branch --subdirectory-filter foobar HEAD 

到目前为止好,除了提交历史将丢失。任何想法?

回答

0

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

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

,就是这样。增加了新的项目远程,并继续在单独的存储库中工作。

相关问题