我想默认情况下推拉所有分支,包括新创建的分支。
我可以为它定义一个设置吗?
否则,当我在本地添加新分支并且想要从服务器中将其提取时,最简单的方法是什么?
我用相同的名称创建了一个新分支,并尝试拉,但它不起作用。向我询问分支的所有远程配置。我该如何设置。
我想默认情况下推拉所有分支,包括新创建的分支。
我可以为它定义一个设置吗?
否则,当我在本地添加新分支并且想要从服务器中将其提取时,最简单的方法是什么?
我用相同的名称创建了一个新分支,并尝试拉,但它不起作用。向我询问分支的所有远程配置。我该如何设置。
Answers:
最简单的方法是:
git push --all origin
这将推送标签和分支。
-u
一次,例如git push --all origin -u
,跟踪已设置,然后您可以简单地使用git push
。
git push --tags origin
用来推送所有标签。
使用现代git时,您始终会获取所有分支(作为到refs/remotes/origin/*
名称空间的远程跟踪分支,可通过git branch -r
或看到git remote show origin
)。
默认情况下(请参阅push.default
config变量的文档),您推送匹配的分支,这意味着首先必须使git push origin branch
git始终将其推送到git 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
文件,使其具有以下内容:
[远程“来源”] 网址= user@example.com:/srv/git/repo.git 提取= + refs / heads / *:refs / remotes / origin / * 提取= + refs / tags / *:refs / tags / * 推送= + refs / heads / *:refs / heads / * 推送= + refs / tags / *:refs / tags / *
git push --all origin
一次发布所有分支和标签非常有用,尽管默认直到当前版本的“ matching”语义都意味着您之后将推送所有分支...除非添加新的分支或标签。该设置到“推[...]默认情况下,所有的分支”作为写。
fatal: Invalid refspec ''+refs/heads/*:refs/heads/*''
注意:我使用的是git 2.0。我仍在研究如何解决此问题。)
push.default
是simple
。
在push规范中包含+可能不是一个好主意,因为这意味着即使没有-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/*'
--global
选项添加到每个选项中,以使该选项成为所有存储库的全局默认值。
git remote add
。
我曾使用以下命令将所有分支迁移到新存储库。
~$ 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(空白仓库)时,我必须使用倒数第二条命令(即,首先推送主数据库)。我不确定原因,但是在推送(git push new-origin --mirror
)之后,默认分支引用了以外的其他分支master
。
git push new_origin --all
仅将您当前的本地分支推送到new_origin,而不是所有原始分支。
--bare
存储库与常规存储库有所不同,它仅包含.git
文件,而没有文件。如果您不打算在其中工作,那就足够了。参见--bare
和--mirror
git-scm.com/docs/git-clone。
如果您要将分支从一个旧的仓库转移到一个新的仓库中,而又没有将所有的旧仓库都放在本地,则需要先对其进行跟踪。
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命令配置存储库。
重要的是,其他响应仅推送所有本地分支。如果分支仅存在于备用REMOTE存储库中,则它们必须先进行跟踪才能移动。这里介绍的for循环将对此有所帮助。
git branch --track reponame origin/reponame
否则,您将在当前本地分支上跟踪所有远程分支
git branch -r | grep -v '\->' | sed 's/ 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
git fetch --all
吗?
如果您要将所有分支从旧仓库移至新仓库,则在本地仓库中,您需要设置对每个分支到现有原始分支的跟踪,然后再推送到新仓库,否则所有原始分支都不会出现在新的起源。通过跟踪或签出每个分支来手动执行此操作,或使用一个衬套:
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
origin
在配置中进行硬编码在全局 gitconfig中使用以下内容
[remote]
push = +refs/heads/*
push = +refs/tags/*
这将推送所有分支和所有标签
origin
不对配置进行硬编码?如果您硬编码:
origin
在所有存储库中都作为遥控器。因此,您将无法添加原点,但需要使用set-url
。origin
已经存在(从第1点开始),请记住:)根据雅库布·纳伦斯基(JakubNarębski)的回答:
使用现代git时,您始终会获取所有分支(作为远程跟踪分支进入refs / remotes / origin / *名称空间)