我想在默认情况下推拉所有分支,包括新创建的分支。

我可以为它定义一个设置吗?

否则,当我在本地添加一个新分支时,我想从服务器中获取它,最简单的方法是什么?

我创建了一个具有相同名称的新分支,并试图拉,但它不起作用。要求我提供分支机构的所有远程配置。怎么设置呢?


当前回答

在推送规范中包含+可能是一个坏主意,因为这意味着即使没有-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/*'

其他回答

在推送规范中包含+可能是一个坏主意,因为这意味着即使没有-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中,你总是获取所有的分支(作为远程跟踪分支到refs/remotes/origin/*命名空间中,使用git branch -r或git remote show origin可见)。

默认情况下(请参阅push.default配置变量的文档),您会推送匹配的分支,这意味着首先您必须执行git push origin branch,以便git总是在git push上推送它。

如果你想一直推送所有分支,你可以设置push refspec。假设远程名为origin,你可以使用git配置:

$ git config --add remote.origin.push '+refs/heads/*:refs/heads/*'
$ git config --add remote.origin.push '+refs/tags/*:refs/tags/*'

或者直接编辑.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添加到您的loacl with中

git remote add remote_name remote_address

而之后你只需要用下面的命令就可以了

git push --all remote_name

对我来说,转移所有分支和标签的完整过程是,结合@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 --all origin

这将推动标签和分支。