Transformer le dépôt Git de GitHub vers GitLab

94

Supposons que je souhaite implémenter un correctif sur un projet de quelqu'un d'autre. Ce projet réside sur GitHub.

Je pourrais créer un fork sur GitHub et implémenter le correctif.

Cependant, j'aimerais créer mon fork sur GitLab plutôt que sur GitHub.

Est-ce possible? Comment?

J'ai lu cet article: https://about.gitlab.com/2016/12/01/how-to-keep-your-fork-up-to-date-with-its-origin/

Quoi qu'il en soit, je ne suis pas sûr de ce que je dois faire dans mon cas.

  • Dois-je simplement créer un fork sur GitLab du projet à partir de GitHub?
  • Ou devrais-je créer un miroir sur GitLab du projet à partir de GitHub?
  • Ou devrais-je créer un miroir sur GitLab et ensuite fourcher le miroir?
  • Ou devrais-je faire quelque chose de complètement différent?

Quelle est la bonne approche.

Merci.

MISE À JOUR

La mise en miroir du référentiel sur GitLab n'a probablement pas de sens. Je peux créer un miroir de MON référentiel GitHub sur GitLab mais je ne peux pas créer un miroir d'un référentiel de quelqu'un d'autre.

https://docs.gitlab.com/ee/workflow/repository_mirroring.html

Voici ce que j'ai fait jusqu'à présent:

J'ai cloné le projet GitHub d'origine sur ma machine locale. J'ai validé le correctif dans une nouvelle branche de mon référentiel local. J'ai créé un projet vide sur GitLab. J'ai défini l'origine dans mon référentiel local sur ce projet vide sur GitLab et j'ai poussé les deux branches vers GitLab. J'ai configuré en amont dans mon référentiel local le référentiel GitHub.

Lorsque je veux obtenir de nouveaux commits du référentiel GitHub d'origine vers le référentiel sur GitLab (c'est-à-dire synchroniser les référentiels), je peux le faire en utilisant mon référentiel local comme étape intermédiaire. Cependant, il n'y a pas de connexion directe entre le dépôt sur GitHub et le dépôt sur GitLab. Ma configuration est-elle correcte? Y a-t-il une différence si je crée un fork sur GitHub?

Cimlman
la source

Réponses:

124

Si vous souhaitez simplement suivre les modifications, créez d'abord un référentiel vide dans GitLab (ou tout ce que vous utilisez) et clonez-le sur votre ordinateur.

Ajoutez ensuite le projet GitHub comme télécommande " amont " avec:

git remote add upstream https://github.com/user/repo

