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

Moving Git repository content to another repository preserving history

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

  • git clone repo1
  • git clone repo2
  • cd repo1
  • git remote rm origin
  • git remote add repo1
  • git push
  • 但它不起作用。我查看了其他类似的帖子,但我只发现移动文件夹而不是内容。


    我认为你需要的命令是:

    1
    2
    3
    4
    5
    6
    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/

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

    1
    git fetch origin

    我们可以检查是否有需要创建本地副本的丢失分支:

    1
    git branch -a

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

    1
    git remote add new-origin [email protected]:manakor/manascope.git

    现在,我们准备将所有本地分支和标记推送到新的远程新源站:

    1
    2
    git push --all new-origin
    git push --tags new-origin

    让我们将新原点设为默认远程:

    1
    git remote rm origin

    将新原点重命名为"仅原点",使其成为默认的远程:

    1
    git remote rename new-origin origin


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

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

    现在,假设您希望在一段时间内保持源和目标repos的同步。例如,您希望将当前远程回购中的活动引入新的/替换的回购。

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

    要下拉最新的更新(假设没有本地更改):

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

    注意:我还没有使用子模块,所以我不知道如果有子模块的话,还需要什么额外的步骤。


    这可以将我的本地回购(包括历史)移动到远程github.com回购。在github.com上创建了新的空回购之后,我在下面的第三步中使用了该URL,它工作得很好。

    1
    2
    3
    4
    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跟踪,那么将新的存储库设置为"源站"以进行推送。

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


    根据@dan cohn回复,推镜是你的朋友。这是我迁移repos的目的:

    镜像存储库

    1.打开Git Bash。

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

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

    3.镜像推送到新存储库。

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

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

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

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


    我使用下面的方法通过维护所有分支和提交历史记录将我的Git存储迁移到Gitlab。

    将旧存储库克隆到本地。

    1
    git clone --bare <STASH-URL>

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

    1
    git push --mirror <GitLab-URL>


    看起来你很亲近。假设这不仅仅是你提交的文件中的错别字,那么步骤3应该是cd repo2,而不是repo1。步骤6应该是git pull而不是push。返工清单:

    1
    2
    3
    4
    5
    6
    7
    8
    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


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

    这有助于为我保留所有提交历史。

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