Git pull d'un autre référentiel

95

J'ai un référentiel appelé Generic, qui est une application générique. Je l'ai bifurqué dans un référentiel appelé Acme, qui s'appuie simplement sur le Genericréférentiel stocké par l'application et y ajoute la marque Acme Co.

Si j'apporte des modifications à la fonctionnalité principale dans Generic, je souhaite mettre à jour le Acmeréférentiel avec les dernières modifications que j'ai apportées à la fonctionnalité principale dans Generic. Comment pourrais-je faire ça?

Pour autant que je sache, j'essaie essentiellement de fusionner les modifications apportées dans un référentiel en amont dans le fork actuel.

Si cela signifie quelque chose, j'essaie de le faire parce que j'ai une application générique sur laquelle je m'appuie et que je marque pour des clients individuels (comme Acmedans cet exemple). S'il existe une manière plus propre de procéder, faites-le moi savoir.

Libbux
la source

Réponses:

135

Exécutez la commande suivante dans votre Acmedépôt. Il ajoute un nouveau référentiel distant nommé upstreamqui pointe vers le dépôt Generic.

git remote add upstream https://location/of/generic.git

Vous pouvez ensuite fusionner toutes les modifications apportées à Genericdans la branche actuelle Acmeavec la commande suivante:

git pull upstream

Si vous souhaitez simplement qu'il télécharge les modifications sans fusionner automatiquement, utilisez à la git fetchplace de git pull.

Si vous souhaitez désactiver le push vers ce référentiel, définissez l'URL push sur une URL non valide en utilisant quelque chose comme

git config remote.upstream.pushurl "NEVER GONNA GIVE YOU UP"

Git va maintenant vous hurler de ne pas pouvoir trouver de dépôt si vous essayez de pousser upstream(et désolé pour le Rickroll, mais c'était la première chaîne aléatoire qui m'est venue à l'esprit).

McLovin
la source
6
Excellent, merci. Juste une autre chose: y a-t-il un moyen de rendre cette télécommande en lecture seule, pour ne pas finir par y pousser accidentellement?
Libbux
1
J'ai commencé à répondre mais je vois que McLovin a déjà édité sa réponse pour l'inclure.
Frankie Simon
4
Depuis git 2.9, vous devrez spécifier l'indicateur --allow-unrelated-histories. Voir stackoverflow.com/a/37938036/3799847
sfinks_29
5
J'avais besoin d'émettregit pull --allow-unrelated-histories upstream master
Alec Jacobson
J'ai essayé mais git pull upstreamaccroche juste ... des idées?
Paulo Carvalho le
6

Pour extraire une branche particulière d'un dépôt différent, vous pouvez utiliser la commande git ci-dessous.

git pull <git_url> <branch> --allow-unrelated-histories
vin
la source