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

时间:2013-06-28 18:15:02

标签: git merge repository migrate

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

  
      
  1. git clone repo1
  2.   
  3. git clone repo2
  4.   
  5. cd repo1
  6.   
  7. git remote rm origin
  8.   
  9. git remote add repo1
  10.   
  11. git push
  12.   

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

12 个答案:

答案 0 :(得分:178)

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

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中的所有内容,并且还会包含这两者的历史记录。

答案 1 :(得分:38)

这里完美描述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

答案 2 :(得分:9)

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

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

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

答案 3 :(得分:5)

这可以将我的本地仓库(包括历史记录)移至我的远程github.com仓库。在GitHub.com上创建新的空回购后,我在下面的第三步中使用了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

找到了这个

答案 4 :(得分:2)

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

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

答案 5 :(得分:1)

看起来你很亲密。假设它不仅仅是您提交中的拼写错误,则步骤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

答案 6 :(得分:0)

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

将旧存储库克隆到本地。

data = [
  {first_name: 'John', last_name: 'Doe'},
  {first_name: 'Kiki', last_name: 'empty'},
  {first_name: 'Kim', last_name: 'empty'},
]

data.forEach(function(value){
  if(value.last_name == 'empty'){
    alert('Please fill all the field');
    return false;
  }
});

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

git clone --bare <STASH-URL>

答案 7 :(得分:0)

根据@ Dan-Cohn的回答Mirror-push是您的朋友在这里。这是我用于迁移存储库的路径:

镜像存储库

1。打开Git Bash。

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

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

3。镜像到新的存储库。

$ 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

答案 8 :(得分:0)

我不太确定我所做的是否正确,但无论如何它都有效。我重命名了 repo1 中的 repo2 文件夹,并提交了更改。就我而言,它只是我想合并的一个 repo,所以这种方法有效。后来,做了一些路径更改。

答案 9 :(得分:0)

我做了什么:

  1. 将存储库克隆到文件夹
  2. cd existing-project
  3. 在这里打开一个 git 终端
  4. git remote set-url origin
  5. git push -u origin --all
  6. git push origin --tags

答案 10 :(得分:0)

如果您要从 github 存储库迁移到另一个 github 存储库

我建议使用:git clone --bare <URL> 而不是:git clone --mirror 进行迁移,因为如果您镜像 github 存储库,它不仅会克隆与源代码相关的内容,还会克隆剩余的拉取请求和 github 引用,推送时导致 ! [remote rejected]

I am talking about this problem

我推荐的程序:

1. $ git clone --bare <Old Repo Url>

2. $ cd <path to cloned repo>

3. $ git push --mirror <New Repo Url>

已成功将所有分支、历史和源代码迁移到 github new repo,没有任何错误!

答案 11 :(得分:-1)

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

这可以保留我的所有提交历史记录。

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