Est-il possible de sélectionner une propagation à partir d'un autre dépôt git?
je travaille avec un dépôt git qui a besoin d'une propagation depuis un autre dépôt Git qui ne connaît rien du premier.
en général, je choisirais le HEAD@{x}
dans le refrog, mais parce que ce .git
ne sait rien de cette entrée de refrog (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'une sous-version de repo, et la branche suivante utilise git-svn
sur une branche Subversion.
10 réponses
vous devrez ajouter l'autre dépôt comme une télécommande, 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 simplement faire git cherry-pick
.
pour en savoir plus sur les télécommandes, cliquez 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 puisque la question était comment choisir à partir d'un autre dossier, voici un morceau de code pour faire exactement cela:
$ git --git-dir=../<some_other_repo>/.git \
format-patch -k -1 --stdout <commit SHA> | \
git am -3 -k
(explication de @congma)
la commande
git format-patch
crée un patch à partir desome_other_repo
's commit spécifié par son SHA (-1
pour un seul commit). Ce le patch est pipé àgit am
, qui applique le patch localement (-3
essayer la fusion à trois si le patch ne s'applique pas proprement). Espérer qui explique.
Voici un exemple de la télécommande-fetch-fusion.
cd /home/you/projectA
git remote add projectB /home/you/projectB
git fetch projectB
alors vous pouvez:
git cherry-pick <first_commit>..<last_commit>
ou vous pouvez même fusionner l'ensemble de la branche
git merge projectB/master
Vous pouvez le faire, mais il nécessite deux étapes. Voici comment:
git fetch <remote-git-url> <branch> && git cherry-pick FETCH_HEAD
remplacer <remote-git-url>
par l'url ou le chemin du dépôt à partir duquel vous voulez choisir.
remplacer <branch>
par le nom de la branche ou de l'étiquette que vous souhaitez sélectionner dans le dépôt distant.
vous pouvez remplacer FETCH_HEAD
par un git SHA de la branche.
mise à Jour le: modifié basé sur @pkalinow commentaires.
Voici les étapes pour ajouter une télécommande, récupérer des branches, et choisir une 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
Source: https://coderwall.com/p/sgpksw
Voir Comment créer et appliquer un patch avec Git . (D'après la formulation de votre question, j'ai supposé que cet autre dépôt est pour une base de code entièrement différente. Si c'est un dépôt pour la même base de code, vous devriez l'ajouter comme une télécommande comme suggéré par @CharlesB. Même si c'est pour une autre base de code, je suppose que vous pouvez toujours l'ajouter comme une télécommande, mais vous pourriez ne pas vouloir obtenir la branche entière dans votre dépôt...)
vous pouvez le faire dans une ligne comme suit. J'espère que vous êtes dans le dépôt git qui ont besoin de la modification choisie et 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 [direction URL] [Direction de cherry-pick de] && git cherry-pick [valider ID]
Oui. Récupérez le dépôt puis sélectionnez-le dans la branche distante.
Ma situation était que j'ai un rapport nu que l'équipe pousse à, et un clone de cela assis juste à côté de lui. 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 tenant à jour le master of the bare repo, nous sommes en mesure de sélectionner un changement proposé publié dans le bare repo. Nous disposons également d'un moyen (plus compliqué) de sélectionner plusieurs braches pour un examen et des tests consolidés.
si " sait rien "signifie" ne peut pas être utilisé comme une télécommande", alors ça n'aide pas, mais cette question est venue alors que je googlais autour de trouver ce workflow alors j'ai pensé que je contribuerais en retour.
Assumer A
est l'opération que vous voulez choisir de, et de B
est celui que vous voulez choisir de, vous pouvez le faire en ajoutant </path/to/repo/A/>/.git/objects
à </path/to/repo/B>/.git/objects/info/alternates
. Créer ce fichier alternates
s'il n'existe pas.
cela permettra à repo B d'accéder à tous les objets git de repo A, et fera fonctionner cherry-pick pour vous.