将本地 Git 仓库推送到新的远程仓库,包括所有分支和标签。

9 浏览
0 Comments

将本地 Git 仓库推送到新的远程仓库,包括所有分支和标签。

我有一个本地的Git仓库,我想要将其推送到一个新的远程仓库(如果有关的话,是在Beanstalk上建立的全新仓库)。

我的本地仓库有几个分支和标签,我想要保留所有的历史记录。

看起来,我基本上只需要执行git push,但是这样只会上传master分支。

我应该如何推送所有内容,以便在远程得到一个完整的本地仓库的副本?

0
0 Comments

问题的原因是在将本地Git仓库推送到新的远程仓库时,包括所有分支和标签,但是在执行"git push --all"命令之前,需要先checkout这些分支。

解决方法是先执行以下命令来checkout所有分支:

for remote in `git branch -r | grep -v master `; do git checkout --track $remote ; done

然后再执行以下命令来推送所有分支和标签:

git push --all

有一个奇怪的现象是,执行"git push '*:*'"命令可以推送所有分支,而"git push --all"只能推送master分支。这个问题是在将仓库从GitHub迁移到Bitbucket时遇到的。

可以简化以上操作,只需执行"git branch --track $remote"命令即可,这样在大型仓库中检出旧分支需要花费一些时间。

另外要注意的是,需要将命令中的"--track $remote"修改为"--track remotes/$remote",完整的命令如下:

for remote in `git branch -r | grep -v master `; do git checkout --track remotes/$remote ; done

如果想要包括master分支,可以移除"grep -v master"部分。如果开始时使用的是裸仓库,并且一些仓库的分支名称中包含master(如master-next),可以通过移除该部分来允许master分支。

以上方法适用于将两个远程仓库同步的情况。如果团队在从GitHub迁移到GitLab的过程中,又有一些依赖于旧的GitHub CI流水线的工作出现,那么在这些工作结束后,可以再次从GitHub导入到GitLab,而不会丢失GitLab中的进展。这种方法比已经被接受的答案更适合。

0
0 Comments

问题的原因是在克隆一个远程仓库到另一个远程仓库时,想要包括所有的分支和标签,但是不想事先检出所有的分支。在Daniel的解决方案中,如果之前已经检出了源远程仓库的跟踪分支,会拒绝检出该跟踪分支,即在推送之前不会更新本地分支。为了解决这个问题,可以使用git命令:git push destination +refs/remotes/source/*:refs/heads/*,这个命令会将源远程仓库的所有分支推送到目标远程仓库的一个主分支上,可能会进行非快进推送。但是需要单独推送标签。

文章的标题可以为:如何将本地Git仓库推送到新的远程仓库,包括所有分支和标签

在克隆远程仓库到另一个远程仓库时,有时我们想要克隆所有的分支和标签,但是又不想事先检出所有的分支。在某些情况下,我们可能会遇到一个问题:如果我们之前已经检出了源仓库的跟踪分支,那么在推送之前它将拒绝检出该跟踪分支,从而导致我们无法更新本地分支。

幸运的是,我们可以使用以下命令解决这个问题:git push destination +refs/remotes/source/*:refs/heads/*。这个命令将源仓库的所有分支推送到目标仓库的一个主分支上,可能会进行非快进推送。需要注意的是,标签需要单独推送。

如果你不是直接使用命令行界面,而是使用其他工具,你需要在命令中转义星号:git push destination +refs/remotes/source/\*:refs/heads/\*

这个解决方法对于我来说非常有效,它允许我从一个远程仓库克隆到另一个远程仓库。如果你遇到了与我类似的问题,希望这个解决方法对你也有帮助!

以上就是解决将本地Git仓库推送到新的远程仓库,包括所有分支和标签的方法。希望对你有帮助!

0
0 Comments

问题的出现原因:

- 使用命令`git push REMOTE --all`时,原始远程仓库上的分支不会被推送,除非在本地进行了检出。

- 使用命令`git push REMOTE --mirror`时,除了推送分支和标签外,还会推送远程仓库,这可能不是用户想要的结果。

解决方法:

- 使用命令`git push REMOTE '*:*'`或`git push REMOTE --all`来推送所有分支。

- 使用命令`git push REMOTE --tags`来推送所有标签。

- 使用命令`git push REMOTE --mirror`来一次性推送所有分支和标签,但需要注意会连同远程仓库一起推送。

其他注意事项:

- 使用`--all`而不是`*:*`更友好。

- 在使用`--mirror`时,可能会出现本地远程分支被列为已推送但实际上未出现在仓库中的情况,需要先检出所有远程分支再使用`--mirror`。

- 使用`--dry-run`命令查看将要执行的操作,以避免误操作。

- 如果原始远程仓库仍然可用,可以先使用`git clone --mirror old-remote-url; cd repo.git; git push --mirror new-remote-url`将整个仓库克隆到新的远程仓库。

- 在Windows上,需要使用`":"`代替`"*"`。

- 使用`--mirror`可以实现从服务器A克隆并推送到服务器B的操作,而`--all`只会推送本地跟踪的分支。

- 使用`git push -u origin --mirror`可以在切换远程仓库并获取所有未在本地检出的分支时正常工作。

- 使用`--dry-run`可以避免`git push --mirror`对远程仓库做出不可逆转的更改。

- "push your remotes"指的是推送远程仓库,可能会产生意外效果。

- 使用`git push REMOTE --all`只会推送本地分支到远程仓库,而`git push REMOTE '*:*'`会推送本地分支和其他远程分支到远程仓库。

- 使用`git push REMOTE '*:*'`似乎也会推送标签,而`--all`则不会。

- `git push --all`不会推送原始远程仓库上的分支(通过`git branch -r`查看),除非它们在本地被检出。可以结合下面的答案来完整地解决这个问题。

- 可以使用`git push --follow-tags`和`git config --global push.followTags true`命令来推送标签。

- `--all`只会推送本地已检出的分支,而`*:*`会推送源仓库中的所有分支到目标仓库,包括标签。

- 不要使用`git push REMOTE --mirror`,它会删除所有分支。可以使用`reflog`命令查找意外删除的引用。

0