Question Est-il possible de sélectionner un commit à partir d'un autre dépôt git?


Je travaille avec un dépôt git qui a besoin d'un commit d'un autre dépôt git qui ne connaît rien de la première.

Typiquement, je choisirais cherry en utilisant le HEAD@{x} dans le reflog, mais parce que .git ne sait rien de cette entrée reflog (répertoire physique différent), comment puis-je choisir ceci, ou puis-je?

j'utilise git-svn. Ma première branche utilise git-svn du trunk d'un dépôt Subversion, et la branche suivante utilise git-svn sur une branche Subversion.


526
2018-02-25 16:47


origine


Réponses:


Vous devrez ajouter l'autre référentiel en tant que distant, puis récupérer ses modifications. De là, vous voyez le commit et vous pouvez le choisir.

Comme ça:

git remote add other https://example.link/repository.git
git fetch other

Maintenant, vous avez toutes les informations pour faire simplement git cherry-pick.

Plus d'infos sur le travail avec les télécommandes ici: https://git-scm.com/book/fr/v2/Git-Basics-Working-with-Remotes


355
2018-02-25 16:50



La réponse, comme donnée, est d'utiliser format-patch mais comme la question était de savoir comment sélectionner un autre dossier, voici un morceau de code à faire:

$ git --git-dir=../<some_other_repo>/.git \
format-patch -k -1 --stdout <commit SHA> | \
git am -3 -k

(explication de @cong ma)

le git format-patch commande crée un patch à partir de some_other_repode   commit spécifié par son SHA (-1 pour un seul commit seul). Ce   patch est canalisé à git am, qui applique le patch localement (-3 veux dire   essayer la fusion à trois si le patch ne s’applique pas correctement. Espérer   Cela explique.


725
2018-02-29 22:06



Voici un exemple de remote-fetch-merge.

cd /home/you/projectA
git remote add projectB /home/you/projectB
git fetch projectB

Ensuite, vous avez le choix:

git merge projectB/master

ou:

git cherry-pick <first_commit>..<last_commit>

119
2017-07-13 20:20



Vous pouvez le faire, mais cela nécessite deux étapes. Voici comment:

git fetch <remote-git-url> <branch> && git cherry-pick FETCH_HEAD

Remplacer <remote-git-url> avec l'URL ou le chemin vers le référentiel que vous voulez sélectionner.

Remplacer <branch> avec le nom de branche ou d'étiquette que vous souhaitez sélectionner dans le référentiel distant.

Vous pouvez remplacer FETCH_HEAD avec un git SHA de la branche.

Mis à jour: modifié en fonction des commentaires de @ pkalinow.


97
2018-03-14 22:40



Voici les étapes pour ajouter une télécommande, récupérer des branches et choisir un commit

# Cloning our fork
$ git clone git@github.com:ifad/rest-client.git

# Adding (as "endel") the repo from we want to cherry-pick
$ git remote add endel git://github.com/endel/rest-client.git

# Fetch their branches
$ git fetch endel

# List their commits
$ git log endel/master

# Cherry-pick the commit we need
$ git cherry-pick 97fedac

La source: https://coderwall.com/p/sgpksw


52
2017-09-16 20:16



Voir Comment créer et appliquer un patch avec Git. (D'après le libellé de votre question, j'ai supposé que cet autre référentiel est pour une base de code entièrement différente.Si c'est un référentiel pour la même base de code, vous devriez l'ajouter comme une télécommande comme suggéré par @CharlesB. base de code, je suppose que vous pouvez toujours l'ajouter comme une télécommande, mais vous ne voudrez peut-être pas avoir la branche entière dans votre dépôt ...)


15
2018-02-25 16:51



Vous pouvez le faire en une ligne comme suit. J'espère que vous êtes dans le référentiel git qui a besoin du changement sélectionné et que vous avez vérifié pour corriger la branche.

git fetch ssh://git@stash.mycompany.com:7999/repo_to_get_it_from.git branchToPickFrom && git cherry-pick 02a197e9533

git fetch [URL de la succursale]  [Branch to cherry-pick from] && git cherry-pick [ID de validation]


6
2017-09-17 09:47



Oui. Récupérez le référentiel, puis sélectionnez-le dans la branche distante.


3
2018-02-25 16:51



Ma situation était que j'ai un repo nu que l'équipe pousse à, et un clone de cette séance juste à côté. Cet ensemble de lignes dans un Makefile fonctionne correctement pour moi:

git reset --hard
git remote update --prune
git pull --rebase --all
git cherry-pick -n remotes/origin/$(BRANCH)

En gardant le maître du repo nu à jour, nous sommes en mesure de sélectionner un changement proposé publié au repo nu. Nous avons également un moyen (plus compliqué) de sélectionner plusieurs broches pour une révision et des tests consolidés.

Si "ne sait rien" signifie "ne peut pas être utilisé comme une télécommande", cela n'aide pas, mais cette question a été soulevée alors que je cherchais ce workflow et que je pensais pouvoir y contribuer.


0
2018-05-31 19:04



En supposant A est le repo que vous voulez choisir, et B est celui que vous souhaitez choisir, vous pouvez le faire en ajoutant </path/to/repo/A/>/.git/objects à </path/to/repo/B>/.git/objects/info/alternates. Créer ceci alternates fichiers s'il n'existe pas.

Cela permettra à Repo B d'accéder à tous les objets git de repo A, et fera un travail de sélection de cerises pour vous.


0
2018-04-08 19:14