Importer un projet git existant dans GitLab?


147

J'ai un compte d'une installation Gitlab où j'ai créé le dépôt "ffki-startseite"

Maintenant, je veux cloner le référentiel git://freifunk.in-kiel.de/ffki-startseite.gitdans ce référentiel avec tous les commits et branches, afin que je puisse commencer à travailler dessus dans mon propre périmètre.

Comment puis-je l'importer?


3
Une nouvelle fonctionnalité de gitlab, créez un projet puis accédez à la page du projet. Ici, vous verrez des instructions de base.
Martijn van Wezel


Les instructions de base ont disparu dans les nouvelles versions de Gitlab, est-ce que quelqu'un qui les avait copiées pourrait les copier ici?
jdevora

Réponses:


156

J'ai pu exporter entièrement mon projet avec tous les commits, branches et balises vers gitlab via les commandes suivantes exécutées localement sur mon ordinateur:

Pour illustrer mon exemple, j'utiliserai https://github.com/raveren/kint comme référentiel source que je souhaite importer dans gitlab. J'ai créé au préalable un projet vide nommé Kint(sous namespace raveren) dans gitlab et il m'a indiqué que l' url http git du projet nouvellement créé est http://gitlab.example.com/raveren/kint.git

Les commandes sont indépendantes du système d'exploitation.

Dans un nouveau répertoire:

git clone --mirror https://github.com/raveren/kint
cd kint.git
git remote add gitlab http://gitlab.example.com/raveren/kint.git
git push gitlab --mirror

Maintenant, si vous avez un référentiel cloné localement que vous souhaitez continuer à utiliser avec la nouvelle télécommande, exécutez simplement les commandes suivantes * ici:

git remote remove origin
git remote add origin http://gitlab.example.com/raveren/kint.git
git fetch --all

* Cela suppose que vous n'avez pas renommé votre maître distant origin, sinon changez les deux premières lignes pour le refléter.


1
Cela me donne l'erreur: remote: GitLab: Vous n'êtes pas autorisé à forcer le code push à une branche protégée sur ce projet. À 10.0.100.89:8496/project/james-project.git ! [télécommande rejetée] maître -> maître (crochet de pré-réception refusé)
James Hirschorn

4
J'ai dû désactiver les branches protégées dans Paramètres -> Référentiel pour que cela fonctionne.
James Hirschorn

Voir ma question pourquoi vous utiliseriez --mirror
Martijn van Wezel

108

Ajoutez le nouveau gitlab remote à votre référentiel existant et envoyez:

git remote add gitlab url-to-gitlab-repo
git push gitlab master

Je devais pousser avec force, parce que je bidouillé autour de gitlab ce déjà: git push gitlab master -f. Maintenant, j'ai tout le repo avec tous les commits dans mon nouveau GitLab;) merci
rubo77

19
N'auriez-vous pas besoin de faire un miroir? Et si vous aviez d'autres branches que master?
slhck

7
oui, en faisant comme OP le suggère, vous perdez toutes les branches (sauf master) et balises
raveren

L'importation de projet Gitlab chargera le dépôt distant à partir d'une URL lorsque vous créez le projet. Inclut des instructions pour importer des dépôts svn.
rickfoosusa

1
git remote ajouter gitlab url-to-gitlab-repo git push gitlab master --mirror
Saurabh

23

Pour conserver TOUS LES TAGS ET BRANCHES

Exécutez simplement cette commande dans un existing Git repository

cd existing_repo
git remote rename origin previous-hosts
git remote add gitlab git@git.hutber.com:hutber/kindred.com.git
git push -u gitlab --all
git push -u gitlab --tags

Ne pas copier toutes les branches
Martijn van Wezel

19

Voici les étapes fournies par le Gitlab:

cd existing_repo
git remote rename origin old-origin
git remote add origin https://gitlab.example.com/rmishra/demoapp.git
git push -u origin --all
git push -u origin --tags

Cela ne poussera que le maître et pas les autres branches
allkenang

18

Il s'agit d'un déplacement de base d'un dépôt vers un nouvel emplacement. J'utilise cette séquence tout le temps. Avec --bare aucun fichier source ne sera vu.

Ouvrez Git Bash.
Créez un clone nu du référentiel.

git clone --bare https://github.com/exampleuser/old-repository.git

