Trasferisci repository git copiando


0

Volevo trasferire molti repository git dal mio vecchio computer Windows 7 (git 2.6.3.windows.1) a quello nuovo con Ubuntu 16.04 (git 2.7.4). Dato che non tutti avevano un repository remoto, ho deciso semplicemente di copiarli. Questo dovrebbe funzionare. Tuttavia, tutti i file tracciati in tutti i repository non sono stati messi in scena. In realtà ci sono alcuni che non sono stati impegnati prima del trasferimento dei pronti contro termine, ma la maggior parte di essi è stata impegnata.

Se cerco diffil file che è stato eseguito il commit prima del trasferimento repository con un comando:

$git log -p -1 .gitignore
commit c566830cd3ffdf96556d29aee8dd1dc95d359872
Author: Pavel <mail@mail.com>
Date:   Fri May 13 18:07:25 2016 +0300

    Start

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c2535fe
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+__pycache__
+.idea
+test

restituisce il riferimento all'ultimo commit in cui è stato effettivamente eseguito il commit di questo file. Il commit nell'esempio sopra è il primo nel repository.

Quindi, per qualche motivo, git rifiuta di riconoscere i file impegnati ma li collega all'ultimo commit in cui sono stati effettivamente impegnati.

È il problema di incompatibilità di diverse versioni o piattaforme git o qualcos'altro? E come risolvere questo problema e non frenare i repository?

Risposte:


2

Questi cambiamenti effettivi? Mi sembra che Git si stia solo lamentando del fatto che gli attributi dei file sono diversi, cosa che sicuramente accadrà tra diversi sistemi operativi (perché Windows e Linux hanno file system diversi con metadati diversi).

Che ne dici di creare un clone "nudo".

SU WINDOWS

Vai in qualche cartella, ad esempio:

cd c:\mycode

Clonare localmente il repository in questa cartella utilizzando l' opzione bare , ciò significa che NULLA verrà estratto, solo metadati:

git clone --bare <path_of_your_repo>

Ora, comprimere la cartella risultante (ad esempio "c: \ mycode \ <folder> .git" ) e trasferirla manualmente su Linux.

SU LINUX

Su Linux, prima copia sulla cartella zippata da Windows e decomprimila. Ora clona in una nuova cartella, ad esempio:

mkdir ~/mynewcode
cd ~/mynewcode
git clone /<where_you_copied_and_unzipped>/<folder>.git    <--- i.e. this is the folder copied/unzipped from Windows

E ora puoi cambiare origine se vuoi eliminare la cartella Windows decompressa.

git remote set-url origin <new_origin>

OPPURE, rimuovilo del tutto:

git remote rm origin

No, questi non sono cambiamenti effettivi, quindi la tua ipotesi è probabilmente corretta. Grazie per la soluzione suggerita, sembra ragionevole. Tuttavia, non sono in grado di controllarlo proprio ora, ma quando avrò accesso al computer Windows lo controllerò e segnalerò.
DrDom,

Sì, funziona! Ho copie di repository sulla mia macchina Ubuntu, le ho clonate con l'opzione nuda e poi nuovamente clonate dai repository ottenuti. Quindi questo può essere fatto anche dopo che i repository sono stati copiati su una macchina Ubuntu di destinazione. Ovviamente ho perso informazioni sui repository remoti reali ma questo non è un grosso problema per risolverli. Grazie!
DrDom,

Sono contento che abbia aiutato. Ho letto e sperimentato modi per "scoprire" un repository esistente, in modo da non distruggere i metadati come l'origine. Sembra che possa essere fatto solo cancellando manualmente le cose e rinominando le cartelle, e non ho trovato un modo semplice per farlo (ci deve essere un comando segreto per scoprire un repository). Se qualcuno sa come, allora ridurrebbe la mia soluzione a due semplici passaggi; # 1 scopre il repository e, # 2, copia il repository nudo in un'altra macchina / posizione.
Jehad il

0

Che ne dici di spingerli su Github, quindi clonare il repository sul tuo Ubuntu? (Avrebbe commentato, ma non ho ancora 50 rappresentanti)

Se hai bisogno di aiuto, posso fornire ulteriori istruzioni.


Grazie, questa è una soluzione ovvia, ma ci sono molti repository e non tutti sono pubblici e possono essere caricati su github. La copia semplice di solito funziona, ma non in questo caso e vorrei capire perché e risolverlo.
DrDom,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.