Estou tentando descobrir como posso baixar uma tag específica de um repositório Git - é uma versão por trás da versão atual.
Vi que havia uma tag para a versão anterior na página da web git, com o nome do objeto com um número hexadecimal longo.
Mas o nome da versão é " Tagged release 1.1.5
" de acordo com o site.
Eu tentei um comando como este (com nomes alterados):
git clone http://git.abc.net/git/abc.git my_abc
E consegui algo - um diretório, um monte de subdiretórios etc.
Se for o repositório inteiro, como chego à versão que estou procurando? Caso contrário, como faço para baixar essa versão específica?
clone -b "Tagged release 1.1.5" http://git.abc.net/git/abs.git my_abc
. Isso só funcionará se você não tiver uma ramificação com o mesmo nome, é claro (dependendo da sua metodologia, isso pode nunca acontecer).git checkout -b new-branch tag-name
. Agora clone sua nova ramificação. Sempre que quisermos, podemos excluir o novo ramo.Respostas:
lhe dará todo o repositório.
Após o clone, você pode listar as tags
$ git tag -l
e fazer check-out de uma tag específica:Melhor ainda, faça o checkout e crie uma filial (caso contrário, você estará em uma filial com o nome do número de revisão da tag):
fonte
-b
git bandeira revelador para criar um novo ramo e especificar um nome de ramo:git checkout <tag_name> -b <branch_name>
1.8.3.5
e mais recente, o--branch <tag ref>
deve permitir que você baixe o repositório começando no seu<tag ref>
como repositório HEAD; combinado com--depth 1
fará uma verificação superficial de tags. Veja stackoverflow.com/a/21699307/1695680Clonará o repo e o deixará na tag de seu interesse.
Documentação para 1.8.0 dos estados do clone git .
fonte
--depth 1
para evitar o download de confirmações não atuais.git clone --branch my_abc http://git.abc.net/git/abc.git -b quality
qualidade é o nome do ramo que queremos entre.Para verificar apenas uma determinada tag para implantação, eu uso, por exemplo:
Essa parece ser a maneira mais rápida de verificar o código de um repositório remoto, se houver interesse apenas no código mais recente, em vez de em um repositório completo. Dessa maneira, assemelha-se ao comando 'svn co'.
Nota: De acordo com o manual do Git , passar a
--depth
bandeira implica--single-branch
por padrão.fonte
--depth n
implica--single-branch
. Você não precisa dos dois.Não sou especialista em git, mas acho que isso deve funcionar:
OU
A segunda variação estabelece uma nova ramificação baseada na tag, o que permite evitar um 'HEAD desanexado'. (manual do git-checkout)
Cada repositório git contém todo o histórico de revisões, portanto, a clonagem do repositório fornece acesso ao commit mais recente, além de tudo o que veio antes, incluindo a tag que você está procurando.
fonte
git checkout -b b1.5.0 v1.5.0
ao fazer o check-out de uma versão dentro de um ramo 'gh-pages' para enviar com êxito para as páginas do Github. Este Gist Eu escrevi poderia ajudar outros re: ramo / etiqueta / submódulos ... gist.github.com/1064750cd
entrouabc/
antes de poder fazer o checkout de uma filialcd
.Você pode usar o git archive para baixar um tar ball para uma determinada tag ou confirmar o ID:
Você também pode exportar um arquivo zip de uma tag.
Tags da lista:
Exportar uma tag:
Notas:
fonte
git archive
está me pedindo uma senha quando tudo que eu quero fazer é baixar de um repositório público. Como posso usar http em vez de ssh?fatal: Operation not supported by protocol.
eUnexpected end of command stream
erros. Como alternativa, também pode retornar ofatal: The remote end hung up unexpectedly
erro.Use o
--single-branch
comutador (disponível no Git 1.7.10) . A sintaxe é:Por exemplo:
A vantagem: o Git receberá objetos e (precisará) resolver deltas apenas para a ramificação / tag especificada - enquanto verifica exatamente a mesma quantidade de arquivos! Dependendo do repositório de origem, você economizará muito espaço em disco. (Além disso, será muito mais rápido.)
fonte
primeiro busque todas as tags nesse controle remoto específico
ou simplesmente digite
Em seguida, verifique as tags disponíveis
depois mude para essa tag específica usando o comando abaixo
Espero que isso ajude você!
fonte
git tag
adicionará uma tag enquantogit tag -l
lista as tags disponíveisSe suas tags puderem ser classificadas usando o
sort
comando linux , use o seguinte:por exemplo. se
git tag
retorna:git tag | sort -n | tail -1
irá produzir:git tag | sort -n | tail -2 | head -1
irá produzir:(porque você solicitou a segunda tag mais recente)
para efetuar o checkout da tag, primeiro clone o repositório e digite:
..ou qualquer tag que você precise.
fonte
git for-each-ref --sort='*authordate' --format='%(tag)' refs/tags
git checkout `git tag | sort -n | tail -1`
sort -V
vez desort -n
. O primeiro manipula corretamente versões que não são necessariamente numéricas, por exemplo, "1.2.3". Ele também entende que "0.4.10" segue após "0.4.1" e não após "0.4.2", o que-n
fornecerá a você.Verifiquei a documentação do git checkout , que revelou uma coisa interessante:
Portanto, podemos mencionar o nome da tag (como tag nada mais é que o nome de um commit) como, digamos:
PS: No Git, você não pode atualizar uma tag diretamente (já que a tag é apenas um rótulo para uma confirmação), você precisa fazer o checkout da mesma tag que uma ramificação e, em seguida, confirmar e criar uma tag separada.
fonte
===================================
Eu acabei de fazer isso. Primeiro, verifiquei a ortografia do nome da tag.
Isso me deu uma lista de tags no meu servidor git para escolher. O pôster original já sabia o nome de sua tag, portanto esta etapa não é necessária para todos. A saída era assim, embora a lista real fosse mais longa.
Eu escolhi a etiqueta que eu queria e peguei isso e nada mais como se segue.
Em seguida, marquei isso na minha máquina local, dando à minha tag o mesmo nome.
Eu não queria clonar o repositório remoto como outras pessoas sugeriram, pois o projeto no qual estou trabalhando é grande e quero desenvolver em um ambiente limpo e agradável. Eu sinto que isso está mais próximo das perguntas originais "Estou tentando descobrir como fazer o download de A PARTICULAR TAG" do que a solução que sugere a clonagem de todo o repositório. Não vejo por que alguém deveria ter uma cópia do código-fonte do Windows NT e Windows 8.1 se quiser ver o código-fonte do DOS 0.1 (por exemplo).
Também não queria usar o CHECKOUT, como outros sugeriram. Eu tinha um ramo verificado e não queria afetar isso. Minha intenção era buscar o software que eu queria para poder escolher algo e adicionar isso ao meu desenvolvimento.
Provavelmente, existe uma maneira de buscar a própria tag, em vez de apenas uma cópia da confirmação que foi marcada. Eu tive que marcar o compromisso buscado eu mesmo. EDIT: Ah sim, eu encontrei agora.
Onde você vê os dois pontos, ou seja, remote-name: local-name e aqui estão os nomes das tags. Isso funciona sem perturbar a árvore de trabalho, etc. Parece apenas copiar coisas do controle remoto para a máquina local, para que você tenha sua própria cópia.
com a opção --dry-run adicionada, você poderá ver o que o comando faria, se você quiser verificar o que deseja. Então eu acho que um simples
é a verdadeira resposta.
=
Uma observação separada sobre tags ... Quando inicio algo novo, normalmente identifico o repositório vazio após o git init, pois
requer uma confirmação e surge a pergunta "como você rebase as alterações que incluem sua primeira alteração de software?" Então, quando eu começo a trabalhar, eu faço
ou seja, criar uma confirmação antes da minha primeira alteração real e depois usar
se eu quiser refazer todo o meu trabalho, incluindo a primeira alteração .
fonte
Trabalhando com a resposta de Peter Johnson, criei um pequeno apelido para mim:
aka tag mais recente do check-out do git.
Isso depende da versão GNU do tipo, que lida adequadamente com situações como a que lOranger apontou:
Se você estiver em um Mac,
brew install coreutils
ligue para gsort.fonte
tentar:
fonte
Fazendo check-out de tags
Se você deseja visualizar as versões dos arquivos apontados por uma tag, pode fazer um check-out do git, embora isso coloque o seu repositório no estado "desanexado HEAD", que tem alguns efeitos colaterais ruins:
No estado “desanexado HEAD”, se você fizer alterações e depois criar uma confirmação, a tag permanecerá a mesma, mas sua nova confirmação não pertencerá a nenhum ramo e ficará inacessível, exceto pelo hash de confirmação exato. Portanto, se você precisar fazer alterações - digamos que você está corrigindo um bug em uma versão mais antiga, por exemplo - geralmente desejará criar um ramo:
Se você fizer isso e confirmar, sua ramificação version2 será um pouco diferente da sua tag v2.0.0, pois seguirá em frente com suas novas alterações, portanto, tenha cuidado.
fonte
Eu faço isso através da API do github:
fonte