Vous pouvez maintenant récupérer et extraire de l'amont s'il y a des changements. (Vous pouvez également pousser ou fusionner dessus si vous avez des droits d'accès.)

git pull upstream master

Enfin, repoussez votre propre référentiel GitLab:

git push origin master

Si vous ne voulez pas extraire manuellement l'origine en amont / pousser, GitLab offre une capacité de mise en miroir dans Settings => Repository => Mirroring repositories.

Chris Watts
la source
15
Je voudrais simplement compléter cette réponse pour expliquer pourquoi c'est la bonne approche. "Forking" est un concept créé par GitHub donc n'existe que sur GitHub, utile néanmoins. Si vous considérez git pur lui-même (comme un serveur git pur s'exécutant quelque part dans votre réseau), ce serait comme cloner le dépôt sur votre propre serveur, puis le cloner sur votre ordinateur local. Vous ajouteriez alors le dépôt d'origine en amont localement. Je crois que c'est ce que fait GitHub dans les coulisses.
Bruno Finger
9
Je veux juste ajouter que fork ne exist sur gitlab ce, voir ici par exemple.
bellackn
1
J'ai dû utiliser: pull upstream master --allow-unrelated-histories
hmojtaba
Comment soumettre une pull request plus tard?
Erik Aronesty
1
@ErikAronesty C'est plus compliqué car les "Pull Requests" ne sont pas un truc git, mais plutôt un truc GitHub. Une façon de le faire est de créer une copie sur GitHub et d'ajouter votre dépôt forké comme une autre télécommande, par exemple git remote add upstream-fork [email protected]:myuser/repo. Ensuite, il suffit de git push upstream-fork mastersoumettre votre pull request via le site GitHub.
Chris Watts le
17

La méthode réservée au navigateur:

  1. Créer un nouveau projet dans Gitlab (juste un projet vide avec un nom suffit)
  2. Allez dans Paramètres -> Référentiel
  3. Entrez l'URL GitHub sous "Référentiels en miroir"
  4. Assurez-vous que la «direction du miroir» est «tirer»
  5. Appuyez sur le bouton «Référentiel miroir»
  6. Appuyez sur l'icône de synchronisation à côté de l'entrée qui apparaît
aksh1618
la source
Je n'ai pas la licence Enterprise Edition, c'est-à-dire que je ne peux pas voir "Mise en miroir des référentiels" à partir de l'étape 3. De toute façon, si j'avais une telle licence, pourrais-je créer un miroir d'un référentiel GitHub de quelqu'un d'autre?
Cimlman
1
@Cimlman C'est étrange, car je suis également sous licence gratuite. Peut-être revérifier? Doit être troisième dans «Paramètres-> Référentiel». Pour être clair: les paramètres de la barre latérale, pas le menu de profil.
aksh1618
Après avoir cliqué sur Paramètres -> Référentiel dans la barre latérale, je peux voir les sections Branches protégées, Balises protégées, Déployer des clés, Déployer des jetons.
Cimlman
2
@Cimlman Utilisez-vous une instance gitlab personnalisée / locale? J'ai beaucoup plus d'options dans mon compte personnel de base sur gitlab.com
aksh1618
1
Nous utilisons une installation autogérée, version 10.7.2. La dernière version est la 11.6. OK, c'est un bon point. :) Je ne peux pas essayer votre solution sur notre GitLab. Quoi qu'il en soit, le problème est obsolète pour moi maintenant. Il s'agissait de notre correction de bogue personnalisée d'une bibliothèque tierce. Cependant, le correctif de bogue a déjà été intégré à la version officielle de cette bibliothèque.
Cimlman
0

Le fork d'un dépôt github privé est possible.

  1. Cliquez sur nouveau projet
  2. Sélectionnez Importer
  3. Sélectionnez github
  4. OAuth2 utilisé pour authentifier et créer automatiquement une application gitlab
  5. Sélectionnez le projet à diviser

^ Je viens de le faire avec un dépôt privé sur github, importé avec succès (branches inc, etc.). Le projet importé est automatiquement maintenu privé;)

Daithí
la source
2
L'importation de projet nécessite un "jeton d'accès personnel". J'ai essayé d'en générer un sur GitHub. Il semble que cette fonctionnalité soit utile lorsque je souhaite créer un projet sur GitLab à partir de mon projet sur GitHub. Cette hypothèse est-elle correcte? La question est de forger un projet GitHub de quelqu'un d'autre.
Cimlman
2
-1 parce que, et comme l'indique le commentaire précédent, la question est de forger un projet github de quelqu'un d'autre. Les instructions de cette réponse ne fonctionneront pas dans un tel cas.
Nikos Alexandris
1
@NikosAlexandris êtes-vous sûr? Ne pouvez-vous pas créer un jeton d'accès pour votre compte et accéder au dépôt de quelqu'un d'autre auquel vous avez accès en lecture? (par exemple, chaque repo public)
DGoiko
0

Au lieu de forking, vous pouvez importer n'importe quel référentiel GitHub disponible publiquement en utilisant uniquement l'interface Web:

  1. Dans votre tableau de bord GitLab, cliquez sur Nouveau projet
  2. Basculer vers l' onglet Importer un projet
  3. Cliquez sur le bouton Repo par URL
  4. Renseignez l '"URL du dépôt Git" et les champs de projet restants
  5. Cliquez sur Créer un projet pour commencer le processus d'importation
  6. Une fois terminé, vous serez redirigé vers votre projet nouvellement créé

Utilisé cette technique récemment, et cela fonctionne sur n'importe quel référentiel public, même sans compte GitHub. Consultez cette page de documentation GitLab pour connaître la source des informations.

koceka
la source
1
D'ACCORD. Et si de nouveaux commits sont ajoutés au référentiel d'origine sur GitHub, puis-je simplement fusionner les modifications apportées au référentiel sur GitHub? C'est une opération délicate et peut-être qu'elle ne peut pas se faire sans un référentiel intermédiaire (voir le dernier paragraphe de la question).
Cimlman