如何将一个repo移动到另一个repo文件夹并保留git历史记录?

如何将一个repo移动到另一个repo文件夹并保留git历史记录?,git,atlassian-sourcetree,Git,Atlassian Sourcetree,我想将我的项目(例如project-A)转移到monorepo,并保留整个git历史记录。现在,将远程存储库添加到具有 git remote add A <remote-repo-project-A> 源文件位于文件夹monorepo\src中,而不是monorepo\apps\project-A\src中 基本上,我想将回购A转换为具有以下结构的新回购: repo-A ---- src new repo ---- projects ---- ---repo-A(rename t

我想将我的项目(例如project-A)转移到monorepo,并保留整个git历史记录。现在,将远程存储库添加到具有

git remote add A <remote-repo-project-A>
源文件位于文件夹monorepo\src中,而不是monorepo\apps\project-A\src中

基本上,我想将回购A转换为具有以下结构的新回购:

repo-A
---- src

new repo
---- projects
---- ---repo-A(rename to project-A)
---- ------src

在Git中,历史只是提交。承诺就是历史。因此,对于您没有完全提问的问题,字面上的答案——“我可以在不更改提交内容的情况下更改提交的内容吗?”当然是否定的。更重要的是,任何人或任何东西都不能更改任何提交,因为提交是编号的,这些数字是其内容的加密校验和。因此,如果您更改了有关提交的任何内容,则会更改数字

然而,并不是所有的东西都失去了。您可以将提交复制到新的和改进的提交,其与原始提交的唯一区别是。。。好吧,让我们以一次提交为例。原始提交说明文件名为
src/file1
src/file2
,等等,下面是它们的内容:。。。提交由____; on ___;进行,其父级是。。。新的和改进的提交称这些文件名为
projects/A/src/file1
projects/A/src/file2
,等等,下面是它们的内容。。。该提交由(同一人)在(同一日期)进行,其父母是(原始提交父母的新的和改进的副本)


这个复制过程虽然繁琐但简单,可以通过
git filter branch
git filter repo
和中所示的各种其他工具(以及许多其他非常类似的问题)来完成。请注意,如果您有其他存储库的提交,或者更确切地说,您希望在该存储库中有新的和改进的提交副本,则必须决定是否将每组提交一次转换一个,然后尝试进行组合(合并)提交以组合它们,或者编写一个更奇特的过滤器,尝试同时合并所有其他存储库的提交。也就是说,一个新的和改进的提交可能表示来自其他存储库的两个或多个“原始”提交。这是一个更为困难的命题,而现有的用于简单简单操作的筛选程序并不适合您。

回答了您的问题吗?我不明白您的问题,您可以尝试更清楚一点。@Steezy我想要类似的东西,我更新了问题…@Michael我为不清楚而道歉。。。我更新了问题。我想用这种结构将旧项目转移到新回购协议
repo-A
---- src

new repo
---- projects
---- ---repo-A(rename to project-A)
---- ------src