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