Non sempre ci si può connettere al server git remoto originale. In alcuni casi ho avuto la necessità di portare su una macchina temporanea il repository su cui stavo lavorando.
La cosa più semplice è stata copiare la sola cartella .git per poter operare, questa cartella contiene tutti i dati del repository. Con una sola istruzione poi è possibile recuperare tutta la struttura o quasi.
$ git checkout master
Questo funziona a meraviglia su un ambiente windows, mentre su un ambiente linux occorre un comando diverso, altrimenti la directory di lavoro risulta incompleta.
$ git checkout master $ git reset --hard
Le cose semplici a volte non bastano
Ma come fare per mantenere il lavoro aggiornato, ogni volta ricopio tutta la struttura?
Poi la cancello dalla macchina di appoggio e la sostituisco con la nuova vesione? Rischiando di perdere qualche modifica.
Cerchiamo di aggirare la cosa con qualche commando di git stesso. Creo un puntamento ad una origine remota, ma la faccio puntare ad una cartella con il protocollo file://
$ git remote add usb file:///e/LavoroGIT/CartellaRepository $ git fetch usb remote: Counting objects: 2222, done. remote: Compressing objects: 100% (1690/1690), done. Rremote: Total 2052 (delteceiving objects: 89% (1827/2052), ...
Con il primo comando ho specificato dove si trova il mio repository aggiornato, ho chiamato questo path usb , essendo un ambiente Windows, la sintassi per specificare una cartella cambia dentro la shell di git. In particolare il puntamento al disco virtuale della chiavetta usb in questo caso è il seguente /e/ che sta per il disco di windows e:, dove è stata installata al chiavetta usb che stavo usando per questo esempio.
Con il secondo comando invochiamo il fetch per iniziare la sincronizzazione del nostro repository, tirando le eventuali modifiche presenti nel repository remoto usb appena definito. Se tutto funziona correttamente dovremo vedere gli opportuni messaggi di conferma nella console.
Su windows la semplicità è un optional
Non sempre le cose funzionano in modo lineare. Sopratutto quando hai a che fare con il sistema operativo Windows. La procedura che ho descritto precedentemente, ha funzionato a meraviglia un paio di volte. Poi non c’è stato verso.
Anche ripetendo gli stessi comandi, la connessione con il repository remoto usb veniva creata, ma il fetch andava in errore.
Ho provato un altro approccio senza specificare il protocollo file:// , ecco quindi i comandi che ho utilizzato in questo secondo caso:
$ git remote add chiavetta e:/LavoroGIT/CartellaRepository $ git fetch chiavetta remote: Counting objects: 5734, done. remote: Compressing objects: 100% (4164/4164), done. emote: Total 5462 (delta 4041), reused 1667 (delta 1170)
Cambiare i puntamenti al path
Può succedere che in Windows il nome del disco cambi, il riconoscimento del dispositivo esterno potrebbe cambiare o noi abbiamo cambiato chiavetta, ecco come modificare far riconoscere a git il nuovo percorso:
$ git remote set-url usb file://<path to new mount point>
Tramite questo comando andiamo a modificare la url che avevamo precedentemente definito per il path remoto usb
Ora che tutto è configurato possiamo eseguire tutti i comandi che utilizziamo di solito, compreso il push verso il percorso usb