2010-09-16 11 views
8

Ha dovuto trasferire il codice (l'intera cronologia del progetto) a un altro negozio di sviluppo oggi e si chiedeva se fosse una buona idea chiudere il repository git nudo che il nostro team utilizza per la collaborazione e inviarlo semplicemente testualmente?È sicuro fare zipup con i repository `git` e consegnarli ad altre persone?

È sicuro farlo come tale?
C'è qualche dato sensibile memorizzato in una cartella .git?

risposta

11

Se si fa questo, invece di utilizzare clone o bundle allora sarete anche dando loro la directory .git/hooks, .git/config di file e pochi altri file personalizzabili. Non è comune che quei file contengano dati sensibili (lo sapresti perché lo avresti messo lì manualmente) ma potrebbero contenere impostazioni personalizzate. Ad esempio, potresti aver impostato le impostazioni di configurazione user.name e user.email in .git/config. È possibile che tu abbia scritto qualche script di hook (in .git/hooks/*) che potrebbe contenere password, ma, come ho detto, probabilmente lo sapresti già.

Tuttavia, git non memorizza alcuna password o altri dati segreti/riservati.

+2

Giusto! Il file '.git/config' può essere sensibile. +1 – VonC

4

Una soluzione simile potrebbe essere un git bundle.

Vedere Backup of github repo o Backup a Local Git Repository per ulteriori informazioni.

il .git (in bundle o compresso) non conterrà alcun dato sensibile ad eccezione di tutta la cronologia e dei file inseriti.
Vedere git - remove file from the repository ad esempio per la rimozione di dati sensibili.

Come Pat Notz menziona in his answer, un .git compresso contiene il .git/config.
Mi rendo conto che il mio contiene alcuni indirizzi di repository remoti in cui ho dovuto inserire il mio [email protected] per farli funzionare. Quindi non dovresti includere alcun metadato locale (come .git/config) perché devono essere ... locali.

7

Dai uno sguardo alla tua directory .git. Potrebbero esserci molti file ma rientrano in un numero abbastanza piccolo di gruppi regolari (dati di archivio oggetti, riferimenti, diagrammi, ecc.). Puoi separare i contenuti in due categorie principali: dati che Git potrebbe normalmente trasportare in altri repository e dati che Git normalmente non trasporterà in altri repository.

Normalmente non trasportati:

  • HEAD, FETCH_HEAD, ORIG_HEAD, MERGE_HEAD
  • config
  • description
  • hooks/
  • index
  • info/ - vari
  • logs/ - reflogs

normalmente trasportati (ad esempiovia cloni, recupera, spinge, e bundle):

  • objects/
  • packed-refs
  • refs/

Questo ultimo gruppo costituisce il negozio oggetto ei suoi punti di ingresso pubblicati. Ovviamente dovrete rivedere il contenuto della versione stessa per determinare se c'è qualcosa di sensibile in esso.

I HEAD, lo index (non presente in un repository nudo) e i riferimenti (logs/) sono tutti punti di ingresso aggiuntivi nell'archivio oggetti. Se hai effettuato una riscrittura della cronologia (ad esempio, hai recentemente cancellato alcuni file di configurazione sensibili dalla cronologia registrata), dovrai prestare particolare attenzione ai reflog (probabilmente non abilitati sulla maggior parte dei repository) e gli arbitri/originali/porzioni degli arbitri namespace.

FETCH_HEAD e config potrebbero avere gli indirizzi dei repository Git correlati.

config potrebbe avere altre informazioni sensibili.

info/ ha vari bit di informazioni; alcuni potrebbero essere sensibili (informazioni/alternative); alcuni hanno meno probabilità di essere sensibili (assumendo che il contenuto stesso sia "pulito" -info/refs, info/packs); alcuni potrebbero essere importanti per il funzionamento del repository (info/grafts). Gli eventuali strumenti aggiuntivi che stavi utilizzando (script di hook, interfacce Web, ecc.) Potrebbero memorizzare dati qui; alcuni possono essere sensibili (liste di controllo di accesso, ecc.).

Se c'è qualcosa attivo in hooks/, è necessario valutare se è necessario fornire la copia del repository (controllare anche se memorizza eventuali dati aggiuntivi in ​​qualsiasi punto del repository).

Il file description è probabilmente innocuo, ma si potrebbe anche controllare.


Se sei solo consegnare a mano il contenuto, allora probabilmente si dovrebbe semplicemente clonare un repository fresca nudo o utilizzare un fascio (git bundle come VonC describes).

Se si è responsabili della distribuzione del contenuto e del processo utilizzato per gestirlo, è necessario esaminare singolarmente ciascun bit del repository.


In generale (o in modo più “paranoico”), ci sono molti posti all'interno della gerarchia di un repository Git dove qualcuno potrebbe archiviare qualsiasi file casuale. Se vuoi essere sicuro di dare solo i dati di cui Git ha bisogno, dovresti usare un clone o un pacchetto. Se è necessario fornire alcuni dei dati "per repository" (ad esempio un gancio utilizzato per gestire il repository), è necessario clonare su un nuovo repository (utilizzare un URL file: per evitare la copia e il collegamento fisso di file di archivio oggetti esistenti) e reinstallare solo i ganci/dati necessari per adempiere ai tuoi obblighi.

+0

Bello - molti buoni dettagli. –

+0

Come dice il signore, molti dettagli. +1 – VonC

Problemi correlati