Question

J'ai du mal à comprendre comment utiliser balises contre branches .

Je viens de déménager la version actuelle de notre code de , et maintenant je suis va travailler sur un sous-ensemble de ce code pour une fonction particulière. Quelques autres développeurs travaillent sur cela aussi, mais pas tous les développeurs de notre groupe vont se soucier de cette fonctionnalité. Dois-je créer une branche ou un tag? Dans quelles situations dois-je utiliser un par rapport à l'autre?

Était-ce utile?

La solution

balise représente une version d'une branche à un moment dans le temps. branche représente un thread séparé du développement qui peuvent fonctionner en même temps que d'autres efforts de développement sur la même base de code. Les modifications apportées à une branche peuvent éventuellement être fusionnés de nouveau dans une autre branche pour les unifier.

Habituellement, vous balise une version particulière de sorte que vous pouvez le recréer, par exemple, c'est la version que nous livré à XYZ Corp . branche est plus d'une stratégie pour fournir des mises à jour en cours sur une version particulière du code tout en continuant à faire du développement sur elle. Vous allez faire une branche de la version livrée, continuer le développement sur la ligne principale, mais faire des corrections de bugs à la branche qui représente la version livrée. Finalement, vous allez fusionner ces corrections de bugs de nouveau dans la ligne principale. Souvent, vous utilisez à la fois et le marquage ainsi que la ramification. Vous aurez différentes balises qui peuvent s'appliquer aussi bien à la ligne principale et ses branches de marquage des versions particulières (celles délivrées aux clients, par exemple) le long de chaque branche que vous pouvez recréer -. Pour la livraison, le diagnostic de bug, etc

Il est en fait plus compliqué que cela - ou aussi compliqué que vous voulez faire - mais ces exemples devraient vous donner une idée des différences

.

Autres conseils

De théorique point de vue:

  • balises sont des noms symboliques pour une donnée révision . Ils pointent toujours vers le même objet (généralement: à la même révision); ils ne changent pas.
  • branches sont des noms symboliques pour ligne de développement . Les nouveaux commits sont créés sur le dessus de la branche. Le pointeur de la branche progresse naturellement, pointant vers les nouvelles et les nouveaux commits.

De technique point de vue:

  • balises résideront dans l'espace de noms de refs/tags/ et peut pointer vers Les objets de balise (annotés et éventuellement signé avec GPG balises) ou directement à commettras objet ( moins utilisé étiquette légère pour les noms locaux), ou dans des cas très rares, même à objet arbre ou objet blob (par exemple, la signature GPG).
  • branches résider dans l'espace de noms de refs/heads/ et peut pointer que objets commits . Le pointeur de HEAD doit se référer à une branche (référence symbolique) ou directement à un engagement (détaché ou d'une branche sans nom HEAD).
  • branches de suivi à distance résident dans l'espace de noms de refs/remotes/<remote>/, et suivez les branches ordinaires dans le dépôt distant <remote>.

Voir aussi gitglossary manpage :

  

branche

     
    « Branche »

A est une ligne active de développement. La plus récente commettras sur une branche est appelée la pointe de cette branche. La pointe de la branche est référencée par une tête de branche, qui se déplace vers l'avant que le développement supplémentaire se fait sur la branche. Un dépôt git peut suivre un nombre arbitraire de branches, mais votre arbre de travail est associé à un seul d'entre eux (la branche « en cours » ou « le check-out »), et les points de la tête pour cette branche.

  
     

balise

     
    

ref désignant une étiquette ou objet commit. Contrairement à une tête, une étiquette ne change pas par un engagement. Tags (balise pas les objets) sont stockés dans $GIT_DIR/refs/tags/. [...]. Une étiquette est le plus souvent utilisé pour marquer un point particulier dans la chaîne d'ascendance commettre.

  
     

objet balise

     
    

Un objet contenant un ref pointant vers un autre objet, qui peut contenir un message comme un objet commit. Il peut également contenir une signature (PGP), auquel cas il est appelé un « objet de balise signé ».

  

Si vous pensez de votre référentiel comme un livre qui relate les progrès de votre projet ...

Branches

Vous pouvez penser à une branche comme un de ces collants Favoris :

entrer image description ici

Un tout nouveau dépôt a seulement un de ceux (appelé master), qui se déplace automatiquement à la dernière page par (pensez commit ) que vous avez écrit. Cependant, vous êtes libre de créer et d'utiliser plus de signets, afin de marquer d'autres points d'intérêt dans le livre, afin que vous puissiez revenir rapidement.

En outre, vous pouvez toujours déplacer un signet particulier vers une autre page du livre (en utilisant git-reset, par exemple); points d'intérêt varient au fil du temps.

Tags

Vous pouvez penser des balises comme rubriques chapitre .

signets

Il peut contenir un titre (pensez balises annotées ) ou non. Une étiquette est similaire, mais différente à une branche, en ce qu'elle marque un point de historique intérêt pour le livre. Pour conserver son aspect historique, une fois que vous avez partagé une étiquette (par exemple poussé à une télécommande partagée), vous n'êtes pas censé le déplacer à un autre endroit dans le livre.

