Bonjour les admins,

 

Devops depuis le début d'année 2020 avec son lot de découvertes, me voici à migrer des dépots Git d'un serveur à un autre. Après moultes péripéties c'est fait. Voici la marche à suivre sous PowerShell (oui, pour l'instant je préfère encore -un peu- ce language.

L'objectif est le suivant :

migration de sours vers destination en passant par une copie locale

migration git source vers dest

Prérequis :

Vous devez avoir créé le repository de destination. Il faut ensuite aller dans Paramètres > Dépôt > Protected Branches, et enlever la protection sur Master

Vous devez disposer de la clé privée (au format OpenSSH) - la clé publique est déclarée dans votre profil git (serveur git source ET destination)

  • pour cela, avec putty Keygen, chargez puis exportez votre clé au format OpenSSH
  • Pour charger la clé avec PowerShell, en cas de soucis, effectuez les manipulations suivantes :

# démarrer le service sdsh-agent
Get-Service | select -property name,starttype | where-object { $_.name -eq "ssh-agent" }
Set-Service -Name ssh-agent -StartupType Manual
Start-Service ssh-agent
# chemin vers la clé privee OpenSSH
$key = "D:\git\ssh\macleprivee_idrsa"
# mettre les bonnes acl
icacls $key /c /t /inheritance:d
icacls $key /c /t /grant "${echo $env:username}":F
icacls $key /c /t /remove Administrator "Authenticated Users" BUILTIN\Administrators BUILTIN Everyone System Users
# verifier
icacls $key
# charger cle ssh
Ssh-Add -K $key

La marche à suivre est la suivante :

cd D:\git
# cloner le master de la source
git clone ssh://git@urlsource/project.git D:\git\project
git fetch origin
# lister les branches du projet source
git branch -a
# lister les branches rappartiées localement
* master
  remotes/origin/branch2
  remotes/origin/master
  remotes/origin/release/0.7
# rappatrier d'autres branches
git checkout -b branch2 origin/branch2
git checkout -b release/0.7 origin/release/0.7
# les autres branches sont bien rappartiées
git branch -a
  branch2
  master
* release/0.7
  remotes/origin/branch2
  remotes/origin/master
  remotes/origin/release/0.7
# ajouter l'url de destination
git remote add new-origin git@urldest/project.git
# pousser les sources vers la destination
git push --all new-origin
# pousser les tags
git push --tags new-origin
# une fois fini, virer origin et renommer new-origin en origin
git remote rm origin
git remote rename new-origin origin

Et c'est fini.

Pour ma part j'ai poussé un répertoire de 5,6 Go avec du LFS. Ca ne passait pas par transfert via https ni par export/import.