Je travaille avec un référentiel git nécessitant un commit provenant d'un autre référentiel git ignorant le premier.
En règle générale, je choisirais le type de recherche en utilisant le HEAD@{x}
dans le compte-rendu, mais parce que ce .git
ne sait rien de cette entrée de compte-rendu (répertoire physique différent), comment puis-je choisir ce résultat, ou puis-je?
J'utilise git-svn
. Ma première branche utilise git-svn
de la trunk
d'un dépôt Subversion, et la branche suivante utilise git-svn
sur une branche Subversion.
Vous devrez ajouter l'autre référentiel en tant que télécommande, puis récupérer ses modifications. De là, vous voyez le commit et vous pouvez le sélectionner.
Comme ça:
_git remote add other https://example.link/repository.git
git fetch other
_
Maintenant, vous avez toutes les informations à faire simplement git cherry-pick
.
Plus d'informations sur l'utilisation des télécommandes ici: https://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes
La réponse, telle qu’elle est donnée, est d’utiliser format-patch, mais comme la question était de savoir comment sélectionner un fichier dans un autre dossier, voici un morceau de code permettant de le faire:
$ git --git-dir=../<some_other_repo>/.git \
format-patch -k -1 --stdout <commit SHA> | \
git am -3 -k
(explication de @ cong ma )
La commande
git format-patch
crée un patch à partir de la validation desome_other_repo
spécifiée par son SHA (-1
pour une seule validation seule). Ce correctif est redirigé versgit am
, qui l'applique localement (-3
signifie qu'il faut essayer la fusion à trois si le correctif ne s'applique pas correctement). J'espère que ça explique.
Voici un exemple de la récupération à distance.
cd /home/you/projectA
git remote add projectB /home/you/projectB
git fetch projectB
Ensuite vous pouvez:
git cherry-pick <first_commit>..<last_commit>
ou vous pouvez même fusionner toute la branche
git merge projectB/master
Vous pouvez le faire, mais cela nécessite deux étapes. Voici comment:
git fetch <remote-git-url> <branch> && git cherry-pick FETCH_HEAD
Remplacez <remote-git-url>
par l'URL ou le chemin d'accès au référentiel dans lequel vous souhaitez effectuer une sélection.
Remplacez <branch>
par le nom de branche ou de balise que vous souhaitez sélectionner dans le référentiel distant.
Vous pouvez remplacer FETCH_HEAD
par un git SHA de la branche.
Mise à jour: modifiée en fonction des commentaires de @ pkalinow.
Voici les étapes à suivre pour ajouter une télécommande, récupérer des branches et sélectionner un commit
# Cloning our fork
$ git clone [email protected]: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
Source: https://coderwall.com/p/sgpksw
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 destiné à une base de code totalement différente. S'il s'agit d'un référentiel pour la même base de code, vous devez l'ajouter en tant que télécommande, comme suggéré par @CharlesB. Même s'il s'agit d'un autre base de code, je suppose que vous pouvez toujours l’ajouter en tant que télécommande, mais vous ne voudrez peut-être pas que toute la branche soit dans votre référentiel ...)
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 choisi et que vous avez vérifié pour corriger la branche.
git fetch ssh://[email protected]:7999/repo_to_get_it_from.git branchToPickFrom && git cherry-pick 02a197e9533
#
git fetch [adresse URL de la branche] [branchez un sélecteur dans le choix de] && git cherry-pick [commit ID]
Oui. Récupérez le référentiel, puis sélectionnez-le dans la branche distante.
En supposant que A
soit le référentiel dans lequel vous voulez sélectionner, et que B
soit celui que vous souhaitez sélectionner, vous pouvez le faire en ajoutant </path/to/repo/A/>/.git/objects
à </path/to/repo/B>/.git/objects/info/alternates
. Créez ces fichiers alternates
s'il n'existe pas.
Cela fera en sorte que repo B accède à tous les objets git à partir de repo A, et fera que le tri sélectif fonctionne pour vous.
Ma situation était que j'avais un compte-rendu simple sur lequel 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 de la mise à jour nue à jour, nous sommes en mesure de sélectionner un changement proposé publié dans la mise à jour nue. Nous avons également un moyen (plus compliqué) de sélectionner plusieurs branches pour des analyses et des tests consolidés.
Si "ne sait rien" signifie "ne peut pas être utilisé comme télécommande", cela n'aide pas, mais cette question SO est apparue alors que je cherchais avec joie pour trouver ce flux de travail, alors j'ai pensé Je contribuerais en retour.