Pergunta

Eu estou tendo alguma dificuldade em entender como usar marcas contra ramos em .

Eu só mudou a versão atual do nosso código de , e agora estou indo trabalhar em um subconjunto de que codificam para uma característica particular. Alguns outros desenvolvedores estarão trabalhando nisso também, mas nem todos os desenvolvedores em nosso grupo vai se preocupam com esse recurso. Devo ser a criação de uma sucursal ou um tag? Em que situações eu deveria estar usando um contra o outro?

Foi útil?

Solução

A tag representa uma versão de um ramo particular em um momento no tempo. Um ramo representa um segmento separado de desenvolvimento que podem ser executados simultaneamente com outros esforços de desenvolvimento na mesma base de código. Alterações em um ramo podem, eventualmente, estar de volta incorporado a outro ramo para unificá-los.

Normalmente você vai tag uma versão específica para que você possa recriá-lo, por exemplo, esta é a versão que nós lançamos a XYZ Corp . Um ramo é mais uma estratégia para fornecer em curso atualizações de uma versão específica do código, continuando a fazer o desenvolvimento do mesmo. Você vai fazer um ramo da versão entregue, continuar o desenvolvimento na linha principal, mas fazer correções de bugs para o ramo que representa a versão entregue. Eventualmente, você vai mesclar essas correções de bugs de volta para a linha principal. Muitas vezes você vai usar os dois juntos ramificação e marcação. Você vai ter várias marcas que podem ser aplicados tanto para a linha principal e seus ramos marcação versões particulares (aqueles entregues aos clientes, por exemplo) ao longo de cada ramo que você pode querer recriar -. Para entrega, diagnóstico bug, etc

Na verdade, é mais complicado do que isso - ou tão complicada como você deseja torná-lo -. Mas estes exemplos devem dar-lhe uma ideia das diferenças

Outras dicas

do teórica ponto de vista:

  • marcas são nomes simbólicos para um determinado revisão . Eles sempre apontam para o mesmo objeto (geralmente: para a mesma revisão); eles não mudam.
  • ramos são nomes simbólicos para linha de desenvolvimento . Novos commits são criados em cima do ramo. O ponteiro do ramo naturalmente avança, apontando para commits mais recentes e mais recentes.

do técnico ponto de vista:

  • marcas residem no namespace refs/tags/, e pode apontar para tag objetos (anotado e, opcionalmente, GPG assinado etiquetas) ou diretamente para cometer objeto ( menos utilizados tag leve para nomes locais), ou em casos muito raros, mesmo para objeto da árvore ou objeto blob (por exemplo GPG assinatura).
  • ramos residem no namespace refs/heads/, e pode apontar apenas para objetos commit . O ponteiro HEAD deve se referir a um ramo (referência simbólica) ou diretamente para um commit (HEAD destacada ou ramo sem nome).
  • ramos-monitoramento remoto residem no namespace refs/remotes/<remote>/ e siga ramos comuns em <remote> remoto repositório.

Veja também gitglossary manpage :

ramo

A "filial" é uma linha ativa do desenvolvimento. A mais recente comprometer em um ramo é referido como a ponta desse ramo. A ponta do ramo é referenciado por uma cabeça ramo, que se move para a frente como o desenvolvimento adicional é feito no ramo. Um único repositório git pode acompanhar um número arbitrário de galhos, mas a sua árvore de trabalho é associado com apenas um deles (a "corrente" ou "check-out" ramo), e os pontos de cabeça para esse ramo.

tag

A Ref apontando para uma tag ou cometer objeto. Em contraste com uma cabeça, uma marca não é alterado por um commit. Etiquetas (não marcar objetos) são armazenados em $GIT_DIR/refs/tags/. [...]. A tag é mais tipicamente usado para marcar um ponto particular no cometer ascendência cadeia.

objeto tag

Um objeto contendo um ref apontando para um outro objeto, que pode conter uma mensagem como um objeto commit. Ele também pode conter uma assinatura (PGP), caso em que é chamado de "objeto tag assinado".

Se você acha do seu repositório como um livro que narra o progresso em seu projeto ...

Ramos

Você pode pensar em um ramo como um daqueles pegajoso marcadores :

enter descrição da imagem aqui

Um novo repositório tem apenas um daqueles (chamado master), que automaticamente se move para a última página (acho que commit ) que você escreveu. No entanto, você está livre para criar e usar mais marcadores, a fim de marcar outros pontos de interesse no livro, para que possa voltar a elas rapidamente.

Além disso, você sempre pode mover um marcador específico para outra página do livro (usando git-reset, por exemplo); Os pontos de interesse normalmente variam ao longo do tempo.

Você pode pensar em marcas como títulos dos capítulos .

bookmarks

Pode conter um título (pense marcas anotadas ) ou não. A tag é semelhante, mas diferente de um ramo, em que marca um ponto de histórica interesse no livro. Para manter o seu aspecto histórico, uma vez que você compartilhou um tag (ou seja, empurrou-o para um remoto compartilhado), você não está suposto movê-lo para algum outro lugar no livro.

