Date de publication : 19 août 2026
Temps de lecture : 14 min
Découvrez comment migrer facilement de GitHub vers GitLab grâce à l'outil d'importation de projets de GitLab et à GitLab Duo.

Si vous envisagez de passer de GitHub à GitLab, la première question qui se pose est presque toujours la même : Quelle est la complexité de la migration ? Pour la plupart des équipes DevSecOps, la crainte d'un travail fastidieux constitue le principal obstacle qui les sépare d'une plateforme DevSecOps unifiée d'IA native.
Migrer vers GitLab n'a jamais été aussi simple. L'outil d'importation intégré de GitLab transfère automatiquement et en arrière-plan la grande majorité des données de vos projets. Par ailleurs, la conversion de votre pipeline CI/CD, une tâche qui nécessitait traditionnellement une intervention humaine, est désormais en grande partie prise en charge par GitLab Duo. GitLab Duo, notre assistant d'IA native, peut convertir les workflows GitHub Actions en pipelines GitLab CI/CD.
Dans cet article, nous vous guidons à travers l'ensemble du processus de migration.
🎯 Migrez de GitHub vers GitLab dès aujourd'hui !
L'outil d'importation GitHub intégré à GitLab est accessible directement depuis l'interface de création de projet de GitLab et s'exécute en arrière-plan, ce qui vous permet de lancer une importation et de vaquer à vos occupations. La plupart des données de votre projet sont transférées automatiquement. Un ensemble plus restreint d'éléments correspond à des options facultatives ou présente des limitations qu'il est utile de connaître à l'avance.
Le tableau ci-dessous détaille les éléments migrés et leur mode de transfert :
| Données | Statut |
|---|---|
| Dépôt, branches, tags et historique des commits Git | ✅ Automatique. Inclut les branches dupliquées pour les pull requests ouvertes. |
| Tickets | ✅ Automatique |
| Pull requests (deviennent des merge requests) | ✅ Automatique. Inclut les revues, les commentaires de revue, les suggestions, les relecteurs assignés et les informations « fusionné par ». |
| Commentaires sur les tickets et les pull requests | ✅ Automatique |
| Labels et jalons | ✅ Automatique |
| Contenu des notes de release | ✅ Automatique |
| Pages wiki | ✅ Automatique |
| Règles de protection des branches | ✅ Automatique |
| Événements liés aux tickets et aux pull requests | ✅ Automatique |
| Collaborateurs (membres) | ⚠️ Avec limitations. Option facultative (activée par défaut). Nécessite la portée read:org ; les rôles GitHub sont mappés aux rôles GitLab (voir ci-dessous). Les rôles personnalisés de GitHub Enterprise Cloud ne sont pas pris en charge et doivent être ajoutés manuellement. |
| Pièces jointes au format Markdown (dans les descriptions, les commentaires et les releases) | ⚠️ Avec limitations. Option facultative. Les pièces jointes des dépôts privés antérieures à mai 2023 ne peuvent pas être importées (limitation de GitHub) ; les importations depuis GitHub Enterprise Server ne concernent que les images et les vidéos. |
| Volumes importants de commentaires (Plus de 30 000 env.) | ⚠️ Avec limitations. Activez l'importation alternative des commentaires pour contourner les limites de l'API GitHub par ticket. Les commentaires antérieurs à 2017 peuvent être importés sous forme de fils de discussion distincts. |
| Objets Git LFS | ⚠️ Avec limitations. LFS doit être activé sur le projet de destination avant le lancement de l'importation, faute de quoi les objets sont ignorés sans avertissement. |
| Workflows GitHub Actions | 🛠️ Manuel (assisté par l'IA). Convertis en fichier .gitlab-ci.yml. GitLab Duo peut effectuer la majeure partie de ce travail à votre place. |
| Secrets → variables CI/CD | 🛠️ Manuel. Recréez les secrets sous forme de variables CI/CD (marquez-les comme masquées/protégées) avant d'exécuter les pipelines. |
| Vérifications de statut requises | 🛠️ Manuel. Recréez-les sous forme de vérifications de statut externes. |
| Organisations GitHub / regroupements | ❌ Non migré. Structurez les groupes et sous-groupes GitLab en conséquence. |
GitHub et GitLab utilisent des conventions de nommage différentes ; un mappage est donc effectué lors de la migration. Lors de l'importation des collaborateurs, les rôles GitHub sont associés aux rôles GitLab de la façon suivante :
| Rôle GitHub | Rôle GitLab |
|---|---|
| Lecture | Invité |
| Triage | Rapporteur |
| Écriture | Développeur |
| Gestion | Chargé de maintenance |
| Administration | Propriétaire |
Les prérequis se sont simplifiés au fil des années. Il n'est notamment plus nécessaire que chaque auteur GitHub dispose d'une adresse e-mail publique correspondante sur GitLab. GitLab gère désormais automatiquement l'attribution grâce au mappage des contributions des utilisateurs (GitLab 17.8 et versions ultérieures). Vous trouverez plus d'informations à ce sujet ci-dessous.
Pour importer depuis GitHub.com ou GitHub Enterprise Server vers GitLab.com ou une instance GitLab Self-Managed, vous avez besoin :
Quelques prérequis spécifiques à certaines situations :
read:org sur votre token et d'au moins un accès Écriture ou Gestion sur le projet GitHub.Auparavant, l'historique des contributions n'était correctement transféré que si l'adresse e-mail publique de chaque utilisateur GitHub correspondait à son adresse e-mail GitLab. Désormais, GitLab crée des utilisateurs fictifs pour tout auteur, assigné ou relecteur GitHub ne disposant pas de compte GitLab correspondant, et préserve leurs contributions.
Après l'importation, un propriétaire ou chargé de maintenance du groupe accède à Membres → Espaces réservés et réassigne chaque utilisateur fictif à l'utilisateur GitLab réel, qui accepte ensuite la réassignation. Vous pouvez ainsi effectuer la migration en premier et régler la question de l'attribution ultérieurement.
Trois méthodes permettent de lancer l'importation. Choisissez celle qui correspond à votre source et à votre échelle.
C'est la méthode la plus rapide pour la plupart des équipes.
Options facultatives :
| Option | Par défaut | À utiliser quand |
|---|---|---|
| Importer les collaborateurs | Activée | Vous souhaitez transférer les membres du projet avec le mappage des rôles. |
| Importer les pièces jointes Markdown | Désactivée | Vous souhaitez récupérer les images et fichiers intégrés dans les descriptions, commentaires et releases. |
| Utiliser l'importation alternative des commentaires | Désactivée | Votre projet compte ~30 000 commentaires ou plus et vous atteignez les limites de l'API GitHub. |
Si OAuth n'est pas configuré, authentifiez-vous à l'aide d'un jeton.
github.com/settings/tokens/new avec la portée repo (ajoutez read:org si vous importez des collaborateurs ou des objets LFS). Remarque : les jetons d'accès à granularité fine ne sont pas pris en charge.Pour migrer de nombreux dépôts simultanément, automatiser un transfert ou importer des dépôts publics dont vous n'êtes pas propriétaire, utilisez l'API d'importation.
curl --request POST \
--url "https://gitlab.com/api/v4/import/github" \
--header "PRIVATE-TOKEN: $GITLAB_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"personal_access_token": "<github_classic_pat>",
"repo_id": 12345678,
"target_namespace": "my-group",
"new_name": "imported-project",
"optional_stages": {
"single_endpoint_notes_import": true,
"attachments_import": true,
"collaborators_import": true
}
}'
Suivez la progression avec :
curl --header "PRIVATE-TOKEN: $GITLAB_TOKEN" \
"https://gitlab.com/api/v4/projects/<project_id>/import"
Vous aurez besoin d'un jeton d'accès personnel GitHub classique avec la portée repo et d'un jeton d'accès personnel GitLab avec la portée api.
Une fois l'importation terminée, effectuez une vérification rapide :
Une nouvelle importation crée une nouvelle copie (il n'est pas possible d'importer dans un projet existant) ; par conséquent, si quelque chose semble incorrect, supprimez le projet et relancez l'importation.
La migration ne doit pas nécessairement se faire d'un seul coup. La plupart des équipes procèdent progressivement, en conservant GitHub actif le temps de mettre en place GitLab, de valider les pipelines et de faire migrer les équipes une par une. GitLab est conçu pour coexister avec GitHub pendant cette transition, ce qui vous permet de l'adopter progressivement plutôt que de tout transférer d'un coup.
Voici les principales façons dont les deux plateformes fonctionnent en parallèle pendant la migration :
.gitlab-ci.yml à l'aide de commits réels, tandis que la source de vérité reste encore hébergée sur GitHub.Le CI/CD est l'une des étapes de la migration qui n'est pas automatique. C'est l'occasion pour vous de moderniser vos pipelines. De nombreux concepts fondamentaux s'alignent entre les deux plateformes :
| GitHub Actions | GitLab CI/CD |
|---|---|
.github/workflows/*.yml | .gitlab-ci.yml |
| Workflow | Pipeline |
| Job | Job |
| Étape dans un job | Ligne dans script: |
Déclencheurs d'événements (on:) | rules: / workflow: |
runs-on: / container: | image: et tags: du runner |
| Actions Marketplace | Composants CI/CD |
| Secrets | Variables CI/CD |
strategy.matrix | parallel.matrix |
actions/checkout | Intégré (GitLab clone automatiquement) |
actions/cache | Mot-clé cache: |
actions/upload-artifact | Mot-clé artifacts: |
Une différence clé à garder à l'esprit : dans GitLab, les étapes s'exécutent de manière séquentielle et les jobs au sein d'une étape s'exécutent en parallèle, et vous pouvez utiliser needs: pour construire un graphe orienté acyclique (DAG) explicite.
GitLab Duo Agent Platform inclut un flow Convert to GitLab CI/CD qui transforme vos workflows GitHub Actions en .gitlab-ci.yml, vous permettant ainsi de relire un brouillon plutôt que de tout réécrire de zéro.
GitLab Duo vous accompagne tout au long de la migration, pas seulement lors de la conversion :
needs: et les composants CI/CD.GitLab Duo Agentic Chat peut extraire le contexte de vos tickets, merge requests et pipelines pour répondre à vos questions directement dans la plateforme, et GitLab Duo Code Suggestions vous assiste lorsque vous modifiez le fichier .gitlab-ci.yml dans le Web IDE.
Si GitLab Duo n'est pas disponible dans votre environnement, ces mêmes conversions fonctionnent bien avec un modèle de pointe en utilisant un prompt structuré. Voici un prompt qui produit des résultats fiables :
Convertis ce workflow GitHub Actions en GitLab CI/CD. Conserve les builds matriciels, les dépendances entre jobs, les artefacts et les règles conditionnelles. Renvoie un fichier
.gitlab-ci.ymlvalide.
Quelques précautions lors de l'utilisation d'un assistant d'IA pour la migration : ne collez jamais de secrets, de jetons ou de noms d'hôtes internes ; validez toujours le YAML généré à l'aide de l'outil CI Lint de GitLab ; et traitez le résultat comme un brouillon à réviser, non comme un commit définitif.
Que GitLab Duo génère le code ou que vous l'écriviez vous-même, il est utile de visualiser la correspondance. Voici un workflow GitHub Actions typique de build et de test :
name: CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: '18' }
- run: npm install
- run: npm test
- run: npm run build
Ci-dessous l'équivalent avec GitLab CI/CD. Notez que le checkout disparaît (GitLab se charge du clonage), runs-on devient image et chaque étape devient une ligne dans script: :
stages: [test, build]
# GitLab-maintained SAST is one line away
# a nice upgrade to add during migration.
include:
- template: Jobs/SAST.gitlab-ci.yml
test:
stage: test
image: node:18
script:
- npm install
- npm test
build:
stage: build
image: node:18
script:
- npm install
- npm run build
artifacts:
paths: [dist/]
Les builds matriciels se traduisent tout aussi directement : strategy.matrix devient parallel.matrix :
test:
image: node:${NODE_VERSION}
parallel:
matrix:
- NODE_VERSION: ['16', '18', '20']
script:
- npm install
- npm test
Et les déploiements conditionnels correspondent à rules: :
deploy:
stage: deploy
script: ./deploy.sh
rules:
- if: $CI_COMMIT_BRANCH == "main"
Dès que vous effectuez un commit du fichier .gitlab-ci.yml, GitLab exécute immédiatement le pipeline.
Pour en savoir plus, consultez notre documentation sur GitLab CI/CD.
GitHub n'est pas la seule source. L'outil d'importation de GitLab prend en charge la migration depuis plusieurs autres plateformes :
Nous disposons également d'une documentation couvrant les migrations depuis :
Merci de votre attention ! La migration n'a pas à être la partie redoutée de l'adoption d'une nouvelle plateforme. GitLab transfère vos données automatiquement, et GitLab Duo prend en charge la conversion CI/CD, vous permettant ainsi de vous concentrer sur la livraison. Pour aller plus loin, consultez les liens suivants :
Commencez votre essai gratuit
de 30 jours
Aucune carte de crédit requise.
Cet article de blog vous a plu ? Vous avez des questions ou des retours ? Donnez votre avis en créant un nouveau sujet sur le forum de la communauté GitLab.
Faites-nous part de vos commentairesCommencez à développer plus rapidement dès aujourd'hui
Découvrez ce que votre équipe peut accomplir avec la plateforme d'orchestration intelligente pour le DevSecOps.