Ce que vous devez réaliser, en provenance de CVS, est que vous ne créer des répertoires lors de la mise en place d'une succursale.
Pas plus « tag collante » (qui peut être appliquée à un seul fichier), ou « étiquette de branche ».
Direction générale et les étiquettes sont deux objets différents dans Git, et ils appliquent toujours à la tous repo .

Vous ne (SVN cette fois-ci) doivent structurer explicitement votre référentiel avec:

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

Cette structure vient du CVS de fait est un système de révision et non un système de version (voir contrôle de la source par rapport à la révision de contrôle ).
Cela signifie que les branches sont émulées par des tags pour CVS, copie de répertoire pour SVN.

Votre question fait sens si vous êtes habitué à la caisse une étiquette, et commencer à travailler dans ce .
Ce qui vous ne devriez pas;)
Une étiquette est censée représenter un immuable contenu, utilisé uniquement pour y accéder avec la garantie d'obtenir le même contenu à chaque fois.

Dans Git, l'historique des révisions est une série de commits, la formation d'un graphique.
Une branche est une voie de ce graphique

x--x--x--x--x # one branch
    \ 
     --y----y # another branch
       1.1
        ^
        |
        # a tag pointing to a commit
  • Si vous extrayez une étiquette, vous devrez créer une branche pour commencer à travailler à partir de lui.
  • Si vous extrayez une branche, vous directement voir le dernier valider ( « tête ») de cette branche.

Voir de réponse de Jakub Narębski pour tous les aspects techniques, mais franchement, vous n'avez pas besoin à ce moment (encore) tous les détails;)

Le point principal est: une étiquette étant un pointeur simple à un commit, vous ne serez jamais en mesure de modifier son contenu. Vous avez besoin d'une branche.


Dans votre cas, chaque développeur travaillant sur une fonction spécifique:

  • devrait créer leur propre branche dans leur référentiel respectif
  • branches de piste de référentiels de leur collègue (l'un travaillant sur la même fonction)
  • tirer / pousser afin de partager votre travail avec vos pairs.

Au lieu de suivre directement les branches de vos collègues, vous pouvez suivre que la branche d'un référentiel central « officiel » auquel tout le monde pousse son / son travail afin d'intégrer et de partager le travail de chacun pour cette caractéristique particulière.

Les branches sont en bois et se développent à partir du tronc de l'arbre. Les étiquettes sont en papier (dérivé du bois) et pendent comme ornements de Noël de divers endroits dans l'arborescence.

Votre projet est l'arbre, et votre fonction qui sera ajoutée au projet se développera sur une branche. La réponse est branche.

Il semble que la meilleure façon d'expliquer est que les balises agissent en lecture seule branches. Vous pouvez utiliser une branche comme une étiquette, mais vous pouvez mettre à jour, par inadvertance, avec de nouveaux commits. Les tags sont garantis pour pointer vers le même engagement aussi longtemps qu'ils existent.

Les tags peuvent être soit signé ou non signé ; branches ne sont jamais signés.

signées ne peuvent jamais se déplacer parce qu'ils sont liés cryptographiquement (avec une signature) à un engagement particulier. étiquettes non signés ne sont pas liés et il est possible de les déplacer (mais déplacer les étiquettes ne sont pas un cas d'utilisation normale).

Les branches peuvent non seulement passer à un autre commettras mais sont devraient pour le faire. Vous devez utiliser une branche pour votre projet de développement local. Il ne fait pas tout à fait logique d'engager le travail à un dépôt Git « sur une étiquette ».

Le Git Parabole explique comment un DVCS typique est créé et pourquoi leurs créateurs ont fait ce qu'ils ont fait. , Vous pouvez également jeter un oeil à Git pour Informaticien ; il explique ce que chaque type d'objet dans Git, y compris les succursales et les tags.

Je me plais à penser de branches où vous allez , balises où vous avez été .

Une balise se sent comme un signet d'un point particulièrement important dans le passé, comme une version de version.

Alors qu'une branche est un chemin particulier, le projet est en baisse, et donc le marqueur de branche avance avec vous. Lorsque vous avez terminé, vous fusionner / supprimer la branche (à savoir le marqueur). Bien sûr, à ce moment-là, vous pouvez choisir d'étiquette qui commettent.

Une balise est utilisée pour marquer une version, plus précisément, il fait référence à un point dans le temps sur une branche. Une branche est généralement utilisé pour ajouter des fonctionnalités à un projet.

simple:

  

Les tags doivent toujours pointer à la même version d'un projet, alors que les chefs devraient faire progresser le développement progresse.

Git Manuel de l'utilisateur

la réponse est simple:

  branche

:   le pointeur de la branche en cours se déplace avec chaque livraison au dépôt

  

tag:. Le commit un des points d'étiquette ne change pas, en fait, l'étiquette est un instantané commit

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top