Va bene copiare (non clonare) un repository git usando i comandi Unix di base?


22

Sono abbastanza nuovo nell'uso di git e mi chiedevo se fosse giusto copiare un repository Git con comandi UNIX comuni (come cpo tar/ untag), piuttosto che attraverso git clone.

Sono nella situazione in cui ho un ambiente di produzione (python virtual) in cui un codice è stato estratto in git. Mi chiedo se sia una cattiva idea da una prospettiva git copiare l'intero ambiente usando un taro qualcosa del genere. Questo approccio sarebbe utile per fare una copia veloce di un codebase / ambiente.

La mia preoccupazione è che forse git clone associ un ID univoco alla copia di lavoro che potrebbe causare conflitti se esistono due copie di lavoro in cui una è stata copiata dal filesystem dall'altra.


Wow, mi trovavo in questa situazione perché avevo alcuni file sotto il controllo del codice sorgente e altri no, e avevo i permessi sui file che dovevo conservare. Sono contento che tu abbia posto questa domanda.
Joe C,

Risposte:


21

Va benissimo.

git memorizza tutta la sua storia, si impegna, ecc. sul sito - questa è una proprietà fondamentale di un DCVS.

Tecnicamente parlando, gitpuò funzionare perfettamente con i repository copiati che girano ovunque, perché il punto centrale di un DCVS è che non deve sapere cosa sta succedendo al di fuori di un determinato repository , e infatti non lo fa a meno che tu non lo dica .

Lo stesso principio si applica qui.


1
La mia comprensione è che un repository clonato conterrà un collegamento al genitore. L'uso di un comando di copia del sistema operativo non creerà quel collegamento.
Tony,

@Tony True, ma puoi rimuovere quel link usando git remote remove origin, il che impedisce a Git di usare il repository parent come upstream.
nuovo123456

2

Dovresti essere in grado di copiare l'intera directory di lavoro in qualsiasi altra parte del tuo sistema e farlo funzionare normalmente quando usi Git, Hg o SVN. Non posso commentare altri SCM.


0

Questo è un caso d'uso più insolito, ma ...

Ho visto l' repoutilità creare collegamenti simbolici nella .gitdirectory. In tal caso, quando stai eseguendo una copia, ti consigliamo di verificare i collegamenti simbolici. Per esempio:

cp -r -L <source-repo-dir> <destination-repo-dir>

0

Va bene ma se stai per condividere il tuo repository con qualcun altro, ti preghiamo di considerare quanto segue :

  • Il tuo configfile potrebbe contenere telecomandi a cui potrebbe non interessare l'altra persona.
  • La tua logscartella avrà riferimenti che potresti non voler condividere. Git è fantastico nel farti fare le cose cattive sul tuo computer fino a quando non ti senti a tuo agio con il risultato finale, e poi spingerlo sul telecomando per (occasionalmente) condividerlo. Parte di quella brutta storia potrebbe essere nel tuo reflog, quindi è meglio non condividerla IMHO.
  • Il tuo info/excludefile potrebbe ignorare alcuni file che solo tu vuoi ignorare.
  • Puoi anche avere ganci, rami e un sacco di altre cose che sono personali e preferisci non condividere ...
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.