编程知识 cdmana.com

GIT (3) GIT Branch, Zookeeper Download tutoriel

git(3)Git Branches,zookeeperTélécharger le tutoriel_Interview

Maintenant, parlons de la branche..Git Branches en,En fait, ce n'est qu'une indication. commit Pointeur variable de l'objet.Git Sera utilisé master Comme nom par défaut de la branche.Après plusieurs présentations,Vous en avez déjà un qui pointe vers le dernier objet soumis master Branches,Il avance automatiquement à chaque soumission.

![Insérer la description de l'image ici]( )

Alors,Git Comment créer une nouvelle branche??La réponse est simple,Créer un nouveau pointeur de branche.Comme créer un nouveau testing Branches,Peut être utilisé git branch Les ordres:

$ git branch testing

Ce sera à l'heure actuelle commit Créer un nouveau pointeur de branche sur l'objet(Voir fig. 3-4).

![Insérer la description de l'image ici]( )

Alors,Git Comment savez - vous sur quelle branche vous travaillez actuellement??En fait, la réponse est simple,Il contient un fichier appelé HEAD Pointeur spécial pour.Notez qu'il et beaucoup d'autres systèmes de contrôle de version que vous connaissez bien(Par exemple, Subversion Ou CVS)À l'intérieur. HEAD Les concepts sont très différents.In Git Moyenne,C'est un pointeur vers la branche locale où vous travaillez(Traduction:Oui. HEAD Imaginez un alias pour la branche courante.).Exécution git branch Les ordres, Juste une nouvelle branche. , Mais ne passe pas automatiquement à cette branche , Donc dans ce cas , Nous sommes toujours là. master Travailler dans une branche (Voir la figure 3-5).

![Insérer la description de l'image ici]( )

Pour passer à une autre branche ,Peut être exécuté git checkout Les ordres. Nous passons maintenant au nouveau testing Branches:

$ git checkout testing

Voilà. HEAD C'est ça. testing Branches(Voir fig.3-6).

![Insérer la description de l'image ici]( )

Quels sont les avantages d'une telle mise en oeuvre??Volontiers.,Vous pouvez le soumettre à nouveau.:

$ vim test.rb

$ git commit -a -m ‘made a change’

Fig. 3-7 Les résultats présentés après la soumission .

![Insérer la description de l'image ici]( )

Très intéressant.,Maintenant testing La branche avance d'un cran ,Et master La branche pointe toujours vers git checkout Où se trouve commit Objet.Maintenant, revenons à master Regarde la branche.:

$ git checkout master

Fig. 3-8 Afficher les résultats .

![Insérer la description de l'image ici]( )

Cet ordre fait deux choses..Il met HEAD Le pointeur retourne à master Branches, Et a remplacé les fichiers du Répertoire de travail par master Contenu du Snapshot dirigé par la branche.C'est - à - dire, Commencez les changements que vous avez faits , Ce projet débutera par une version plus ancienne .Son rôle principal est de testing Les modifications apportées à la branche sont suspendues , Pour que vous puissiez aller dans une autre direction .

Nous soumettons à nouveau après quelques modifications :

$ vim test.rb

$ git commit -a -m ‘made other changes’

Maintenant notre historique de soumission de projet a produit une bifurcation (Comme le montre la figure 3-9 Comme indiqué), Parce que nous venons de créer une branche , Il y a eu quelques travaux de conversion , Puis il est retourné à la branche principale d'origine pour faire d'autres travaux . Ces changements sont isolés dans différentes branches : On peut passer d'une branche à l'autre , Et les combiner quand le moment est venu .Et tout ce travail,Juste besoin branch Et checkout Ces deux commandes peuvent être complétées .

![Insérer la description de l'image ici]( )

Parce que Git La branche dans n'est en fait qu'une seule somme de contrôle contenant l'objet en question(40 Longueur des caractères SHA-1 Chaîne)Documents, Donc créer et détruire une branche devient très bon marché .C'est clair., Créer une nouvelle branche, c'est écrire à un fichier 41 Octets(Ajouter un saut de ligne)C'est si simple., Et bientôt, bien sûr .

Cela contraste fortement avec la plupart des systèmes de contrôle de version , La plupart d'entre eux gèrent des succursales en sauvegardant tous les fichiers du projet dans des répertoires spécifiques , Donc, selon le nombre et la taille des fichiers du projet , Le temps peut aussi varier considérablement , Quelques secondes plus vite , Quelques minutes plus lentement .Et Git La mise en oeuvre du projet est indépendante de la complexité du projet , Il peut toujours compléter la création et la commutation des branches en quelques millisecondes .En même temps, Parce que l'information ancestrale est enregistrée à chaque soumission (Traduction:C'est - à - dire: parent Objet), Lors de la fusion future de branches , Trouver la bonne base de fusion (Traduction:Un ancêtre commun.) En fait, le travail de , Donc C'est très facile à mettre en œuvre .Git Encourager les développeurs à utiliser fréquemment les branches , C'est précisément parce que ces caractéristiques sont garanties .

Ensuite, regardez, Pourquoi devrions - nous utiliser des branches fréquemment .

 3.2 Création et fusion de succursales


Voyons un exemple simple de branche et de fusion,Ce flux de travail est généralement utilisé dans le travail réel:

  1. Développer un site Web.

  2. Pour répondre à une nouvelle exigence,Créer une branche.

  3. Travailler sur cette branche.

Supposons qu'en ce moment,Vous avez reçu un appel disant qu'il y avait un problème sérieux qui devait être réparé d'urgence, Vous pouvez donc procéder comme suit: :

  1. Retour à la branche précédemment publiée sur le serveur de production .

  2. Créer une nouvelle branche pour cette réparation d'urgence , Et réparer le problème .

  3. Après avoir réussi le test, Retour à la branche où se trouve le serveur de production , Fusionner la branche Patch en , Puis pousser sur le serveur de production .

  4. Passer à la branche précédente qui met en oeuvre les nouvelles exigences ,Continuez à travailler..

Création et commutation de branches

Tout d'abord,, Nous supposons que vous travaillez joyeusement sur le projet , Et plusieurs mises à jour ont été soumises (Voir fig. 3-10).

![Insérer la description de l'image ici]( )

Maintenant, Vous avez décidé de réparer le système de suivi des problèmes #53 Questions. Comme indiqué ci - dessous ,Git Et traiter avec n'importe quel système spécifique de suivi des problèmes . Pour illustrer les problèmes à résoudre , Pour nommer la nouvelle branche iss53. Pour créer et passer à cette branche ,Exécution git checkout Et ajouter -b Paramètres:

$ git checkout -b iss53

Switched to a new branch “iss53”

Cela équivaut à exécuter les deux commandes suivantes: :

$ git branch iss53

$ git checkout iss53

Fig. 3-11 Résultats de l'exécution de la commande cosmétique .

![Insérer la description de l'image ici]( )

Puis vous commencez à essayer de corriger le problème , Après plusieurs mises à jour ,iss53 Le pointeur de la branche se déplace également vers l'avant , Parce que c'est la branche actuelle (En d'autres termes,,À l'heure actuelle HEAD Le pointeur pointe vers iss53,Voir fig. 3-12):

$ vim index.html

$ git commit -a -m ‘added a new footer [issue 53]’

git(3)Git Branches,zookeeperTélécharger le tutoriel_Java_02

Maintenant vous recevez un appel urgent pour ce problème de site , Il faut le réparer immédiatement. .C'est bon. Git , Nous n'aurions pas besoin de publier ce Patch en même temps que iss53 Modifications apportées , Il n'est pas non plus nécessaire de prendre beaucoup de temps pour récupérer ces modifications avant de créer et de publier le correctif sur le serveur . Tout ce qu'il faut, c'est revenir à master Branches.

Mais avant ça, Gardez un oeil sur votre aire de rassemblement ou votre répertoire de travail , Les modifications qui n'ont pas encore été soumises , Il va entrer en conflit avec la branche que vous êtes sur le point de vérifier pour empêcher Git Changer de branche pour vous . Il est préférable de garder une zone de travail propre lorsque vous changez de branche . Plusieurs façons de contourner ce problème seront présentées plus loin (Ça s'appelle stashing Et commit amending). Toutes les modifications ont été soumises , Ensuite, vous pouvez passer à master Branches:

$ git checkout master

Switched to branch “master”

À ce stade, le contenu du Répertoire de travail et vous résolvez le problème #53 C'était pareil. , Vous pouvez vous concentrer sur les réparations urgentes .Il faut garder cela à l'esprit:Git Le contenu du Répertoire de travail est restauré à un instantané de l'objet commit qu'il pointe lorsqu'une branche est vérifiée . Il est automatiquement ajouté 、 Supprimer et modifier les fichiers pour s'assurer que le contenu du Répertoire est exactement le même que celui que vous avez soumis .

Et puis..., Vous devez faire une réparation urgente . Nous créons une branche de réparation d'urgence hotfix Pour faire le travail , Jusqu'à ce que (Voir fig. 3-13):

$ git checkout -b ‘hotfix’

Switched to a new branch “hotfix”

$ vim index.html

$ git commit -a -m ‘fixed the broken email address’

[hotfix]: created 3a0874c: “fixed the broken email address”

1 files changed, 0 insertions(+), 1 deletions(-)

git(3)Git Branches,zookeeperTélécharger le tutoriel_Développement de l'arrière - plan_03

Il faut faire des tests , Assurez - vous que la réparation est réussie ,Et revenir à master Branche et fusionne , Puis publié sur le serveur de production .Avec git merge Commande pour fusionner :

$ git checkout master

$ git merge hotfix

Updating f42c576…3a0874c

Fast forward

README | 1 -

1 files changed, 0 insertions(+), 1 deletions(-)

Votre attention, s'il vous plaît., Apparaît lors de la fusion “Fast forward”Conseils pour.En raison de la situation actuelle master L'objet de soumission où se trouve la succursale est à incorporer hotfix Directement en amont de la branche ,Git Il suffit de mettre master Le pointeur de branche se déplace directement à droite .En d'autres termes,, Si vous descendez d'une branche et que vous pouvez atteindre l'autre ,Alors Git Lors de la fusion des deux , Il suffit de déplacer le pointeur à droite , Parce qu'il n'y a pas de différence à résoudre dans cette branche historique à une seule ligne , Donc ce processus de fusion peut être appelé Fast Forward (Fast forward).

Les dernières modifications sont déjà en cours master La branche pointe vers l'objet commit , Prêt à être déployé sur le serveur de production (Voir fig. 3-14).

![Insérer la description de l'image ici]( )

Après la sortie de ce patch super important , Vous voulez retourner au travail avant d'être dérangé .En raison de la situation actuelle hotfix Branches et master Pointer vers le même objet de soumission ,Alors... hotfix La mission historique a été accomplie , Peut être supprimé .Utiliser git branch De -d Option effectuer l'opération de suppression :

$ git branch -d hotfix

Deleted branch hotfix (3a0874c).

Revenons maintenant à ce qui n'a pas été fait auparavant #53 Continuer à travailler sur la branche de réparation des problèmes (Fig. 3-15):

$ git checkout iss53

Switched to branch “iss53”

$ vim index.html

$ git commit -a -m ‘finished the new footer [issue 53]’

[iss53]: created ad82d7a: “finished the new footer [issue 53]”

1 files changed, 1 insertions(+), 0 deletions(-)

git(3)Git Branches,zookeeperTélécharger le tutoriel_Développement de l'arrière - plan_04

Ne t'inquiète pas. hotfix Les modifications apportées à la branche n'ont pas été incluses dans iss53 Viens.. S'il est vraiment nécessaire d'inclure ce correctif ,Ça marche git merge master Prends ça. master Branche fusionnée en iss53; Ou attendre iss53 Une fois terminé,Encore. iss53 Mise à jour dans la branche incorporée dans master.

Fusion des branches

En question #53 Une fois les travaux pertinents terminés , Peut être fusionné en master Branches. L'opération réelle est fusionnée avec la précédente hotfix La branche est à peu près la même. , Il suffit de revenir à master Branches,Exécution git merge La commande spécifie la branche à fusionner :

$ git checkout master

$ git merge iss53

Merge made by recursive.

README | 1 +

1 files changed, 1 insertions(+), 0 deletions(-)

Votre attention, s'il vous plaît., L'implémentation sous - jacente de cette opération de fusion , Pas comme avant. hotfix Mode d'incorporation de . Parce que cette fois votre histoire de développement a commencé à diverger plus tôt .En raison de la situation actuelle master Objet de soumission pointé par la branche (C4)Ce n'est pas iss53 L'ancêtre direct de la branche ,Git Un traitement supplémentaire a dû être effectué . Dans ce cas ,Git Avec les extrémités des deux branches (C4 Et C5) Et leurs ancêtres communs (C2) Effectuer un simple calcul de fusion tripartite .Fig. 3-16 Marqué en rouge Git Les trois objets soumis pour la fusion :

![Insérer la description de l'image ici]( )

Cette fois,Git Ne déplacez pas simplement le pointeur de branche à droite, Au lieu de cela, un nouvel instantané des résultats de la fusion tripartite , Et crée automatiquement un objet de soumission qui le pointe (C6)(Voir fig. 3-17). Cet objet de soumission est assez spécial , Il a deux ancêtres. (C4 Et C5).

Il convient de mentionner que Git Peut décider lui - même quel ancêtre commun est la meilleure base de fusion ;Ceci et CVS Ou Subversion(1.5 Versions ultérieures)C'est différent., Ils exigent que le développeur spécifie manuellement la base de fusion . Donc cette fonctionnalité permet Git L'opération de fusion est beaucoup plus simple que n'importe quel autre système .

![Insérer la description de l'image ici]( )

Maintenant que les résultats des travaux antérieurs ont été fusionnés en master C'est,Alors iss53 Ça ne marchera pas. . Vous pouvez le supprimer ici , Et désactiver le problème dans le système de suivi des problèmes .

$ git branch -d iss53

Fusion des branches en cas de conflit

Parfois, la fusion ne se passe pas si bien . Si la même partie du même fichier a été modifiée dans différentes branches ,Git Il n'y a aucun moyen de les combiner proprement. (Traduction:Logiquement,, Cette question ne peut être tranchée que par une personne .). Si vous résolvez un problème #53 A été modifié hotfix Section modifiée dans , On obtiendra des résultats semblables à ceux qui suivent :

$ git merge iss53

Auto-merging index.html

CONFLICT (content): Merge conflict in index.html

Automatic merge failed; fix conflicts and then commit the result.

Git Fusionné , Mais pas soumis , Il s'arrêtera et attendra que vous résolviez le conflit . Pour voir quels fichiers sont en conflit lors de la fusion ,Ça marche git status Recherche:

[master*]$ git status

index.html: needs merge

On branch master

Changes not staged for commit:

(use “git add <file>…” to update what will be committed)

(use “git checkout – <file>…” to discard changes in working directory)

unmerged: index.html

Tout fichier contenant des conflits non résolus sera non consolidé (unmerged) Liste d'état de .Git Des balises standard de résolution des conflits sont ajoutées aux fichiers conflictuels , Ils peuvent être utilisés pour localiser et résoudre manuellement ces conflits . Vous pouvez voir que ce fichier contient des sections comme celles - ci :

<<<<<<< HEAD:index.html

<div id=“footer”>contact :  email.support@github.com</div>

=======

<div id=“footer”>

please contact us at  support@github.com

</div>

iss53:index.html

Je vois. ======= Partie supérieure séparée ,- Oui. HEAD(C'est - à - dire: master Branches,En cours merge Branche à laquelle la commande est passée )Contenu de, La partie inférieure est iss53 Contenu de la branche . La solution au conflit n'est rien d'autre que de choisir l'un ou l'autre ou de vous intégrer personnellement . Par exemple, vous pouvez résoudre ce problème en remplaçant ce paragraphe par ce qui suit :

<div id=“footer”>

please contact us at  email.support@github.com

</div>

Cette solution intègre une partie de chacune des deux branches , Et je l'ai effacé. <<<<<<<,======= Et >>>>>>> Ces lignes. Après avoir résolu tous les conflits dans tous les dossiers ,Exécution git add Ils seront marqués comme résolus (Traduction: En fait, un instantané est sauvegardé dans la zone de mise en scène une fois .). Parce qu'une fois mis en scène, , Cela signifie que le conflit a été résolu . Si vous souhaitez résoudre ces problèmes avec un outil avec une interface graphique , Autant courir git mergetool, Il appelle un outil de fusion visuel et vous guide à résoudre tous les conflits :

$ git mergetool

merge tool candidates: kdiff3 tkdiff xxdiff meld gvimdiff opendiff emerge vimdiff

Merging the files: index.html

Normal merge conflict for ‘index.html’:

{local}: modified

{remote}: modified

Hit return to start merge resolution tool (opendiff):

Si vous ne voulez pas utiliser l'outil de fusion par défaut (Git J'ai choisi par défaut opendiff,Parce que je suis Mac La commande a été exécutée sur ), Vous pouvez être en haut "merge tool candidates" Liste des outils de fusion disponibles dans , Saisissez le nom de l'outil que vous souhaitez utiliser . Nous discuterons de la façon de modifier les valeurs par défaut dans l'environnement au chapitre 7 .

Après avoir quitté l'outil de fusion ,Git On vous demandera si la fusion a réussi .Si la réponse est oui, Il stockera les fichiers pour vous. , Pour indiquer que l'état est résolu .

Encore une fois. git status Pour confirmer que tous les conflits ont été résolus :

$ git status

On branch master

Changes to be committed:

(use “git reset HEAD <file>…” to unstage)

modified: index.html

Si vous vous sentez satisfait , Et confirmer que tous les conflits ont été résolus , C'est - à - dire entrer dans la zone de rassemblement ,Ça marche. git commit Pour compléter cette soumission de fusion . C'est à peu près le cas pour les documents soumis :

Merge branch ‘iss53’

Conflicts:

index.html

It looks like you may be committing a MERGE.

If this is not correct, please remove the file

.git/MERGE_HEAD

and try again.

Si vous voulez donner un peu de commodité à ceux qui vont voir la fusion , Cette information peut être modifiée , Pour plus de détails sur la fusion . Par exemple, quels changements avez - vous apportés , Et pourquoi . Parfois, les motifs de conflit ne sont pas directs ou évidents , Une petite annotation est nécessaire .

 3.3 Gestion des directions générales


Jusqu'à présent, Vous avez appris à créer 、 Fusionner et supprimer les branches .En plus de ça,, Nous devons également apprendre à gérer les directions générales , Les commandes de gestion décrites ci - dessous sont souvent utilisées dans les travaux réguliers futurs .

git branch La commande ne crée pas et ne supprime pas seulement les branches , Sans paramètres , Il donne une liste de toutes les branches actuelles :

$ git branch

iss53

  • master

testing

Regarde. master Avant la branche * Les caractères: Il représente la branche actuelle .C'est - à - dire, Si vous soumettez une mise à jour maintenant ,master La Direction générale progressera au fur et à mesure que le développement progressera. . Pour voir les informations du dernier objet engagé pour chaque branche ,Exécution git branch -v

$ git branch -v

iss53 93b412c fix javascript issue

  • master 7a98805 Merge branch ‘iss53’

testing 782fd34 add scott to the author list in the readmes

Pour filtrer cette liste, vous avez ( Ou pas encore ) Branche fusionnée avec la branche courante ,Ça marche --merge Et --no-merged Options(Git 1.5.6 Version précédente).Comme avec git branch --merge Voir quelles branches ont été fusionnées dans la branche actuelle (Traduction: C'est - à - dire quelles branches sont directement en amont de la branche actuelle .):

$ git branch --merged

iss53

  • master

On a déjà fusionné iss53, Donc je le vois ici .En général, Pas dans la Liste * Les branches de git branch -d Pour effacer .La raison en est simple., Maintenant que les travaux qu'ils contiennent ont été intégrés dans d'autres branches , L'effacement ne perd rien .

Ça marche aussi. git branch --no-merged Voir les travaux qui n'ont pas encore été fusionnés :

$ git branch --no-merged

testing

Il affiche les branches qui n'ont pas encore été fusionnées . Comme ces branches contiennent également des résultats de travail qui n'ont pas encore été fusionnés , Donc, en utilisant simplement git branch -d La suppression de cette branche déclenchera une erreur , Parce qu'en faisant ça, on perd des données :

$ git branch -d testing

error: The branch ‘testing’ is not an ancestor of your current HEAD.

If you are sure you want to delete it, run ‘git branch -D testing’.

Mais, .Si vous voulez vraiment supprimer les modifications de cette branche , Possibilité de supprimer en majuscules -D Exécution, Comme indiqué dans le message ci - dessus .

 3.4 Flux de travail pour le développement avec la Direction générale


Maintenant que nous avons appris à créer et à fusionner des succursales ,C'est bon.( Ou devrait ) Pour faire quelque chose ?Dans cette section, Nous présenterons quelques flux de travail pour le développement avec des directions générales . Et c'est grâce à la facilité de gestion des succursales , Ce n'est qu'à partir de ces modèles de travail typiques , Vous pouvez choisir une utilisation en fonction de la situation réelle du projet .

Branche à long terme

Parce que Git En utilisant une simple fusion tripartite , Donc, même pour une longue période , Fusionner une branche en une autre plusieurs fois ,Ce n'est pas si difficile..C'est - à - dire, Vous pouvez avoir plusieurs branches ouvertes en même temps , Chaque branche est utilisée pour accomplir des tâches spécifiques , Au fur et à mesure que le développement progresse , Vous pouvez à tout moment combiner les résultats d'une branche de propriété avec d'autres branches .

De nombreuses utilisations Git Les développeurs aiment travailler de cette façon , Par exemple, seulement dans master Conserver un code entièrement stable dans la branche , C'est - à - dire le Code qui a été publié ou qui sera publié .En même temps,, Ils ont aussi un nom develop Ou next Branches parallèles de, Dédié au développement ultérieur , Ou uniquement pour les essais de stabilité — Ça ne veut pas dire qu'il faut être stable. , Mais une fois dans un état stable, ,

《Grandes usines de première ligneJavaAnalyse des questions d'entrevue+Notes d'apprentissage pour le développement de l'arrière - plan+La dernière vidéo d'architecture+Document d'information sur le code source du projet en direct》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 Partage open source du contenu complet

Vous pouvez le combiner en master - Oui..Voilà., Pour s'assurer que ces branches d'attributs complétées (Branche à court terme,Comme avant iss53 Branches) Capable de réussir tous les tests , Et sans introduire plus d'erreurs , Et vous pouvez vous joindre à la branche principale ,En attente de la prochaine publication.

Essentiellement, ce dont nous venons de parler , Est un pointeur qui se déplace continuellement à droite au fur et à mesure que l'objet soumis .Le pointeur de la branche stable est toujours à la traîne d'une grande partie de l'histoire de la soumission, Et la branche frontale est toujours plus en avant (Voir fig. 3-18).

![Insérer la description de l'image ici]( )

Ou les considérer comme des pipelines de travail , Peut - être mieux comprendre , L'ensemble d'objets soumis à l'essai a été sélectionné pour un pipeline plus stable (Voir fig. 3-19).

![Insérer la description de l'image ici]( )

Vous pouvez utiliser ceci pour maintenir différents niveaux de stabilité . Certains grands projets auront aussi proposed(Suggestion)Ou pu(proposed updates,Mise à jour recommandée)Branches, Il contient ceux qui n'ont peut - être pas encore mûri pour entrer next Ou master Le contenu de. Le but est d'avoir différents niveaux de stabilité : Quand ces branches atteignent un niveau plus stable , Et les fusionner en branches supérieures . Encore une fois. , L'utilisation de plusieurs branches à long terme n'est pas nécessaire ,Mais en général, Pour les grands projets ou les projets particulièrement complexes , C'est plus facile à gérer .

Branche de propriété

Les caractéristiques peuvent être utilisées dans n'importe quel projet de taille (Topic)Branches. Une branche caractéristique est une branche à court terme , Branche utilisée pour mettre en œuvre une seule caractéristique ou son travail connexe . Peut - être n'avez - vous jamais fait quelque chose comme ça dans un système de contrôle de version précédent , Parce que la création et la fusion de succursales consomment souvent trop .Mais dans Git Moyenne, Construit en un jour 、Utiliser、 Il est courant de fusionner et de supprimer plusieurs branches .

Nous l'avons vu dans l'exemple de la section précédente. .Nous avons créé iss53 Et hotfix Ces deux branches de propriété , Après avoir soumis plusieurs mises à jour , Les fusionner en branches principales ,Puis supprimer. Cette technique vous permet de changer rapidement et complètement de contexte — Parce que votre travail est réparti entre différentes lignes de montage , Les changements dans chaque branche sont liés à ses caractéristiques cibles , Parcourir le Code et d'autres choses devient plus facile . Vous pouvez garder les changements faits dans la branche des caractéristiques pendant quelques minutes , Quelques jours, voire quelques mois , Quand ils mûriront, ils fusionneront , Sans se soucier de l'ordre ou du calendrier dans lequel ils sont construits .

Voyons un exemple pratique. .Regardez l'image. 3-20,De bas en haut, Au début, on était master Au travail C1, Et commencer une nouvelle branche iss91 Essayer de réparer 91 Défaut no ,Soumis à C6 Quand, Une nouvelle façon de résoudre ce problème , Donc, depuis le début, C4 Il y a une autre branche iss91v2,Allez! C8 Quand, Retour à l'épine dorsale master Soumis par C9 Et C10,Retour en arrière iss91v2 Continuez à travailler.,Soumettre C11,Et voilà., Encore une idée incertaine ,De master Dernière soumission pour C10 Il y a une nouvelle branche dumbidea Faites des tests .

![Insérer la description de l'image ici]( )

Maintenant, Supposons deux choses. : Nous avons finalement décidé d'utiliser la deuxième solution ,C'est - à - dire: iss91v2 L'approche ;En plus,On met dumbidea Après avoir montré la branche aux collègues , Découvrir que c'était un travail de génie .Donc la prochaine étape, Nous sommes prêts à abandonner l'original iss91 Branches( En fait, elle est jetée. C5 Et C6), Intégration directe des deux autres branches dans le tronc . L'historique final de la présentation deviendra le graphique 3-21 Voilà.:

![Insérer la description de l'image ici]( )

N'oubliez pas que toutes ces branches sont locales ,C'est important.. Lorsque vous utilisez des branches et des fusions , Tout est à toi Git En entrepôt — Aucune interaction avec le serveur .

 3.5 Branche distante


Branche distante(remote branch) Est l'index d'une branche dans un entrepôt distant . Ce sont des branches locales immobiles ;Seulement si Git Mise à jour seulement en cas d'interaction réseau . La branche distante est comme un signet , Vous rappelle l'emplacement des branches ci - dessus la dernière fois que vous vous êtes connecté à l'entrepôt distant .

Nous utilisons (Nom de l'entrepôt distant)/(Nom de la branche) Cette forme représente une branche distante . Par exemple, nous aimerions voir la dernière fois que origin Pendant la communication de l'entrepôt master L'apparence de la branche , J'aurais dû voir origin/master Branches. Si vous travaillez avec un partenaire pour corriger un problème , Mais ils ont d'abord poussé un iss53 Branchez - vous à l'entrepôt distant , Bien que vous ayez peut - être aussi un iss53 Branches, Mais la dernière mise à jour vers le serveur devrait être origin/iss53 Branches.

Ça pourrait être un peu désordonné , Prenons un exemple . Supposons que votre équipe ait une adresse git.ourcompany.com De Git Serveur.Si vous clonez d'ici,,Git Cet entrepôt distant sera automatiquement nommé origin, Et télécharger toutes ces données , Pour créer un master Pointeur de branche, Nommé localement origin/master, Mais vous ne pouvez pas changer ses données localement .Et voilà.,Git Construire un endroit qui vous appartient master Branches,Ça a commencé origin Allez. master Branche au même endroit , Vous pouvez commencer à travailler là - dessus (Voir fig. 3-22):

![Insérer la description de l'image ici]( )

Si vous êtes local master La branche a été modifiée ,En même temps,, Les autres se sont adressés à git.ourcompany.com J'ai poussé leurs mises à jour , Donc sur le serveur master La branche avance. ,Et en même temps,, Votre histoire de soumission locale évolue dans différentes directions . Mais tant que vous ne Communiquez pas avec le serveur, ,La tienne. origin/master Le pointeur reste en place et ne se déplace pas (Voir fig. 3-23).

![Insérer la description de l'image ici]( )

Peut fonctionner git fetch origin Pour synchroniser les données du serveur distant vers le local . La commande trouve d'abord origin Quel serveur est - ce? (Par exemple: git.ourcompany.com), Obtenez les données que vous n'avez pas encore , Mettre à jour votre base de données locale ,Et mettre origin/master Le pointeur vers sa position la plus récente (Voir fig. 3-24).

![Insérer la description de l'image ici]( )

Pour démontrer que vous avez plusieurs branches distantes ( Sur différents serveurs distants ) Comment fonctionne le projet , Supposons que vous ayez un autre serveur interne pour votre équipe de développement Agile git.team1.ourcompany.com. On peut utiliser la référence au chapitre II git remote add La commande l'ajoute à l'une des branches distantes du projet en cours .Nous l'avons nommé teamone, Pour remplacer le Git URL Pour une utilisation facile(Voir fig. 3-25).

![Insérer la description de l'image ici]( )

Maintenant vous pouvez utiliser git fetch teamone Pour obtenir les données que vous n'avez pas encore sur le serveur du Groupe . Parce que le contenu actuel sur ce serveur est vous origin Sous - ensemble sur le serveur ,Git Aucune donnée ne sera téléchargée , Au lieu de créer simplement un teamone/master Branche distante de,Pointage teamone Sur le serveur master Objet de soumission où se trouve la branche 31b8e(Voir fig. 3-26).

![Insérer la description de l'image ici]( )

Pousser la branche locale

Pour partager une branche locale avec d'autres , Vous devez le pousser dans un entrepôt distant où vous avez la permission d'écrire . La branche locale que vous créez n'est pas automatiquement synchronisée sur le serveur distant que vous avez introduit en raison de votre écriture , Vous devez explicitement pousser la branche .En d'autres termes,, Pour les branches qui n'ont pas l'intention de partager , Garde ça pour toi. , Et ne pousser que les branches de fonctionnalités nécessaires pour travailler ensemble .

Si vous avez un serverfix La branche doit être développée avec d'autres ,Peut fonctionner git push (Nom de l'entrepôt distant) (Nom de la branche)

$ git push origin serverfix

Counting objects: 20, done.

Compressing objects: 100% (14/14), done.

Writing objects: 100% (15/15), 1.74 KiB, done.

Total 15 (delta 5), reused 0 (delta 0)

To  git@github.com:schacon/simplegit.git

  • [new branch] serverfix -> serverfix

Il y a un petit raccourci ici .Git Automatique serverfix Extension de la branche refs/heads/serverfix:refs/heads/serverfix,Signifie“ Sortez mon serverfix Branches, Poussé à l'entrepôt distant serverfix Dans la branche.”. Nous en reparlerons au chapitre 9 refs/heads/ Détails de la section, Mais en général, vous pouvez l'omettre quand vous l'utilisez .Peut également fonctionner git push origin serverfix:serverfix Pour obtenir le même effet,Ça veut dire“ Télécharger mon local serverfix Branchez - vous dans un entrepôt distant , Encore appelé serverfix Branches”. Avec cette syntaxe , .Vous pouvez pousser une branche locale vers une branche distante nommée différemment : Si vous voulez appeler une branche distante awesomebranch,Ça marche git push origin serverfix:awesomebranch Pour pousser les données .

Et puis..., Lorsque votre collaborateur récupère à nouveau les données du serveur , Ils auront une nouvelle branche distante origin/serverfix, Et pointer vers le serveur serverfix Version pointée :

$ git fetch origin

remote: Counting objects: 20, done.

remote: Compressing objects: 100% (14/14), done.

remote: Total 15 (delta 5), reused 0 (delta 0)

Unpacking objects: 100% (15/15), done.

From  git@github.com:schacon/simplegit

  • [new branch] serverfix -> origin/serverfix

Ce qui est remarquable, c'est que,In fetch Après avoir téléchargé une nouvelle branche distante , Vous ne pouvez toujours pas modifier localement les branches dans cet entrepôt distant .En d'autres termes,,Dans ce cas,, Tu n'auras pas un nouveau serverfix Branches, Il n'y en a qu'un que tu ne peux pas bouger origin/serverfix Pointeur.

Si vous souhaitez fusionner le contenu de cette branche distante dans la branche courante ,Peut fonctionner git merge origin/serverfix. Si vous voulez une copie de votre serverfix Pour développer, Il est possible de différencier une nouvelle branche sur la base d'une branche distante :

Enfin

XiaoBian a soigneusement préparé des documents de première main pour tout le monde

git(3)Git Branches,zookeeperTélécharger le tutoriel_Développement de l'arrière - plan_05

git(3)Git Branches,zookeeperTélécharger le tutoriel_Java_06

Ci - dessusJavaDonnées architecturales avancées、Code source、Notes、Vidéo.Dubbo、Redis、Mode de conception、Netty、zookeeper、Spring cloud、Distribué、Haute concurrence et autres technologies d'architecture

【Annexe】Livres d'architecture

  1. BATInterview20Analyse du problème de la base de données à haute fréquence des canaux
  2. JavaUn dictionnaire d'interview
  3. NettySur le terrain
  4. Algorithmes

git(3)Git Branches,zookeeperTélécharger le tutoriel_Développement de l'arrière - plan_07

BATJPoints clés de l'entrevue etJavaArchitecte Advanced Information

git(3)Git Branches,zookeeperTélécharger le tutoriel_Java_08

Cet article a été publié par CODINGProjet Open Source:【Grandes usines de première ligneJavaAnalyse des questions d'entrevue+Résumé de base notes d'étude+Dernière vidéo d'explication+Code source du projet opérationnel】Inclus

版权声明
本文为[Harmonios Learning]所创,转载请带上原文链接,感谢
https://cdmana.com/2021/11/20211125180119814A.html

Scroll to Top