2015-12-09 9 views
33

Sto cercando di capire come usare git-lfs. Io uso un server EE gitlab.git-lfs: dove sono archiviati i file? come ottenerli?

Forse mi sono perso qualcosa, ma non sono riuscito a trovare alcuna documentazione su git-lfs oltre a tutorial molto brevi che introducono il comando "traccia" e video carini di 1 minuto.

Per esempio, aggiungo e monitorare un file tar 3.7GB in un repo, e spingerlo:

git lfs track "*.tar" 
cp <a folder>/a.tar . 
git add a.tar 
git commit -m "add a.tar" 
git push origin master 

Domanda 1: alla fine di questo processo, è stato caricato su a.tar il server gitlab? Non è chiaro come i comandi "add" e "commit" siano durati un po '(forse non abbastanza a lungo da farmi chiedere se i 3,7 GB sono stati caricati in quel periodo) ma la spinta non ha richiesto alcun tempo (una frazione di secondo).

Domanda 2: se il file è stato caricato sul server, dove? Ovviamente non nello stesso posto del repository (questo è il punto). Ho chiesto perché il mio server è stato sottoposto a backup, e ho bisogno di sapere se l'uso di git-lfs mi richiede di aggiornarlo in alcun modo.

Domanda 3: se il file non è stato caricato, significa che gli altri utenti del repository avranno il collegamento al file sulla macchina originale su cui è stato aggiunto il file? C'è un modo per cambiare questo in una posizione sul server? (Torna alla domanda 2)

Domanda 4: dopo la clonazione del pronti contro termine, infatti il ​​file completo 3.4G non è lì, "solo" un file di testo con il contenuto:

version https://git-lfs.github.com/spec/v1 
oid sha256:4bd049d85f06029d28bd94eae6da2b6eb69c0b2d25bac8c30ac1b156672c4082 
size 3771098624 

Questo è di Naturalmente fantastico e tutto il punto. Ma cosa succede se è richiesto l'accesso al file completo? come scaricarlo?

Sarei felice sia con la risposta diretta a questa domanda sia con un link verso una corretta documentazione.

risposta

20

risposta 1 Come spiegato nel this video (a 1,27), quando si preme un file tracciato da git lfs esso è stato intercettato e collocato su un server diverso, lasciando un puntatore nel repository git. Come vedi nel riferimento fornito nella domanda 4, questo ha funzionato per te.

Answer 2 Questo è un po 'più complicato. Leggendo la documentazione per git lfs smudge, abbiamo:

leggere un file puntatore Git LFS dallo standard input e scrivere i contenuti del corrispondente file di grandi dimensioni sullo standard output. Se necessario, scaricare il contenuto del file dall'endpoint Git LFS. L'argomento , se fornito, viene utilizzato solo per una barra di avanzamento.

Il git lfs endpoint si trovano dall'uscita di git lfs env. Il mio "endpoint" è una cartella sotto (ma non dentro) il mio repository, il che mi fa pensare che GitLab crei un repository git sul server nel nostro spazio account per archiviare file binari.

Detto questo, non so come faresti a sostenerlo.GitHub fornisce uno git lfs server che "non è in uno stato pronto per la produzione", quindi richiede un po 'di lavoro da parte dell'utente per configurarlo in modo tale che i file binari vengano caricati su un server amministrato. Se il backup di questi file è prioritario e non si desidera utilizzare uno dei modelli implementations (Amazon S3, ecc.), È possibile provare un altro sistema di archiviazione di file binario compatibile con git, ad esempio git-media, git-annex, git-fat, git-bigstore. ... Non ho approfondito queste opzioni, quindi non ho potuto formulare una raccomandazione.

Risposta 3 Se il file non è stato caricato usando git lfs sarebbe stato spinto utilizzando git e si avrebbe un file binario nel proprio repository git. Ma il tuo è stato caricato utilizzando git lfs come dici in Domanda 4.

Risposta 4 altri utenti del repository, dopo aver installato git lfs sulle loro macchine locali, può semplicemente digitare git lfs pull per portare nel file binario (s) che ti ha spinto utilizzando git lfs.

+0

question1: confuso, perché sul video il file viene caricato durante "git push". Dalla mia parte "git push" richiede una frazione di secondo. Non sembra caricare nulla. "git lfs push origin master" apparentemente non fa nulla. Domanda 4: "git lfs pull" mostra "Git LFS: (0 di 2 file) 0 B/3.85 GB" ma non fa nient'altro. I file non vengono scaricati. – Vince

+0

Quindi i file non vengono scaricati in un nuovo clone? Potrebbe quindi esserci qualcosa di sbagliato nella configurazione. Non so cosa dirti della spinta perché funziona come descritto nel video per me. – houtanb

+3

Non OP, ma 'git lfs pull' era quello che stavo cercando. :) Grazie! (nuovo per git-lfs) – Zack