如何将整个git存储库及其历史记录移动到另一个git存储库的子文件夹中?

时间:2018-01-19 16:05:16

标签: git repository

我有一个库的git存储库和另一个项目的git存储库:

library/
project/

我需要将库复制到项目内的文件夹中:

project/ref/library/

在这个项目中,我将修改特定于该项目的库,因此使用子模块是不可行的。我还需要保留这个库的历史。

作为奖励,我还想知道如何将库的未来发展合并/改组为项目内部库的分支。

3 个答案:

答案 0 :(得分:0)

我找到了基于this answer的问题的解决方案:

cd library/
mkdir -p ref/library/
git mv * ref/library # Remember to not include the ref/library itself 
git commit -m "moved to ref/library"
cd ../project/
git remote add library-repo ../library
git fetch library-repo
git branch library-branch remotes/library/master
git merge library-branch --allow-unrelated-histories
git remote rm library-repo

一旦库上出现了新的东西,我就可以去图书馆并进行git fetch --rebase,然后重复这个过程。

答案 1 :(得分:0)

获得所需内容并仍然依赖于git子模块的一种方法是将您的库克隆为项目中的git子模块,然后在库中创建一个特定于项目的新分支。

这样,只要在分支上执行合并/ rebase,就可以从库中获得所有更改,您无需将提交推送回原始库,并且可以根据需要执行任意多项更改。分支以满足您的项目需求。

答案 2 :(得分:0)

我建议使用(在项目仓库内部)将库作为子模块添加到项目中:

git add submodule library.git ref/library

这样可以对ref / library中的更改进行编码,还可以决定何时接受ref / library中的更改。

submodule命令有一个foreach子命令,可以更容易地将新内容添加到子模块中。

git submodule foreach git pull || :

在每个子模块中运行git pull并在一个子模块中出现错误时继续,因为|| :

祝你好运!