我正在尝试使用以下命令将一个存储库(repo1)的内容移动到另一个现有的存储库(repo2):

git clone repo1
git clone repo2
cd repo1
git remote rm origin
git remote add repo1
git push

但这并不奏效。我看过一篇类似的文章,但我只发现一个人移动了文件夹,而不是内容。


当前回答

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

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

# at this point only remote cloned-repo is correct, local has auto-generated repo structure with folders such as "branches" or "refs"
cd ..
rm -rf cloned-repo
git clone {URL of new (empty) repo}
# only now will you see the expected user-generated contents in local cloned-repo folder

# note: all non-master branches are avaialable, but git branch will not show them until you git checkout each of them
# to automatically checkout all remote branches use this loop:
for b in `git branch -r | grep -v -- '->'`; do git branch --track ${b##origin/} $b; done

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

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

注:我还没有使用子模块,所以我不知道如果你有他们可能需要额外的步骤。

其他回答

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

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/master和repo1/master的所有内容,并且还将包含它们的历史。

这工作移动我的本地回购(包括历史)到我的远程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上找到了这个

看起来你很接近了。假设不仅仅是提交一个错字,应该cd repo2代替repo1步骤3。第六步应该是拉而不是推。修改了列表:

Git克隆repo1 Git克隆repo2 cd repo2 Git远程rm来源 Git远程添加repo1 git拉 Git远程rm repo1 Git远程添加newremote

我在这里看到了很多解决方案。一个是一个快速的一行,在过去为我工作是使用-mirror选项。先进入你想要复制的repo。然后假设你有一个新的回购已经设置,使用克隆链接,这就是它。它会复制所有历史到你的新回购。

光盘回购

Git——mirror linktonewrepo.git

完美描述在这里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为just origin,使其成为默认远程:

git remote rename new-origin origin