# Migration d'un repo Git ## Contexte Jusqu'à présent, j'utilisais le serveur Git de mon NAS Synology. Bien que ça a été une galère à mettre en place simplement, je m'en suis lassé... En effet, utilisant souvent GitHub et GitLab, je me suis habitué au système de visualisation de ces outils. Avec Git, ce n'est pas des plus simple, j'utilisais alors le logiciel [Fork](https://git-fork.com) pour cela. J'ai donc cherché à reproduire le même fonctionnement que GitHub avec des possibilités au [CI/CD](https://www.redhat.com/fr/topics/devops/what-is-ci-cd). [Gitlab](https://docs.gitlab.com), dans sa Community Edition ("CE") est un très bon choix, mais ce logiciel est trop gourmant en ressources par rapport à mon utilisation. Mon choix c'est porté sur Gitea que j'avais déjà présenté dans [mon introduction à Docker](/tests-avec-docker/) car, en plus d'être un GitHub-like, permet d'y ajouté des fonctionnalités de CI/CD (avec [Drone](https://www.drone.io) par exemple). Une fois cela installé, j'ai souhaité migrer mes données sans perdre l'historique de Git. C'est donc ce que je vous partage ici. ## Migration Pour effectuer la migration, il faut déjà un repo initié sans contenu sur le nouveau serveur Git (chose que j'ai faite via l'interface Web de Gitea). Dans un premier temps, on va cloner notre repo dans un dossier temporaire (que vous pourrez supprimer une fois la migration finie) : ```bash git clone ssh://myuser@192.168.17.92/volume1/GitProject/MonBlog.git MonDossierTemp cd MonDossierTemp ``` On va devoir maintenant récupérer toutes les branches. Pour les lister, on utilise la commande `git branch -a`. Pour récupérer les éléments de chaque branche, on utilise la commande `git checkout` : ```bash git checkout master ``` *Dans cet exemple, on récupère donc la branche `master`.* Ensuite, on télécharge l'historique du repo (commits, fichiers et références) en local : ```bash git fetch --tags ``` On vérifie le local : ```bash git tag git branch -a ``` À partir de là, on va supprimer le lien d'origine : ```bash git remote rm origin ``` Et on ajoute le nouveau lien d'origine : ```bash git remote add origin https://mon.domaine.mu/Scrample/MonBlog.git ``` Ainsi, on push le tout dans le nouveau repo : ```bash git push origin --all ``` Et voila ! Enfin presque... ## Submodule Vous l'aurez compris en regardant les liens, cet article montre la migration de mon repo hébergeant les fichiers de ce site. Utilisant un thème Hugo en tant que sous-module, le dossier du thème était vide ! J'ai donc effectué les actions suivantes afin de récupérer ce submodule : ```bash git rm --cached .\themes\LoveIt\ rmdir .\themes\LoveIt\ git submodule add https://github.com/dillonzq/LoveIt.git themes/LoveIt ```