Pergunta

Eu gostaria de empurrar e puxar todos os ramos por padrão, incluindo os recém-criados.

Existe uma configuração que eu posso definir para ele?

Caso contrário, quando eu adiciono um novo ramo, localmente e quero tirá-lo do servidor, o que é a maneira mais simples de fazê-lo?

Eu criei um novo ramo com o mesmo nome e tentou puxar, mas ele não funciona. Pede-me para toda a configuração remota do ramo. Como faço para configurá-lo.

Foi útil?

Solução

A maneira mais simples é fazer:

git push --all origin

Este vai empurrar tags e ramos.

Outras dicas

Com git moderno você sempre buscar todos os ramos (AS-monitoramento remoto ramifica em namespace refs/remotes/origin/*, visíveis com git branch -r ou git remote show origin).

Por padrão (consulte a documentação da variável de configuração push.default) você empurra ramos de harmonização , o que significa que primeiro você tem que fazer git push origin branch para git para empurrá-lo sempre na git push.

Se você quiser sempre empurrar todos os ramos , você pode configurar impulso refspec. Supondo que o origin remoto é nomeado você pode usar git configuração :

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

ou diretamente editar o arquivo .git/config ter algo como o seguinte:

[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/*

Incluindo o + na especificação impulso é provavelmente uma má idéia, porque significa que git irá alegremente fazer um push não-fast-forward , mesmo sem -f , e se o servidor remoto é definida -se a aceitar aqueles, você pode perder a história.

Tente apenas isso:

$ 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/*'

Eu tinha usado a seguir comandos para migrar todos os ramos para o novo repositório.

~$ 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

NOTA : Eu tive que usar (primeira ou seja impulso principal) comando penúltimo enquanto clonar um repo da Atlassian Stash para AWS CodeCommit (repo em branco). Eu não tenho certeza do motivo, mas depois de empurrar (git push new-origin --mirror) ramificação padrão estava se referindo a algum outro ramo de master.

Se você estiver movendo ramos para um novo repo de um velho e não têm todos os ramos velhos repo local, você terá que segui-los em primeiro lugar.

for remote in `git branch -r | grep -v '\->'`; do git branch --track $remote; done

Em seguida, adicione o seu novo repo remoto:

git remote add bb <path-to-new-repo>

Em seguida, você pode empurrar todos usando este comando:

git push -u bb --all

Ou você pode configurar o repo usando o git configuração comandos observado nas outras respostas aqui se você não está fazendo isso uma vez ou está olhando apenas para mover filiais locais.

O ponto importante, as outras respostas única empurrar todas as filiais locais. Se os ramos existir apenas em um repositório remoto alternativo que não vai se mover sem segui-los em primeiro lugar. O loop para aqui apresentado irá ajudar com isso.

Para ver todos os ramos com usando git branch -a você deve executar:

for remote in `git branch -r`; do git branch --track $remote; done
git fetch --all
git pull --all

Agora você pode ver todos os ramos:

git branch

Para empurrar todos os ramos tentar:

git push --all

Se você estiver movendo todos os ramos para um novo repo de um velho, em seguida, em sua repo local, você precisa configurar o acompanhamento de cada ramo de galhos de origem existentes, antes de empurrar para o novo repo, caso contrário todas seus ramos de origem não vai aparecer na nova origem. Fazer isso manualmente através do rastreamento ou verificar cada ramo, ou usar o forro de um:

for remote in `git branch -r | grep -v '\->' | grep -v master`; do git branch --track `echo $remote|sed 's=origin/=='` `echo $remote`; done

Este comando de uma linha é baseado em versões do mesmo em outras respostas nesta página, mas é indiscutivelmente melhor porque:

  1. -lo corretamente define o rastreamento ramo, ao contrário de algumas variantes mais antigas deste comando desta página, que só fornecem um parâmetro para --track e, portanto, cada ramo acaba rastreamento mestre - não é bom
  2. nomes dos ramos locais sem o prefixo “origem /”, que eu pessoalmente não querem - e é consistente com o que acontece quando você check-out um ramo normalmente.
  3. salta rastreamento mestre desde que já está acontecendo
  4. faz, portanto, não realmente check-out tudo é rápido
  5. evita tropeçando no -> na saída do git branch -r

Em seguida, se você está mudando origens, substitua o link para a origem antiga e apontam para um novo remoto. Certifique-se de criar o novo controle remoto primeiro, usando bitbucket / github GUI, mas não adicione quaisquer arquivos para ele ou haverá um problema mesclagem. Por exemplo.

git remote set-url origin git@bitbucket.org:YOUR/SOMEREPO.git

Agora empurre. Observe o segundo comando é necessário para empurrar as marcas, bem como:

git push -u --all origin
git push --tags origin

Solução sem codificar origin em config

Use o seguinte em seu Global gitconfig

[remote]
    push = +refs/heads/*
    push = +refs/tags/*

Isso empurra todos os ramos e todas as tags

Por que você não hardcode origin em config?

Se você codificar:

  1. Você vai acabar com origin como um controle remoto em todos os repos. Então você não vai ser capaz de adicionar origem, mas você precisa usar set-url.
  2. Se a ferramenta cria um controle remoto com um empurrão nome diferente toda configuração não será aplicada. Então você vai ter que mudar o nome do remoto, mas de mudança de nome não funcionará porque origin já existe (do ponto 1) Lembre-se:)

Buscando é cuidado já pela moderna git

De acordo com a resposta de Jakub Narebski:

Com git moderno você sempre buscar todos os ramos (como remota de rastreamento de ramos em refs / remotes / origem / * namespace

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top