web-dev-qa-db-fra.com

Où sont stockés les fichiers git-lfs?

J'essaie de comprendre comment utiliser git-lfs. J'utilise un serveur gitlab EE.

Peut-être que j'ai raté quelque chose, mais je n'ai trouvé aucune documentation sur git-lfs au-delà d'un très court tutoriel présentant la commande "track" et de jolies vidéos d'une minute.

Par exemple, j'ajoute et suit un fichier tar de 3,7 Go dans un référentiel, et je le pousse:

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

Question 1: à la fin de ce processus, a.tar a-t-il été téléchargé sur le serveur gitlab? Ce n'est pas clair car les commandes "ajouter" et "valider" ont pris un certain temps (peut-être pas assez longtemps pour me permettre de me demander si les 3,7 Go ont été téléchargés pendant cette période) mais le Push n'a pas pris de temps du tout (une fraction de seconde).

Question 2: si le fichier a été téléchargé sur le serveur, où? Évidemment pas au même endroit que le repo (c'est le point). J'ai demandé parce que mon serveur était en cours de sauvegarde, et j'ai besoin de savoir si l'utilisation de git-lfs m'oblige à le mettre à jour de quelque manière que ce soit.

Question: si le fichier n'a pas été téléchargé, cela signifie-t-il que les autres utilisateurs du référentiel obtiendront le lien vers le fichier sur la machine d'origine sur laquelle le fichier a été ajouté? Existe-t-il un moyen de changer cela en un emplacement sur le serveur? (retour à la question 2)

Question 4: après le clonage du dépôt, en effet le fichier 3.4G complet n'est pas là, "juste" un fichier texte avec le contenu:

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

C'est bien sûr génial et tout l'intérêt. Mais que faire si l'accès au fichier complet est requis? comment le télécharger?

Je serais heureux avec une réponse directe à cette question ou un lien vers une documentation appropriée.

51
Vince

Réponse 1 Comme expliqué dans cette vidéo (à 1:27), lorsque vous poussez un fichier suivi par git lfs il est intercepté et placé sur un autre serveur, laissant un pointeur dans votre dépôt git. Comme vous le voyez dans la référence que vous fournissez à la question 4, cela a fonctionné pour vous.

Réponse 2 C'est un peu plus délicat. Lire la documentation de git lfs smudge, on a:

Lisez un fichier de pointeur Git LFS à partir de l'entrée standard et écrivez le contenu du grand fichier correspondant sur la sortie standard. Si nécessaire, téléchargez le contenu du fichier à partir du point de terminaison Git LFS. L'argument, s'il est fourni, n'est utilisé que pour une barre de progression.

Le git lfs le point de terminaison peut être trouvé à partir de la sortie de git lfs env. Mon "endpoint" est un dossier sous (mais pas dans) mon référentiel, ce qui me fait penser que GitLab crée un référentiel git sur le serveur dans notre espace de compte pour stocker des fichiers binaires.

Cela dit, je ne sais pas comment vous vous y prendriez. GitHub fournit un git lfs server qui n'est "pas en état de production prêt", il faudrait donc un peu de travail de votre part pour le configurer de telle sorte que vos fichiers binaires soient téléchargés sur un serveur que vous administrez. Si la sauvegarde de ces fichiers est une priorité et que vous ne souhaitez pas utiliser l'une des implémentations (Amazon S3, etc.), vous pouvez essayer un autre système de stockage de fichiers binaires qui fonctionne avec git, tel que git-media, git-annex, git-fat, git-bigstore.... Je n'ai pas examiné ces options en profondeur, je n'ai donc pas pu faire de recommandation.

Réponse 3 Si le fichier n'a pas été téléchargé à l'aide de git lfs il aurait été poussé en utilisant git et vous auriez un fichier binaire dans votre dépôt git. Mais le vôtre a été téléchargé à l'aide de git lfs comme vous le dites dans Question 4 .

Réponse 4 Autres utilisateurs de votre référentiel, après avoir installé git lfs sur leurs machines locales, peut simplement taper git lfs pull pour importer le ou les fichiers binaires que vous avez poussés à l'aide de git lfs.

35
houtanb