Mirror-push vers le nouveau référentiel.

cd old-repository.git

git push --mirror https://github.com/exampleuser/new-repository.git

Supprimez le référentiel local temporaire que vous avez créé à l'étape 1.

cd ../
rm -rf old-repository.git

Pourquoi miroir? Voir la documentation de git: https://git-scm.com/docs/git-push

--all Poussez toutes les branches (c'est-à-dire les références sous les références / têtes /); ne peut pas être utilisé avec d'autres.

--mirror Au lieu de nommer chaque ref à pousser, spécifie que toutes les références sous refs / (qui comprend, mais sans s'y limiter, refs / heads /, refs / remotes / et refs / tags /) soient mises en miroir dans le référentiel distant. Les références locales nouvellement créées seront poussées vers l'extrémité distante, les références mises à jour localement seront mises à jour de force sur l'extrémité distante et les références supprimées seront supprimées de l'extrémité distante. Il s'agit de la valeur par défaut si l'option de configuration remote..mirror est définie.


Fonctionne également avec gitlab!
serviette le

12

rake gitlab: import: repos pourrait être une méthode plus appropriée pour l'importation en masse:

  • copiez le référentiel nu sous repos_path( /home/git/repositories/group/repo.git). Le nom du répertoire doit se terminer .gitet se trouver sous un espace de noms de groupe ou d'utilisateur.
  • courir bundle exec rake gitlab:import:repos

Le propriétaire sera le premier administrateur et un groupe sera créé s'il n'existe pas déjà.

Voir aussi: Comment importer un référentiel bare git existant dans Gitlab?


Pour ceux qui peuvent être confus, le référentiel nu est le référentiel généralement en place dans l'emplacement centralisé (par exemple github) qui ne contient PAS le dossier .git à la racine du référentiel. Ce n'est une option pratique que si vous avez accès au serveur sur lequel le référentiel nu est stocké. Sinon, la réponse de @Raveren est la meilleure option.
TinkerTenorSoftwareGuy

4
git clone --mirror git@github.com:username/repo-name.git

git remote add gitlab ssh://git@servername.com/username/repo.git

git push -f --tags gitlab refs/heads/*:refs/heads/*

Il vaut mieux le faire sur ssh, le https pourrait ne pas fonctionner


"le https pourrait ne pas fonctionner" ce n'est pas normal
Martijn van Wezel

C'est une chose en fait car les connexions HTTP peuvent être désactivées. Merci d'avoir répondu.
Micah

2

Déplacement d'un projet de GitHub vers GitLab, y compris les problèmes, les demandes d'extraction Wiki, les jalons, les étiquettes, les notes de publication et les commentaires

Il existe des instructions détaillées sur GitLab Docs:

https://docs.gitlab.com/ee/user/project/import/github.html

tl; dr

  • Assurez-vous que tous les utilisateurs de GitHub que vous souhaitez mapper aux utilisateurs de GitLab ont soit:

    • Un compte GitLab qui s'est connecté à l'aide de l'icône GitHub - ou -
    • Un compte GitLab avec une adresse e-mail qui correspond à l'adresse e-mail publique de l'utilisateur GitHub
  • Dans la barre de navigation supérieure, cliquez sur + et sélectionnez Nouveau projet.

  • Sélectionnez l'onglet Importer un projet, puis sélectionnez GitHub.
  • Sélectionnez le premier bouton pour répertorier vos référentiels GitHub. Vous êtes redirigé vers une page sur github.com pour autoriser l'application GitLab.
  • Cliquez sur Autoriser gitlabhq. Vous êtes redirigé vers la page d'importation de GitLab et tous vos référentiels GitHub sont répertoriés.
  • Continuez à sélectionner les référentiels à importer.

Mais veuillez lire la page GitLab Docs pour les détails et les crochets!

(ce n'est pas beaucoup)


1

Gitlab est un peu bogué sur cette fonctionnalité. Vous pouvez perdre beaucoup de temps à faire du dépannage, surtout si votre projet est important.

La meilleure solution serait d'utiliser l'outil de création / importation, n'oubliez pas de mettre votre nom d'utilisateur et votre mot de passe, sinon cela n'importera rien du tout.

Suivez mes captures d'écran

entrez la description de l'image ici

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.