如何将嵌套的git repo合并到父repo中,保留历史记录?

amn*_*amn 5 git

现在我知道大多数git专家会立即想到git rebase,但我更普遍地使用"rebase"这个词:我的项目结构如下:

.
..
.git
tools
lib
src
    .git
build
Run Code Online (Sandbox Code Playgroud)

两者../src目录都是明显的git存储库,并且具有很长的历史和大量的提交.存储库.忽略src目录(这是它自己的存储库).

我刚刚意识到我只想在.跟踪包括源文件在内的所有内容时只需要一个repo ,因为坦率地说,构建系统随着源代码的发展而变得非常广泛.

我的问题是我不知道如何让这个存储库保留历史记录,该历史记录现在是存储库的一部分src.它甚至可能吗?这就是我所说的'变基' - 如果./src/main.c通过./src/.git一些N次提交跟踪变化,那么我想保留这些变化并让它们成为新存储库的一部分./.git.相同的历史,重新定位的文件路径.

UPDATE

从我收集的内容来看,子树合并不是我想要的东西.简而言之,它比我需要的更多.我只需要旧回购的内容,将所有开发分支和所有提交,标签等一起看起来好像它们始终是父回购的一部分.在本质上,唯一的变化是文件本身的路径 - 在子回购跟踪之前./main.c,新的回购现在将跟踪./src/main.c,并且据我所知,git跟踪内容,而不是文件,然后改变文件路径,如上所述和对这些的引用路径,应该是相当微不足道的,对吗?

ams*_*ams 0

如果这可行的话,并没有真正的用处,但值得一试。假设 src 位于远程服务器上,父级位于远程服务器上。您可以尝试以下操作。

  • git clone url 到远程服务器以克隆包含工具、lib 和构建的存储库
  • git 将远程 src url 添加到 src 远程存储库
  • 创建 src 远程存储库的跟踪分支,然后在父存储库上检查它
  • 将远程跟踪分支合并到主分支中。
  • 删除第二个遥控器。