我有以下存储库foo.git
和以下子文件夹。
/foo
----/bar1
----/bar2
我想创建一个新的单独存储库bar1.git
及其提交历史记录,现在有内容的两个副本-位于bar1.git
和foo.git/bar1
。
还有,在以后保留新提交历史的情况下,将bar1.git
与foo.git/bar1
的更新内容合并回去的好方法是什么?
我知道subtree
,submodule
和filter-branch
命令,但不确定在我的情况下哪个命令以及如何正确使用它们。
答案 0 :(得分:0)
使用git-submodule的解决方案如下:
bar1.git
存储库转到本地foo
存储库,并使用以下命令在其中添加git-submodule:
git submodule add -b master https://github.com/user/bar1.git bar1
使用以下命令更新git-submodule:
git submodule update --init --recursive --remote
在任何新的克隆foo
存储库之后也要使用此命令。
您将看到.gitmodules
文件,其内容类似于:
[submodule "bar1"]
path = bar1
url = https://github.com/user/bar1.git
branch = master
在foo
存储库中提交并提取您的更改
如果您对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
分支中的最新修订版。