Answers:
我认为您正在寻找的命令是:
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
它们的历史。
repo1
移入一个子文件夹(inside repo1
)。
在这里完美描述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,以便它成为默认的remote:
git remote rename new-origin origin
git checkout BranchName
分支,然后再次将分支推送到远程git push --all new-origin
如果您要保留现有分支并提交历史记录,这是对我有用的一种方法。
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.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
我通过维护所有分支和提交历史记录使用以下方法将GIT Stash迁移到GitLab。
将旧存储库克隆到本地。
git clone --bare <STASH-URL>
在GitLab中创建一个空的存储库。
git push --mirror <GitLab-URL>
看来您接近了。假设您提交的不仅仅是错字,则应该使用步骤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
根据@ 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