我想默认推拉所有分支,包括新创建的分支。
我可以为它定义一个设置吗?
否则,当我在本地添加一个新分支并且我想从服务器中提取它时,最简单的方法是什么?
我创建了一个同名的新分支并尝试拉,但它不起作用。询问我分支的所有远程配置。我该如何设置。
我想默认推拉所有分支,包括新创建的分支。
我可以为它定义一个设置吗?
否则,当我在本地添加一个新分支并且我想从服务器中提取它时,最简单的方法是什么?
我创建了一个同名的新分支并尝试拉,但它不起作用。询问我分支的所有远程配置。我该如何设置。
最简单的方法是:
git push --all origin
这将推送标签和分支。
使用现代 git,您始终可以获取所有分支(作为远程跟踪分支进入命名空间,使用orrefs/remotes/origin/*
可见)。 git branch -r
git remote show origin
默认情况下(请参阅push.default
配置变量的文档),您推送匹配的分支,这意味着首先您必须让git push origin branch
git 始终推送它git push
。
如果你想总是推送所有的分支,你可以设置 push refspec。假设远程已命名origin
,您可以使用git config:
$ git config --add remote.origin.push '+refs/heads/*:refs/heads/*'
$ git config --add remote.origin.push '+refs/tags/*:refs/tags/*'
或直接编辑.git/config
文件以具有以下内容:
[遥远的“起源”] url = user@example.com:/srv/git/repo.git fetch = +refs/heads/*:refs/remotes/origin/* fetch = +refs/tags/*:refs/tags/* push = +refs/heads/*:refs/heads/* push = +refs/tags/*:refs/tags/*
在推送规范中包含 + 可能是个坏主意,因为这意味着即使没有 -f git 也会很高兴地进行非快进推送,如果远程服务器设置为接受这些,您可能会丢失历史记录。
试试这个:
$ git config --add remote.origin.push 'refs/heads/*:refs/heads/*'
$ git config --add remote.origin.push 'refs/tags/*:refs/tags/*'
$ git config --add remote.origin.fetch 'refs/heads/*:refs/remotes/origin/*'
$ git config --add remote.origin.fetch 'refs/tags/*:refs/tags/*'
我曾使用以下命令将所有分支迁移到新存储库。
~$ 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 master
~$ git push new-origin --mirror
注意:在将仓库从 Atlassian Stash克隆到 AWS CodeCommit(空白仓库)时,我必须使用倒数第二个(即先推送主服务器)命令。我不确定原因,但在 push ( git push new-origin --mirror
) 之后,默认分支指的是其他分支而不是master
.
如果您要将分支从旧分支移动到新 repo,并且没有本地所有旧 repo 分支,则需要先跟踪它们。
for remote in `git branch -r | grep -v '\->'`; do git branch --track $remote; done
然后添加你的新远程仓库:
git remote add bb <path-to-new-repo>
然后您可以使用以下命令推送所有内容:
git push -u bb --all
或者,如果您不这样做或者只是想移动本地分支,您可以使用此处其他响应中提到的 git config 命令配置 repo。
重要的一点,其他响应只推送所有本地分支。如果分支仅存在于备用远程存储库中,则它们不会在不先跟踪它们的情况下移动。这里介绍的 for 循环将对此有所帮助。
如果您要将所有分支从旧的仓库移动到新的仓库,那么在您的本地仓库中,您需要在推送到新仓库之前设置每个分支到现有原始分支的跟踪,否则您的所有原始分支都不会出现在新的起源。通过跟踪或检查每个分支手动执行此操作,或使用一个班轮:
for remote in `git branch -r | grep -v '\->' | grep -v master`; do git branch --track `echo $remote|sed 's=origin/=='` `echo $remote`; done
这一行命令基于此页面上其他答案中的版本,但可以说更好,因为:
接下来,如果您要切换原点,请将链接替换为旧原点并指向新的遥控器。确保首先使用 bitbucket/github GUI 创建新的远程,但不要向其中添加任何文件,否则会出现合并问题。例如
git remote set-url origin git@bitbucket.org:YOUR/SOMEREPO.git
现在推。请注意,推送标签也需要第二个命令:
git push -u --all origin
git push --tags origin
要查看所有不使用的分支,git branch -a
您应该执行:
for remote in `git branch -r`; do git branch --track $remote; done
git fetch --all
git pull --all
现在你可以看到所有的分支:
git branch
要推送所有分支,请尝试:
git push --all
对我来说转移所有分支和标签的完整过程是结合@vikas027 和@kumarahul 的答案:
~$ git clone <url_of_old_repo>
~$ cd <name_of_old_repo>
~$ git remote add new-origin <url_of_new_repo>
~$ git push new-origin --mirror
~$ git push new-origin refs/remotes/origin/*:refs/heads/*
~$ git push new-origin --delete HEAD
最后一步是因为HEAD
通配符导致新远程中出现了一个名为的分支
如果你从一个远程源推送到另一个,你可以使用这个:
git push newremote refs/remotes/oldremote/*:refs/heads/*
这对我有用。参考这个:https ://www.metaltoad.com/blog/git-push-all-branches-new-remote
我在这里找到了最好和最简单的方法,就像@kumarahul 发布的那样,对我来说就像一个魅力,它将所有标签和分支从原点推送到新的遥控器:
git remote add newremote new-remote-url
git push newremote --tags refs/remotes/origin/*:refs/heads/*
我使用了'git push --all -u newremote',但它只将签出的分支推送到newremote。
Git:将所有分支推送到新的远程
作者:软件架构师 Keith Dechant
这是你们中的一些人在使用 Git 存储库时可能遇到的场景。你有一个 Git 存储库的工作副本,比如来自旧服务器。但是您只有工作副本,并且无法访问来源。所以你不能只分叉它。但是你想将整个 repo 和所有分支历史推送到你的新遥控器。
如果您的工作副本包含来自旧远程的跟踪分支(origin/branch1、origin/branch1 等),这是可能的。如果你这样做了,你就有了整个回购和历史。
然而,就我而言,有几十个分支机构,其中一些或全部我从未在本地检查过。将它们全部推开似乎是一件沉重的事情。那么,如何进行呢?
我确定了两个选项:
选项 1:检查每个分支并推送我可以做到这一点,我什至可以编写一个 Bash 脚本来提供帮助。但是,这样做会在每次结帐时更改我的工作文件,并为每个远程跟踪分支创建一个本地分支。对于大型回购,这会很慢。
选项 2:在不更改工作副本的情况下推送 还有第二种选择,它不需要检查每个分支,不会在工作副本中创建无关的分支,甚至不需要修改工作副本中的文件。
如果您的旧的不再活动的遥控器称为“oldremote”,而您的新遥控器称为“newremote”,您可以使用以下命令仅推送远程跟踪分支:
git push newremote refs/remotes/oldremote/*:refs/heads/*
在某些情况下,也可以只推送分支的一个子集。如果分支名称以斜线命名(例如,oldremote/features/branch3、oldremote/features/branch4 等),则只能推送名称以“oldremote/features”开头的远程跟踪分支:
git push newremote refs/remotes/oldremote/features/*:refs/heads/features/*
无论您推送所有分支还是仅推送其中一些分支,Git 都将执行整个操作,而无需创建任何新的本地分支,也无需更改您的工作文件。每个与您的模式匹配的跟踪分支都将被推送到新的远程。
有关该主题的更多信息,请查看 Stack Overflow 上的此线程。
发布日期:2017 年 10 月 9 日
origin
配置中没有硬编码的解决方案在您的全局gitconfig中使用以下内容
[remote]
push = +refs/heads/*
push = +refs/tags/*
这会推送所有分支和所有标签
origin
在配置中硬编码?如果你硬编码:
origin
在所有存储库中成为遥控器。所以你将无法添加原点,但你需要使用set-url
.origin
已经存在(从第 1 点开始)记住:)根据 Jakub Narębski 的回答:
使用现代 git,您始终可以获取所有分支(作为远程跟踪分支到 refs/remotes/origin/* 命名空间
首先将远程 git 添加到您的 loacl
git remote add remote_name remote_address
在您只需要使用以下命令完成之后
git push --all remote_name