【发布时间】:2013-01-28 00:28:44
【问题描述】:
现在我知道大多数 git 专家会立即想到 git rebase,但我在更一般的意义上使用“rebase”这个词:我的项目结构如下:
.
..
.git
tools
lib
src
.git
build
. 和 ./src 目录显然都是 git 存储库,并且每个都有很长的历史和大量的提交。 . 中的存储库会忽略 src 目录(这是它自己的存储库)。
我刚刚意识到,我只想在 . 中有一个单独的 repo 来跟踪包括源文件在内的所有内容,因为坦率地说,构建系统随着源代码的发展而发展,并且已经变得相当广泛。
我的问题是我不知道如何让这个存储库保留现在是src 中存储库一部分的历史记录。甚至可能吗?这就是我所说的“变基”的意思——如果./src/.git 在一些 N 次提交中跟踪./src/main.c 的更改,那么我想保留这些更改并让它们成为新存储库./.git 的一部分。相同的历史记录,重新定位文件路径。
更新
从我收集到的 SO 中,子树合并不是我想要的。简而言之,它比我需要的要多得多。我只需要旧存储库的内容,将 所有分支 的开发和所有提交、标签等一起看起来好像它们始终是父存储库的一部分。从本质上讲,唯一的变化是文件本身的路径 - 在子仓库跟踪 ./main.c 之前,新仓库现在将跟踪 ./src/main.c,因为正如我所听说的,git 跟踪内容,而不是文件,然后更改像上面这样的文件路径和对这些路径的引用,应该是相当简单的,对吗?
【问题讨论】:
-
向谷歌询问“子树合并”,这就是你想要的。
-
我至少花了一个小时,得出的结论是子树合并和子模块都不适合我。子树合并不仅保留了历史,还保留了新旧仓库之间的链接——而我的旧仓库将被淘汰和丢弃。子模块是毫无疑问的,因为我的 repos 是非常紧密耦合的。我发现以下答案最适合我,但我真的很想合并 all 分支,而不仅仅是 master:stackoverflow.com/questions/13040958/…
标签: git