git: fusionne les modifications du référentiel principal dans code.google.com


1

Supposons que j'ai créé un clone http://code.google.com/r/kkowalczyk-leveldb de http://code.google.com/p/leveldb à l' aide de l'interface Web sur code.google.com.

Depuis que j'ai créé mon clone, des modifications ont été apportées à http://code.google.com/p/leveldb et je souhaite les fusionner avec mon clone, de préférence en préservant l'historique (c.-à-d. Que je pouvais les fusionner manuellement à l'aide d'un fichier diff. / fusionner, mais cela ne conserve pas l’historique de git).

Quelles sont les commandes magiques pour effectuer une telle fusion?

De préférence, veuillez fournir les commandes complètes. J'imagine que cela impliquera une combinaison de git fetch et de fusion de git, de branches de suivi à distance, etc. Mon problème n'est pas que je ne peux pas lire les pages de manuel relatives à git fetch ou à la fusion, je ne les comprends tout simplement pas.

Mise à jour:

Compte tenu du commentaire de Lazy Badger ci-dessous, j'ai résolu la moitié du problème:

git remote add original https://code.google.com/p/leveldb/

Crée quelque chose appelé "original" pointant vers la source. Je peux alors faire:

git pull original master

Ce qui récupère et fusionne les modifications de l'original dans mon directeur de succursale. Je voudrais cependant le faire en 2 étapes distinctes: comme git fetch et git merge $ quelque chose à fusionner dans ma branche actuelle.

Cependant, après que git récupère l’original, je ne sais pas ce que serait quelque chose. Quand je fais git branch -a, je ne vois rien qui soit en rapport avec mon objet original distant.

Ce qui complique les choses, c'est qu'il y a également 3 branches dans l'original.

Alors, où vont les données extraites de l'original et comment dois-je les référencer dans mon git merge $ quelque chose?



Réponse [trouvé ici] [1], juste une petite recherche sur Google. [1]: stackoverflow.com/questions/4313125/…
Lazy Badger,

S'il vous plaît voir la mise à jour. Ceux-ci ne répondent pas vraiment à mes questions.
Krzysztof Kowalczyk

Réponses:


2

Vous avez déjà trouvé comment ajouter une autre télécommande et en tirer directement:

git remote add original https://code.google.com/p/leveldb/
git pull original master

Si vous voulez effectuer l'extraction et la fusion séparément (au lieu d'une seule commande d'extraction; peut-être parce que vous souhaitez inspecter ce qui a changé avant de le fusionner), procédez comme suit:

git fetch original         # update refs/remotes/original/*
git merge original/master  # merge refs/remotes/original/master

Vous pouvez examiner les modifications avant de fusionner avec cette commande:

git log --reverse -p original/master@{1}..original/master@{0}

Au lieu d'utiliser la spécification de révision basée sur reflog ci-dessus, vous pouvez également simplement copier-coller la oldhash..newhashspécification de révision générée lors de l'extraction.


Techniquement, git pull remote branchest plus proche de cette paire de commandes:

git fetch remote-or-url branch  # grab remote branch and put it in FETCH_HEAD
git merge FETCH_HEAD            # merge it

mais cette paire (et donc aussi en tirant avec à la fois une télécommande et une branche spécifiée) n’est généralement pas aussi agréable dans la mesure où elle ne met pas à jour les branches de suivi à distance ( refs/remotes/original/*). Les invocations remote + branch de fetch et de pull sont utiles pour les fusions uniques de référentiels pour lesquels vous ne souhaitez pas conserver un ensemble complet de branches de suivi à distance (c.-à-d. Extraction / extraction d'une demande de fusion d'un contributeur mineur / rare) .


0

Vous pouvez ajouter plusieurs télécommandes à un même référentiel. Une fois que vous avez la deuxième télécommande, vous pouvez simplement pousser les modifications de la première à la seconde. Par exemple:

git clone <google_URI>
cd <projdir>
git remote add github <github_URI>
git push github master

Cela ne répond pas à ma question - voir la mise à jour. Ce que je veux savoir: après git remote, ajoutez github <github_URI> suivi de git fetch github, ce qui est <sth> dans git merge <sth>, en supposant que github remote a 2 branches, par exemple maître et gagnant.
Krzysztof Kowalczyk -

La réponse de Chris ci-dessous montre ce qui se passe: FETCH_HEAD ou original / master ferait l'affaire. Ou vous pouvez créer une autre branche locale à partir de l’une des deux et fusionner à partir de là.
Dysaster
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.