2016-11-24 1 views
0

J'ai un dépôt auquel je voudrais ajouter de gros fichiers de données de texte. En raison de leur nombre et de leur taille (qui peut atteindre environ 100 Mo dans certains cas), je voudrais suivre ces fichiers avec git-lfs.Comment puis-je suivre les fichiers texte avec la normalisation des fins de ligne appropriée en utilisant git-lfs?

J'ai ajouté un tel fichier avec git lfs track data.txt, et changé la valeur par défaut -text (qui spécifie un fichier binaire) à text=auto dans le fichier .gitattributes (comme indiqué dans git-scm's gitattributes documentation). Cela me donne un .gitattributes qui ressemble à:

data.txt filter=lfs diff=lfs merge=lfs text=auto 

Et juste pour être sûr, je refreshed the repository. Même ainsi, il semble que le fichier est toujours suivi comme un objet binaire et, par conséquent, le filtre de conversion de fin de ligne n'est pas appliqué lors de l'extraction (ie le fichier est extrait avec les fins de ligne d'origine, il a été coché- avec). J'ai également essayé avec text=crlf (et la variante text eol=crlf) avec le même résultat. J'ai vu un certain nombre de documents et des tutoriels sur l'utilisation git-lfs mais ils semblent tous être orientés vers des fichiers binaires (tels que le suivi *.bin, images, audio files, ...)

est-il un moyen de rendre le fichier suivi en un fichier texte volumineux (et que les fins de lignes sont normalisées comme pour les fichiers texte réguliers) avec git-lfs?

J'utilise actuellement git-lfs 1.5.2, et git pour Windows 2.10.2 (version 64 bits) sur une plate-forme Windows 7, avec la configuration core.autocrlf=true.

Répondre

1

Après un peu plus la lecture de git-scm's gitattributes et quelques bricolages, j'ai pu obtenir cette fonctionnalité en définissant un filtre personnalisé basé sur git-lfs propre filtre s (que j'ai trouvé dans ~/.gitconfig) et en utilisant Jonathan Leffler 's unix-to-dos conversion with sed:

[filter "textlfs"] 
    clean = sed $'s/$/\\r/' %f | git-lfs clean 
    smudge = git-lfs smudge -- %f | sed $'s/\\r$//' 
    required = true 

qui peut ensuite être utilisé pour suivre les grands fichiers texte sur une machine Windows avec une entrée .gitattributes tels que:

data.txt filter=textlfs diff=textlfs merge=textlfs 

Cette h Cependant, les utilisateurs du référentiel doivent inclure cette définition de filtre personnalisée. Pour plus de commodité, vous pouvez include it in a custom .gitconfig in your repository (notez que ceci exige que les utilisateurs incluent manuellement la définition avec git config --local include.path ../.gitconfig). Cela devrait fonctionner pour les utilisateurs sur les plates-formes Windows, mais ne serait pas approprié pour les utilisateurs sur des plates-formes avec des fins de ligne différentes (comme Linux et Mac). Un filtre plus complexe pourrait être construit pour gérer les différentes plates-formes en utilisant quelque chose comme:

[filter "textlfs"] 
    clean = (if [ `uname -s` == "Linux" ]; then cat %f; else sed $'s/$/\\r/' %f; fi) | git-lfs clean 
    smudge = git-lfs smudge -- %f | (if [ `uname -s` == "Linux" ]; then cat; else sed $'s/\\r$//'; fi) 
    required = true 

Enfin, gardez à l'esprit que si vos fichiers texte volumineux changent habituellement de manière significative entre les mises à jour ou ils sont si grands qu'ils dépassent les limites de taille de fichier (such as GitHub's), il peut toujours être avantageux de gérer ces fichiers texte en tant que fichiers texte standard (c'est-à-dire sans git-lfs) depuis git can efficiently pack text files.