O que você precisa perceber, vindo do CVS, é que você não precisa mais criar diretórios quando a criação de uma sucursal.
Não mais "tag pegajosa" (que pode ser aplicado a apenas um arquivo), ou "tag ramo".
Filial e tags são dois objetos diferentes em Git, e eles sempre se aplicam ao todas repo.

Você não mais (com SVN neste momento) têm de estruturar explicitamente seu repositório com:

branches
   myFirstBranch
     myProject
       mySubDirs
   mySecondBranch
     ...
tags
   myFirstTag
     myProject
       mySubDirs
   mySecondTag
   ...

Essa estrutura vem do fato de CVS é ??um sistema de revisão e não um sistema de versão (ver control Fonte vs. controle de Revisão? ).
Isso significa ramos são emulados através de tags para CVS, diretório cópias para SVN.

A sua pergunta faz sentido, se você está acostumado a fazer o checkout de uma tag, e começar a trabalhar nele .
Que você não deve;)
A tag é suposto representar um imutável conteúdo, usado apenas para acessá-lo com a garantia de obter o mesmo conteúdo de cada vez.

No Git, a história de revisões é uma série de commits, formando um gráfico.
Um ramo é um caminho de que o gráfico

x--x--x--x--x # one branch
    \ 
     --y----y # another branch
       1.1
        ^
        |
        # a tag pointing to a commit
  • Se você check-out um tag, você terá de criar uma filial para começar a trabalhar com ele.
  • Se você check-out um ramo, você vai ver diretamente o mais recente cometê-lo ( 'cabeça') daquele ramo.

Jakub Narebski resposta para todos os aspectos técnicos, mas, francamente, neste momento, você não precisa (ainda) todos os detalhes;)

O ponto principal é: a tag de ser um ponteiro simples para um commit, você nunca será capaz de modificar o seu conteúdo. Você precisa de um ramo.


No seu caso, cada desenvolvedor trabalhando em uma característica específica:

  • devem criar a sua própria filial em seu respectivo repositório
  • ramos de pista a partir de repositórios de seu colega (o único trabalhando na mesma função)
  • puxar / empurrar a fim de partilhar o seu trabalho com os seus pares.

Em vez de seguir diretamente os ramos de seus colegas, você pode rastrear apenas o ramo de um repositório "oficial" central para que todos empurra sua / o seu trabalho de forma a integrar e trabalhar participação de todos para esse recurso específico.

Ramos são feitas de madeira e crescer a partir do tronco da árvore. Tags são feitas de papel (derivado da madeira) e pendurar como enfeites de vários lugares na árvore.

Seu projeto é a árvore, e seu recurso que será adicionado ao projeto irá crescer em uma filial. A resposta é ramo.

Parece que a melhor maneira de explicar é que as etiquetas agir como ler apenas ramos. Você pode usar um ramo como uma tag, mas você pode inadvertidamente atualizá-lo com novos commits. Tags são garantidos para apontam para o mesmo comprometer enquanto eles existem.

As tags podem ser assinado ou não assinado ; ramos não são assinados.

marcas Assinado nunca pode mover porque eles são criptograficamente vinculado (com uma assinatura) para um determinado cometer. etiquetas não assinados não estão vinculados e é possível movê-los (mas marcas em movimento não é um caso de uso normal).

Ramos pode não só mudar para um diferente cometer, mas são esperado para fazer isso. Você deve usar um ramo para o seu projeto de desenvolvimento local. Ele não chega a fazer sentido para cometer o trabalho para um repositório Git "em uma tag".

O Git Parábola explica como um DVCS típicos é criado e por seus criadores fizeram o que fizeram. Além disso, você pode querer dar uma olhada Git para Computer Scientist ; ele explica o que cada tipo de objeto no Git faz, incluindo ramos e tags.

Eu gosto de pensar em ramos como onde você está indo , marcas como onde você esteve .

A tag se sente como um marcador de um ponto importante em particular no passado, como um lançamento de versão.

Considerando que um ramo é um caminho particular, o projeto está indo para baixo e, assim, os avanços marcador ramo com você. Quando estiver pronto você mesclar / apagar o ramo (ou seja, o marcador). Claro que, nesse ponto você pode optar por tag que cometeu.

A tag é usada para marcar uma versão, mais especificamente, faz referência a um ponto no tempo em uma filial. Um ramo é normalmente usado para adicionar recursos a um projeto.

simples:

Tags são esperados para sempre ponto na mesma versão de um projeto, enquanto as cabeças são esperados para antecedência como avanços de desenvolvimento.

Git Manual do Usuário

a resposta é simples:

ramo: os atuais passar o ponteiro do ramo com cada commit para o repositório

e

tag:. A confirmação de que um pontos de tag não muda, na verdade, a tag é um instantâneo do que cometem

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