Con la crescita esponenziale di GitHub, ci sono moltissime realtà aziendali che si stanno muovendo sempre di più nell'adottare GitHub come "nuova casa" per gli sviluppatori, migrando da sistemi esistenti, potenzialmente basati su Jenkins, BitBucket, Azure DevOps e così via.
Per quanto riguarda il repository, vediamo com'è semplice fare una migrazione se questo è già basato su Git. In questo esempio, assumiamo che il repository esista in Azure DevOps, ma il principio sarà pressochè identico anche per qualsiasi altro remote.
git clone --bare https://${{ secrets.AZURE_DEVOPS_PAT }}@{organization}.visualstudio.com/{team-project}/_git/{repository}
Il primo passaggio riguarda proprio il clone. E' fondamentale cercare di avere una copia quanto più fedele possibile di tutto quanto è stato pubblicato nel remote. Tuttavia, il comando di clone ha impostato il parametro bare, che in realtà non scarica alcun codice sorgente, ma rende la cartella dove stiamo andando ad effettuare il clone, essa stessa la directory .git in cui sono contenute tutte le informazioni sui branch, commit e così via.
A questo punto, se non l'abbiamo già fatto, possiamo creare un nuovo repository su GitHub utilizzando la CLI.
gh repo create {organization}/{repository} --private
E, solo infine, possiamo caricare il codice sorgente partendo dalla folder dove abbiamo fatto il clone.
git push --mirror https://${{ secrets.GITHUB_PAT }}@github.com/{organization}/{repository}.git
Anche in questo caso il comando è di push, come siamo già abituati a conoscere, con l'unica accortezza di passare il parametro mirror. Questo farà sì che non dovremo passare un branch specifico da caricare sulla nuova origin, ovvero GitHub, ma tutto ciò che sarà incluso nelle refs/ verrà caricato in automatico. Perciò, a migrazione fatta, ci ritroveremo non solo tutti i branch, ma anche tutti i tag, avendo una copia completa della history del repository di partenza.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Usare le collection expression per inizializzare una lista di oggetti in C#
Generare token per autenicarsi sulle API di GitHub
Generare velocemente pagine CRUD in Blazor con QuickGrid
Creare una libreria CSS universale: i bottoni
Configurare il nome della run di un workflow di GitHub in base al contesto di esecuzione
Usare una container image come runner di GitHub Actions
Utilizzare la versione generica di EntityTypeConfiguration in Entity Framework Core
Utilizzare politiche di resiliency con Azure Container App
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Eseguire le GitHub Actions offline
Esportare ed analizzare le issue di GitHub con la CLI e GraphQL
Ottenere un token di accesso per una GitHub App