git-annex existe depuis un certain temps, mais n'a jamais vraiment pris de l'ampleur.
Git LFS est plutôt jeune et est déjà pris en charge par GitHub, Bitbucket et GitLab.
Les deux outils gèrent les fichiers binaires dans les référentiels git. D'un autre côté, GitLab semble avoir remplacé git-annex par Git LFS en un an.
Ils résolvent le même problème.
Permettez-moi de commencer par le pour/le contre, puis je passerai aux différences techniques.
git-annex fonctionne en créant un lien symbolique dans votre référentiel qui est validé. Les données réelles sont stockées dans un backend séparé (S3, rsync et BEAUCOUP d'autres). Il est écrit en haskell. Puisqu'il utilise des liens symboliques, les utilisateurs de Windows sont obligés d'utiliser l'annexe d'une manière très différente, ce qui rend la courbe d'apprentissage plus élevée.
Les fichiers de pointeur sont écrits. Une API git-lfs est utilisée pour écrire les BLOBs dans lfs. Un serveur LFS spécial est requis pour cette raison. Git lfs utilise des filtres, vous n'avez donc à configurer lfs qu'une seule fois, et à nouveau lorsque vous souhaitez spécifier les types de fichiers que vous souhaitez envoyer à lfs.
Un avantage majeur de git annex est que vous pouvez choisir le fichier que vous souhaitez télécharger.
Vous savez toujours quels fichiers sont disponibles grâce aux liens symboliques.
Par exemple, supposons que vous ayez un répertoire plein de fichiers ISO. Vous pouvez lister les fichiers, puis décider lequel vous souhaitez télécharger en tapant: git annex get my_file.
Un autre avantage est que les fichiers ne sont pas dupliqués lors de votre paiement. Avec LFS, les fichiers lfs sont présents en tant qu'objets git à la fois dans .git/lfs/objects et dans votre référentiel de travail. Donc, si vous avez 20 Go de fichiers LFS, vous avez besoin de 40 Go sur votre disque. Avec git annex, les fichiers sont liés par un lien symbolique, dans ce cas, seulement 20 Go sont requis.