Eu tenho um master
e um development
ramo, ambos enviados para o GitHub . Eu tenho clone
d, pull
ed, e fetch
ed, mas permanecem incapazes de obter outra coisa senão a master
volta ramo.
Tenho certeza de que estou perdendo algo óbvio, mas li o manual e não estou tendo nenhuma alegria.
git
github
git-branch
git-clone
remote-branch
Peter Coulton
fonte
fonte
git branch -a
) mostra as ramificações no controle remoto, mas se você tentar verificar alguma delas, estará em um estado 'desanexado HEAD'. A próxima resposta abaixo (a segunda mais votada) responde a uma pergunta diferente (a saber: como puxar todos os ramos e, novamente, isso só funciona para aqueles que você está rastreando localmente). Vários comentários apontam que você pode analisar osgit branch -a
resultados com um script de shell que rastreia localmente todas as ramificações remotas. Resumo: Não existe uma maneira nativa do git para fazer o que você deseja, e pode não ser uma idéia tão boa assim.scp [email protected]:/home/some_user/project_folder ~
Não tenho certeza se essa solução funciona para o github ...Respostas:
Primeiro, clone um repositório Git remoto e um CD nele:
Em seguida, observe as ramificações locais no seu repositório:
Mas existem outros ramos escondidos no seu repositório! Você pode vê-los usando o
-a
bandeira:Se você quiser apenas dar uma olhada rápida em um ramo upstream, pode verificar diretamente:
Mas se você quiser trabalhar nesse ramo, precisará criar um ramo de rastreamento local, que é feito automaticamente por:
e você verá
Essa última linha lança algumas pessoas: "Novo ramo" - hein? O que realmente significa é que a ramificação é retirada do índice e criada localmente para você. o linha anterior é realmente mais informativa, pois indica que a ramificação está sendo configurada para rastrear a ramificação remota, o que geralmente significa a ramificação origin / branch_name
Agora, se você olhar para suas filiais locais, é isso que você verá:
Você pode rastrear mais de um repositório remoto usando
git remote
.Neste ponto, as coisas estão ficando muito loucas, então corra
gitk
para ver o que está acontecendo:fonte
Se você tiver muitas ramificações remotas que deseja buscar de uma só vez, faça:
Agora você pode fazer o checkout de qualquer ramificação conforme necessário, sem acessar o repositório remoto.
fonte
git pull --all
fará o mesmo - ele não será buscado duas vezes. E a infosec812 está certa de que isso não responde à pergunta de qualquer maneira. Eu me pergunto como isso conseguiu tantos votos positivos.git remote update
e tenteigit branch
, só vi filiais locais. Mas, se o fizergit branch -a
, agora posso ver as ramificações remotas e posso fazer agit pull <branchname>
para obter a ramificação que desejo. - Cheguei a essa pergunta em uma pesquisa no Google e esta resposta resolve meu problema.Esse script do Bash me ajudou:
Ele criará ramificações de rastreamento para todas as ramificações remotas, exceto o mestre (que você provavelmente obteve do comando clone original). Eu acho que você ainda pode precisar fazer uma
para ter certeza.
fonte
git branch -a | grep -v HEAD | perl -ne 'chomp($_); s|^\*?\s*||; if (m|(.+)/(.+)| && not $d{$2}) {print qq(git branch --track $2 $1/$2\n)} else {$d{$_}=1}' | csh -xfs
Como de costume: teste na sua configuração antes de copiarrm -rf universe as we know it
remotes/origin/
para preservar namespaces:for BRANCH in $(git branch -a | grep remotes | grep -v HEAD | grep -v master); do git branch --track "${BRANCH#remotes/origin/}" "${BRANCH}"; done
O uso da
--mirror
opção parece copiar asremote
ramificações de rastreamento corretamente. No entanto, ele configura o repositório como um repositório simples, portanto, você deve transformá-lo novamente em um repositório normal posteriormente.Referência: FAQ do Git: Como clonar um repositório com todos os ramos rastreados remotamente?
fonte
git checkout
comando final como último para finalizar a compra do cabeçalho da ramificação atual no repositório clonado. Esta é uma ótima resposta, de longe a melhor. Seja corajoso, eventualmente, vamos levá-lo ao topo :-) #git remote update
fará isso novamente. Comportamento de mudanças de tração. Volto a acreditar que a cópia completa requer um script de uma linha.git clone --mirror
é muito bom para fazer backup de seus repositórios git ^ _ ^Você pode facilmente mudar para um ramo sem usar a sintaxe "git checkout -b somebranch origin / somebranch". Você pode apenas fazer:
O Git fará automaticamente a coisa certa:
O Git verificará se uma ramificação com o mesmo nome existe em exatamente um controle remoto e, se existir, a rastreará da mesma maneira como se você tivesse especificado explicitamente que é uma ramificação remota. Na página de manual do git-checkout do Git 1.8.2.1:
fonte
checkout
for idêntico ao nome da ramificação remota, tudo após o "/", o git criará uma ramificação com o mesmo nome, tudo após o "/", "tracking" desse controle remoto ? E por rastreamento, queremos dizer:git push
,git pull
, etc. será feito naquele remoto? Se isso estiver correto, expanda sua resposta com mais informações, porque eu concordo com @Daniel, essa resposta merece mais rep.git checkout --track origin/somebranch
explicitamente.A respeito de,
usando
ou o mais detalhado, mas mais fácil de lembrar
pode ser melhor em termos de rastreamento de um repositório remoto.
fonte
A busca que você está fazendo deve obter todas as ramificações remotas, mas não criará ramificações locais para elas. Se você usa o gitk, verá as ramificações remotas descritas como "remotes / origin / dev" ou algo semelhante.
Para criar uma filial local com base em uma filial remota, faça algo como:
O que deve retornar algo como:
Agora, quando você estiver no ramo de desenvolvimento, "git pull" atualizará seu desenvolvedor local para o mesmo ponto que o ramo de desenvolvimento remoto. Observe que ele buscará todos os galhos, mas puxe apenas o que você está no topo da árvore.
fonte
git checkout -b newlocaldev --track origin/dev
. Se você quiser que a ramificação local tenha o mesmo nome que a remota, e a remota não tiver um nome complicado, você pode omitir o-b newlocaldev
. Com abranch.autosetupmerge
configuração padrão , e supondo que você não tenha uma ramificação local nomeadadev
, esses dois comandos podem fazer a mesma coisa:git checkout -b dev origin/dev
e simplesmentegit checkout dev
. Por fim,git checkout origin/dev
não cria uma nova ramificação, apenas o coloca no estado HEAD desanexado.git branch -a
continua a listá-lo como uma filial remota.Quando você faz o "git clone git: // location", todas as ramificações e tags são buscadas.
Para trabalhar em cima de uma ramificação remota específica, supondo que seja a origem remota:
fonte
$ git branch -a
aprender quais ramificações remotas já estão disponíveis.git checkout -b master origin/master
egit checkout --track origin/master
por favor?Use aliases. Embora não haja nenhuma linha nativa do Git, você pode definir seu próprio como
e depois use-o como
fonte
Por que você vê apenas "mestre"
git clone
baixa todas as ramificações remotas, mas ainda as considera "remotas", mesmo que os arquivos estejam localizados no seu novo repositório. Há uma exceção a isso: o processo de clonagem cria uma ramificação local chamada "mestre" a partir da ramificação remota chamada "mestre". Por padrão,git branch
mostra apenas ramificações locais, e é por isso que você vê apenas "mestre".git branch -a
mostra todas as ramificações, incluindo ramificações remotas .Como obter filiais locais
Se você realmente deseja trabalhar em uma ramificação, provavelmente desejará uma versão "local" dela. Para simplesmente criar ramificações locais a partir de ramificações remotas (sem retirá-las e, assim, alterar o conteúdo do seu diretório de trabalho) , você pode fazer o seguinte:
Neste exemplo,
branchone
é o nome de uma ramificação local na qual você está criando, com baseorigin/branchone
; se você deseja criar ramificações locais com nomes diferentes, pode fazer o seguinte:Depois de criar uma ramificação local, você poderá vê-la com
git branch
(lembre-se, você não precisa-a
ver ramificações locais).fonte
origin/branchone
existir, você também pode usar apenasgit checkout branchone
para criar uma filial local com o mesmo nome e configurá-la para rastrear remotamente.Isso não é muito complicado, as etapas muito simples e diretas são as seguintes;
git fetch origin
Isso trará todas as ramificações remotas para o seu local.git branch -a
Isso mostrará todas as ramificações remotas.git checkout --track origin/<branch you want to checkout>
Verifique se você está na ramificação desejada pelo seguinte comando;
A saída será assim;
Observe o sinal * que indica a ramificação atual.
fonte
Antes tarde do que nunca, mas aqui está a melhor maneira de fazer isso:
Neste ponto, você tem uma cópia completa do repositório remoto com todas as suas ramificações (verifique com
git branch
). Você pode usar em--mirror
vez de--bare
se o seu repo remoto tiver controles remotos próprios.fonte
--bare
" mencionado na última frase não existe na lista de comandos fornecida.error: key does not contain a section: unset
. A resposta do Dave funciona melhor.git config --unset core.bare
verdade, é ... Para mim, essa parece a solução mais limpa de todas as apresentadas nas respostas aqui. Uma pena que tem tão poucas upvotes ...git config --bool core.bare false
. É por isso que recomendo a resposta de Dave . O que você acha da resposta de Dave ? CheersApenas faça o seguinte:
Veja, 'git clone git: //example.com/myprojectt' busca tudo, mesmo os ramos, você só precisa fazer check-out deles, e seu ramo local será criado.
fonte
Você só precisa usar o "git clone" para obter todas as ramificações.
Mesmo que você veja apenas branch master, você pode usar "git branch -a" para ver todos os branches.
E você pode mudar para qualquer ramo que você já possui.
Não se preocupe, pois depois de "git clone", você não precisa se conectar ao repositório remoto, "git branch -a" e "git checkout" podem ser executados com êxito quando você fechar o wifi. Portanto, está provado que, quando você faz o "git clone", ele já copiou todos os ramos do repositório remoto. Depois disso, você não precisa do repositório remoto, seu local já possui todos os códigos das agências.
fonte
A
git clone
deve copiar todo o repositório. Tente cloná-lo e, em seguida, executegit branch -a
. Ele deve listar todos os ramos. Se você deseja mudar para a ramificação "foo" em vez de "master", usegit checkout foo
.fonte
git clone
faz o download de todas as ramificações remotas, mas faz apenas uma ramificação local do mestre. Comogit branch
apenas mostra ramificações locais, você também precisagit branch -a
ver ramificações remotas.Use minha ferramenta git_remote_branch (você precisa do Ruby instalado na sua máquina). Ele foi desenvolvido especificamente para facilitar as manipulações remotas de ramificações.
Cada vez que realiza uma operação em seu nome, ela é impressa em vermelho no console. Com o tempo, eles finalmente aderem ao seu cérebro :-)
Se você não quiser que o grb execute comandos em seu nome, use o recurso 'explicação'. Os comandos serão impressos no seu console em vez de executados por você.
Por fim, todos os comandos têm aliases, para facilitar a memorização.
Observe que este é um software alfa ;-)
Aqui está a ajuda quando você executa o grb help:
fonte
todas as respostas que vi aqui são válidas, mas há uma maneira muito mais limpa de clonar um repositório e puxar todos os ramos de uma só vez.
Quando você clona um repositório, todas as informações dos ramos são realmente baixadas, mas os ramos ficam ocultos. Com o comando
você pode mostrar todas as ramificações do repositório e com o comando
você pode "baixá-los" manualmente, um de cada vez.
No entanto, quando você deseja clonar um repositório com muitos ramos, todas as formas ilustradas acima são longas e tediosas em relação a uma maneira muito mais limpa e rápida que mostrarei, embora seja um pouco complicado. Você precisa de três etapas para fazer isso:
crie uma nova pasta vazia em sua máquina e clone uma cópia espelhada da pasta .git do repositório:
o repositório local dentro da pasta my_repo_folder ainda está vazio, existe apenas uma pasta .git oculta agora que você pode ver com um comando "ls -alt" no terminal.
alterne este repositório de um repositório vazio (vazio) para um repositório regular alternando o valor booleano "bare" das configurações do git para false:
Pegue tudo o que está dentro da pasta atual e crie todas as ramificações na máquina local, tornando isso um repositório normal.
Então agora você pode apenas digitar o comando "git branch" e pode ver que todos os ramos foram baixados.
Essa é a maneira rápida em que você pode clonar um repositório git com todos os ramos de uma só vez, mas não é algo que você deseja fazer para cada projeto dessa maneira.
fonte
A clonagem de um repositório local não funcionará com o git clone & git fetch: muitos ramos / tags permanecerão não buscados.
Para obter um clone com todas as ramificações e tags.
Para obter um clone com todas as ramificações e tags, mas também com uma cópia de trabalho:
fonte
OK, quando você clona seu repositório, você tem todos os ramos lá ...
Se você apenas faz
git branch
, eles estão meio que escondidos ...Portanto, se você quiser ver o nome de todos os ramos, basta adicionar uma
--all
bandeira como esta:git branch --all
ougit branch -a
Se você apenas fizer o checkout da filial, terá tudo o que precisa.
Mas e se o ramo criado por outra pessoa após você clonar?
Nesse caso, basta fazer:
git fetch
e verifique todos os ramos novamente ...
Se você deseja buscar e fazer checkout ao mesmo tempo, pode:
git fetch && git checkout your_branch_name
Também criou a imagem abaixo para você simplificar o que eu disse:
fonte
Olhando para uma das respostas à pergunta, notei que é possível reduzi-la:
Mas cuidado, se um dos ramos remotos for nomeado como, por exemplo, admin_master, não será baixado!
Graças ao bigfish pela ideia original
fonte
grep
, para melhorar o filtro e evitar falsos positivos.Esse código puxará todo o código de ramificações remotas para o repositório local.
fonte
Para copiar e colar na linha de comando:
Para mais legibilidade:
Isso vai:
Com base na resposta do VonC .
fonte
Eu escrevi essas pequenas funções do Powershell para poder verificar todos os meus ramos git, que estão remotos na origem.
Mais funções git podem ser encontradas no repositório de configurações do git
fonte
Aqui está uma resposta que usa awk. Esse método deve ser suficiente se usado em um novo repositório.
As ramificações existentes serão simplesmente retiradas ou declaradas como já nela, mas filtros podem ser adicionados para evitar conflitos.
Também pode ser modificado para chamar um
git checkout -b <branch> -t <remote>/<branch>
comando explícito .Esta resposta segue Nikos C. 's idéia .
Como alternativa, podemos especificar a ramificação remota. Isto é baseado em murphytalk 's resposta .
Ele lança mensagens de erro fatais em conflitos, mas eu as vejo inofensivas.
Ambos os comandos podem ser alternativos.
Usando a resposta de ninguém como referência, podemos ter os seguintes comandos para criar os aliases:
Pessoalmente eu usaria
track-all
outrack-all-branches
.fonte
Eu precisava fazer exatamente o mesmo. Aqui está o meu script Ruby .
fonte
Nenhuma dessas respostas foi suficiente, exceto o usuário que ninguém está no caminho certo.
Eu estava tendo problemas para mover um repositório de um servidor / sistema para outro. Quando eu clonei o repositório, ele criou apenas uma ramificação local para mestre. Por isso, quando fui pressionado para o novo controle remoto, apenas a ramificação principal foi enviada.
Então eu achei esses dois métodos MUITO úteis. Espero que eles ajudem alguém.
Método 1:
Método 2:
fonte
git clone --mirror
no repositório original funciona bem para isso.fonte
O Git geralmente (quando não especificado) busca todas as ramificações e / ou tags (refs, consulte:)
git ls-refs
de um ou mais outros repositórios junto com os objetos necessários para completar seus históricos. Em outras palavras, ele busca os objetos que são alcançáveis pelos objetos que já foram baixados. Veja: O quegit fetch
realmente faz?Às vezes, você pode ter ramificações / tags que não estão diretamente conectadas à atual, então
git pull --all
/git fetch --all
não ajudará nesse caso, mas você pode listá-las da seguinte forma:e buscá-los manualmente, conhecendo os nomes das referências.
Então, para buscar todos eles , tente:
O
--depth=10000
parâmetro pode ajudar se você tiver um repositório raso.Em seguida, verifique todas as suas ramificações novamente:
Se o procedimento acima não ajudar, você precisará adicionar ramificações ausentes manualmente à lista rastreada (pois elas se perderam de alguma forma):
por
git remote set-branches
like:para que apareça abaixo da
remotes/origin
busca:Solução de problemas
Se você ainda não conseguir nada além da ramificação principal, verifique o seguinte:
git remote -v
), por exemplogit config branch.master.remote
éorigin
.origin
aponta para o URL correto via:git remote show origin
(veja esta postagem ).fonte
No início de 2017, a resposta neste comentário funciona:
git fetch <origin-name> <branch-name>
derruba o ramo para você. Embora isso não puxe todas as ramificações de uma só vez, você pode executar essa ramificação por singularidade.fonte
Aqui está outro comando curto de uma linha que cria ramificações locais para todas as ramificações remotas:
Também funciona corretamente se o rastreamento de ramificações locais já estiver criado. Você pode chamá-lo após o primeiro
git clone
ou a qualquer momento depois.Se você não precisar fazer o
master
check-out da ramificação após a clonagem, usefonte