Comment puis-je garder ma fourche synchronisée sans ajouter de télécommande séparée?


302

Supposons qu'il existe un référentiel someone/foobarsur GitHub, auquel j'ai fourré me/foobar.

Comment puis-je extraire de nouvelles validations du référentiel parent directement sur ma fourchette , sans avoir à ajouter une télécommande distincte et n'oubliez pas de tirer régulièrement à partir de là ?

Le but est de:

  • git pull à récupérer dans le référentiel parent
  • git push tout envoyer à ma fourchette

26
La réponse surprenante de @Olufemi semble faire ce que vous voulez, sauf que, comme le note ChristianGosch dans un commentaire, vous vous retrouvez avec un "merge commit" au-dessus de votre branche, et "rien à comparer" n'apparaîtra pas. Cela semble inacceptable pour de nombreux projets pour lesquels vous souhaitez créer des succursales pour eux. Donc, n'y a-t-il vraiment aucun moyen de faire la plupart des flux de travail des contributeurs dans github sans exécuter des commandes arcanes git sur un ordinateur personnel? Ou peut-être que je devrais simplement jeter mon repo et re-fork à chaque fois que je veux contribuer ??
nealmcb




@nealmcb Le problème avec un "commit de fusion" en haut de votre branche n'est-il pas évité si vous rebasez?
Marko

Réponses:


586

Ouvrez le dépôt fourchu Git me / foobar .

Cliquez sur Comparer :

Voici un exemple d'image de la page

Vous recevrez la notification:

Il n'y a rien à comparer.
quelqu'un: master est à jour avec tous les commits de ma part: master . Essayez de changer de base pour votre comparaison.

Cliquez sur changer de base sur cette page:

Voici un exemple sur la page

Ensuite, vous pouvez voir tous les commits faits à quelqu'un / foobar après le jour où vous l'avez fourchu.

Cliquez sur Créer une demande d'extraction :

Voici un exemple de page

Donnez un titre et peut-être une description à la demande de tirage, puis cliquez sur Créer une demande de tirage .

Sur la page suivante, faites défiler vers le bas de la page et cliquez sur Fusionner la demande d'extraction et Confirmer la fusion .

Votre référentiel Git me / foobar sera mis à jour.

Modifier: les options de rebase sont affichées ici:

entrez la description de l'image ici


50
Cela est déroutant car lorsque vous changez de base, le github vous renvoie dans la page du dépôt d'origine, il semble donc que vous ouvrez une demande de tirage à la fourchette en amont. Mais cela fonctionne totalement.
Eduardo

8
Pour éviter la situation confuse mentionnée ci-dessus, il vaut mieux cliquer sur le Editbouton et basculer manuellement base forkvers me/foobaret head forkvers someone/foobar. De cette façon, c'est beaucoup plus clair
macemers

26
Un autre: cela fonctionne très bien si vous ne l'avez pas déjà fait, mais après il y a le "merge commit" en haut de votre historique de commit. Ainsi, "rien à comparer" n'apparaîtra pas. Au lieu de cela, il faut utiliser le bouton "Modifier" et échanger manuellement la base et la fourche pour que cela fonctionne.
Christian Gosch

26
N'y a-t-il aucun moyen de se débarrasser de ce ridicule engagement de fusion?
kumarharsh

17
@kumar_harsh depuis septembre 2016 , il existe désormais une option "rebase and merge" pour les pull demandes qui évite le commit de fusion.
waldyrious

41
git remote set-url origin git@github.com:someone/foobar
git remote set-url origin --push git@github.com:me/foobar

Il y a cependant une mise en garde:
c'est parfait si vous êtes le seul à apporter des modifications à votre fourche.
Cependant, si elle est partagée avec d'autres personnes, vous devrez peut-être tirer de votre fourche, auquel cas une télécommande séparée est la seule solution.

Edit: En
fait, vous pouvez git pull git@github.com:me/foobar , qui supprime la mise en garde.
Vous avez le choix de ce qui est le plus facile à retenir.


8

J'ai utilisé une méthode assez simple en utilisant l'interface utilisateur Web GitHub pour ce faire:

  1. Ouvrez le référentiel Git d'origine (pas le référentiel Git bifurqué me/foobar)
  2. Accédez au dossier src et ouvrez le fichier que vous souhaitez modifier
  3. Cliquez sur l'icône du stylo. Il créera automatiquement une étiquette dans votre fork personnel nommé "patch-1" basé sur la version actuelle du référentiel maître: Entrez la description de l'image ici
  4. Prendre plaisir! Entrez la description de l'image ici

3
En essayant cela, vous ouvrez essentiellement l'éditeur sur le fichier dans le dépôt git d'origine. Je n'ai pas de privilège d'écriture (par conception) dans le dépôt git d'origine. Il semble que pour cette méthode, vous devez modifier le fichier, sinon il n'y a aucun moyen de "sauvegarder" le fichier. Sans enregistrer le fichier, je n'ai pas pu faire apparaître votre équivalent de la branche "patch-1" dans mon dépôt forké. Qu'est-ce que j'oublie ici?
Electro-Lapin

5

L'application "Pull" est une solution de configuration et d'oubli automatique. Il synchronisera la branche par défaut de votre fork avec le référentiel en amont.

Visitez l'URL, cliquez sur le bouton vert "Installer" et sélectionnez les référentiels où vous souhaitez activer la synchronisation automatique.

La branche est mise à jour une fois par heure directement sur GitHub, sur votre machine locale, vous devez tirer la branche principale pour vous assurer que votre copie locale est synchronisée.

Répondu également dans https://stackoverflow.com/a/58965171/946850 .


1

Une autre option consiste à utiliser le Update from upstreamRepoName/masterbouton dans GitHub pour Mac (et je suppose que GitHub pour Windows).

Entrez la description de l'image ici


TIL: qu'il existe des applications pour GitHub au-delà de l'interface Web :-) [et c'est dommage que l'expérience à travers elles ne soit pas unifiée]
Tom Goodfellow

Je ne vois pas cela dans Windows
Denis

1
@Denis, c'est leur ancienne application. Je ne suis pas sûr que leur nouvelle application l'ait.
Steve Moser

Aha. Cela a fonctionné dans "GitHub Desktop" (pour Mac, pas sûr de Windows).
michaelok

0

Je ne sais pas comment cela peut être fait sans ajouter une autre télécommande, mais j'ajoute toujours le repo que j'ai forké comme upstreamtélécommande pour pouvoir simplement faire:

git branch -a|grep remotes/upstream| while IFS="/" read p r b; do echo Syncing $r/$b to origin/$b; git push origin $r/$b:refs/heads/$b; done

Cela synchronisera toutes les branches incl. en créer de nouvelles (supprimez la refs/heads/pour mettre à jour uniquement les branches existantes). Si l'une de vos branches a divergé, une erreur sera générée pour cette branche.

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.