如何在Git中将子文件夹复制到单独的存储库中?

时间:2019-01-07 22:53:16

标签: git git-submodules git-subtree git-filter-branch

我有以下存储库foo.git和以下子文件夹。

/foo
----/bar1
----/bar2

我想创建一个新的单独存储库bar1.git及其提交历史记录,现在有内容的两个副本-位于bar1.gitfoo.git/bar1

还有,在以后保留新提交历史的情况下,将bar1.gitfoo.git/bar1的更新内容合并回去的好方法是什么?

我知道subtreesubmodulefilter-branch命令,但不确定在我的情况下哪个命令以及如何正确使用它们。

1 个答案:

答案 0 :(得分:0)

使用git-submodule的解决方案如下:

  1. 创建bar1.git存储库
  2. 转到本地foo存储库,并使用以下命令在其中添加git-submodule:

    git submodule add -b master https://github.com/user/bar1.git bar1
    
  3. 使用以下命令更新git-submodule:

    git submodule update --init --recursive --remote
    

    在任何新的克隆foo存储库之后也要使用此命令。

  4. 您将看到.gitmodules文件,其内容类似于:

    [submodule "bar1"]
    path = bar1
    url = https://github.com/user/bar1.git
    branch = master
    
  5. foo存储库中提交并提取您的更改

  6. 如果您对bar1存储库进行任何更改,则需要将其与foo\bar1子模块进行同步。这可以通过以下命令来完成:

    git pull
    git submodule update --init --recursive --remote
    git pull --recurse-submodules
    git submodule foreach "(git checkout master; git pull)"
    git add --all
    git commit -m "Submodule Sync"
    git push        
    

    此命令将递归更新foo存储库中的所有子模块并将其同步到master分支中的最新修订版。