将Git存储库内容移动到保留历史记录的另一个存储库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将Git存储库内容移动到保留历史记录的另一个存储库相关的知识,希望对你有一定的参考价值。

我试图使用以下命令仅将一个存储库(比如repo1)的内容移动到另一个现有存储库(比如repo2);

  1. git clone repo1
  2. git clone repo2
  3. cd repo1
  4. git remote rm origin
  5. git remote add repo1
  6. git push

但它不起作用。我回顾了其他类似的帖子,但我只发现移动文件夹而不是内容。

答案

我认为您正在寻找的命令是:

cd repo2
git checkout master
git remote add r1remote **url-of-repo1**
git fetch r1remote
git merge r1remote/master --allow-unrelated-histories
git remote rm r1remote

之后,repo2/master将包含来自repo2/masterrepo1/master的所有内容,并且还将包含它们的历史。

另一答案

在这里完美描述https://www.smashingmagazine.com/2014/05/moving-git-repository-new-server/

首先,我们必须从现有存储库中获取所有远程分支和标记到我们的本地索引:

git fetch origin

我们可以检查我们需要创建本地副本的任何缺少的分支:

git branch -a

让我们使用新存储库的SSH克隆URL在我们现有的本地存储库中创建一个新的远程:

git remote add new-origin git@github.com:manakor/manascope.git

现在我们准备将所有本地分支和标签推送到名为new-origin的新远程:

git push --all new-origin 
git push --tags new-origin

让我们将new-origin设为默认远程:

git remote rm origin

将new-origin重命名为origin,以便它成为默认远程:

git remote rename new-origin origin
另一答案

如果您希望保留现有分支并提交历史记录,这里有一种对我有用的方法。

git clone --mirror https://github.com/account/repo.git cloned-repo
cd cloned-repo
git push --mirror {URL of new (empty) repo}

现在,假设您希望将源和目标存储库保持同步一段时间。例如,您希望将当前远程仓库中的活动转移到新的/替换仓库。

git clone -o old https://github.com/account/repo.git my-repo
cd my-repo
git remote add new {URL of new repo}

要提取最新更新(假设您没有本地更改):

git checkout {branch(es) of interest}
git pull old
git push --all new

注意:我还没有使用子模块,因此我不知道如果你有子模块可能还需要哪些步骤。

另一答案

这有助于将我的本地仓库(包括历史)移至我的远程github.com仓库。在GitHub.com上创建新的空回购后,我在下面的步骤3中使用了URL,它运行良好。

git clone --mirror <url_of_old_repo>
cd <name_of_old_repo>
git remote add new-origin <url_of_new_repo>
git push new-origin --mirror

我发现这个:https://gist.github.com/niksumeiko/8972566

另一答案

最简单的方法是,如果Git已经跟踪了代码,那么将新的存储库设置为要推送到的“原点”。

cd existing-project
git remote set-url origin https://clone-url.git
git push -u origin --all
git push origin --tags
另一答案

看起来你很亲密。假设它不仅仅是你提交的拼写错误,第3步应该是cd repo2而不是repo1。第6步应该是git pull不推。返工清单:

1. git clone repo1
2. git clone repo2
3. cd repo2
4. git remote rm origin
5. git remote add repo1
6. git pull
7. git remote rm repo1
8. git remote add newremote
另一答案

我使用以下方法通过维护所有分支和提交历史记录将我的GIT Stash迁移到GitLab。

将旧存储库克隆到本地。

git clone --bare <STASH-URL>

在GitLab中创建一个空存储库。

git push --mirror <GitLab-URL>
另一答案

按照@ Dan-Cohn的说法,Mirror-push是你的朋友。这是我去迁移回购:

镜像存储库

1.打开Git Bash。

2.创建存储库的裸克隆。

$ git clone --bare https://github.com/exampleuser/old-repository.git

3.Mirror-推送到新的存储库。

$ cd old-repository.git
$ git push --mirror https://github.com/exampleuser/new-repository.git

4.删除您在步骤1中创建的临时本地存储库。

$ cd ..
$ rm -rf old-repository.git

参考和信用:https://help.github.com/en/articles/duplicating-a-repository

另一答案

这里有很多复杂的答案;但是,如果您不关心分支保留,您需要做的就是重置远程原点,设置上游和推送。

这有助于保留我的所有提交历史记录。

cd <location of local repo.>
git remote set-url origin <url>
git push -u origin master

以上是关于将Git存储库内容移动到保留历史记录的另一个存储库的主要内容,如果未能解决你的问题,请参考以下文章

如何将文件从一个文件夹移动到同一git存储库中的另一个文件夹保留历史记录[重复]

如何将分支内容移动到另一个存储库保留历史记录并避免复制原始存储库的完整历史记录?

sh 将git存储库及其所有分支,标记移动到新的远程存储库,保留提交历史记录

如何将一些文件从一个 git repo 移动到另一个(不是克隆),保留历史记录

sh 将子目录从一个git存储库移动到另一个git存储库的子目录,而不会丢失提交历史记录。

将子目录分离(移动)到单独的 Git 存储库中