我正在尝试使用以下命令将一个存储库(repo1)的内容移动到另一个现有的存储库(repo2):
git clone repo1
git clone repo2
cd repo1
git remote rm origin
git remote add repo1
git push
但这并不奏效。我看过一篇类似的文章,但我只发现一个人移动了文件夹,而不是内容。
我正在尝试使用以下命令将一个存储库(repo1)的内容移动到另一个现有的存储库(repo2):
git clone repo1
git clone repo2
cd repo1
git remote rm origin
git remote add repo1
git push
但这并不奏效。我看过一篇类似的文章,但我只发现一个人移动了文件夹,而不是内容。
当前回答
我在这里看到了很多解决方案。一个是一个快速的一行,在过去为我工作是使用-mirror选项。先进入你想要复制的repo。然后假设你有一个新的回购已经设置,使用克隆链接,这就是它。它会复制所有历史到你的新回购。
光盘回购
Git——mirror linktonewrepo.git
其他回答
镜像存储库
根据@Dan-Cohn的回答,镜像推送是你的朋友。这是我的迁移回购:
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
对于那些使用GitHub的人,你可以通过web UI导入另一个存储库(包括历史):
https://github.com/new/import
如果您希望保留现有的分支并提交历史,这里有一种对我有用的方法。
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
注:我还没有使用子模块,所以我不知道如果你有他们可能需要额外的步骤。
如果您正在从一个github回购迁移到另一个github回购
我建议使用:git clone -bare <URL>而不是:git clone -mirror进行迁移,因为如果你镜像一个github repo,它不仅会克隆源代码相关的东西,还会克隆剩余的pull请求和github引用,导致一个![远程拒绝]错误时推。
我正在谈论这个问题
我推荐的方法是:
git clone——bare <旧的Repo Url> CD <克隆repo>的路径 git push——镜子新回购Url > <
成功迁移所有分支,历史和源代码到github新回购没有任何错误!
我使用下面的方法通过维护所有分支和提交历史来将我的GIT Stash迁移到GitLab。
将旧的存储库克隆到本地。
git clone --bare <STASH-URL>
在GitLab中创建一个空存储库。
git push --mirror <GitLab-URL>