2012-09-08 130 views
7

我知道我可以从git存储库的目录中创建一个新的存储库。看到这里:https://help.github.com/articles/splitting-a-subfolder-out-into-a-new-repository/如何将一个目录从一个git存储库复制到另一个,保存历史记录?

但是,如何将一个目录从一个存储库复制到另一个完全不同的存储库的新目录,同时保留该目录的历史记录?

更新:是否有可能使历史与git日志显示?

+0

GitHub url现在是:https://help.github.com/articles/splitting-a-subpath-out- into-a-new-repository –

回答

6

你可以用git filter-branch来做到这一点。基本上你想要:

  1. 使用已找到的链接将第一个项目中的子路径拆分到新的存储库中。
  2. 将其推送到唯一分支上的第二个项目的远程。
  3. 取该分支进入第二库中,然后使用git filter-branch索引过滤成正确的子目录:

    git filter-branch --index-filter ' 
        git ls-files -sz | 
        perl -0pe "s{\t}{\tnewsubdir/}" | 
        GIT_INDEX_FILE=$GIT_INDEX_FILE.new \ 
         git update-index --clear -z --index-info && 
         mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE" 
    ' HEAD 
    
  4. 最后,结账的第二个项目的master分支(或者你的任何分支使用),然后在新过滤的分支中合并。

真的不是太可怕的手术,全都告诉。正如AlexanderGladysh在评论中指出的,您也可以在步骤3和步骤4中使用subtree merging strategy

+0

难道你不能使用子树合并策略而不是步骤3和4? –

+0

@AlexanderGladysh是的。你可以用子树合并策略来完成。我相应地编辑了答案。 – Christopher

+0

嗯。我决定采用子树合并策略。一个问题是,git登录该目录只显示最后的合并提交不是整个历史:(这是预期的吗? – namin

相关问题