2010-11-22 1 views
0

Je suis dans une position où je souhaite, lorsque j'exporte un sous-répertoire de mon référentiel git, que le hachage complet du commit en cours d'archivage soit inséré dans un fichier donné. La raison en est que j'expédie ce code (un sous-répertoire d'un référentiel trop grand pour exporter facilement) vers mon client, qui le construit ensuite (en dehors de l'environnement git), et nous voulons être en mesure de le savoir à partir des logs quelle version du code l'a généré, pour faciliter le débogage.Utilisation de l'attribut git d'exportation lors de l'exportation d'un sous-répertoire du référentiel

La solution apparaît comme si elle devrait être d'ajouter le fichier à .gitattributes avec l'attribut export-subst, et ont le jeton %H remplacé par le git archive a quand est exécuté. Je ne vois pas ce comportement, cependant.

J'ai utilisé la page a sur le livre Pro Git comme référence (voir here), mais en essayant de l'adapter pour une utilisation avec un sous-répertoire plutôt qu'avec la racine du référentiel.

Le répertoire que j'essaie d'exporter s'appelle iDevice. J'ai créé un fichier sous ce dossier appelé hash_test, qui contient le texte Last commit date: $Format:%cd$.

Lorsque je cours git archive --format=tar HEAD:iDevice/ | gzip > test.tar.gz, le fichier n'est pas modifié. Lorsque je cours git archive --format=tar HEAD | gzip > test.tar.gz le fichier est modifié.

J'ai essayé de conserver le fichier .gitattributes à la racine de mon répertoire git, ainsi que dans la racine et les sous-répertoires. J'ai essayé de référencer le fichier en tant que iDevice/hash_test et hash_test dans le fichier .gitattributes (comme je pensais que cela pourrait ressembler à un bug que j'ai vu sur kerneltrap.org en utilisant --prefix = confused la commande d'archivage - l'URL se termine/mailarchive/git/2008/4/8/1378004 que je lierais correctement mais je n'ai pas la réputation de poster plus de liens ...). Rien de tout cela n'a aidé, cependant.

Toutes les suggestions seraient appréciées!

Répondre

3

Les attributs de git-archive proviennent de l'arborescence en cours d'archivage. Cela signifie que:

  • Pour git archive ... HEAD:iDevice les attributs doivent être iDevice, ou ils ne peuvent éventuellement être vu. (Je suppose que cela est pris en charge, je ne l'ai jamais essayé.)

  • Vous devez avoir commis votre fichier gitattributes. Tout ce qui se trouve dans le workstree n'est pas pertinent, sauf si vous utilisez l'option --worktree-attributes pour git-archive.

Et une suggestion qui peut contourner tout cela: utiliser git archive ... HEAD iDevice, non git archive HEAD:iDevice. La commande prend en charge les arguments <tree-ish> <path>; pas besoin de spécifier un objet arbre directement.

+1

J'avais déjà mes .gitattributes dans le dossier iDevice, et je l'avais tout commis, mais pas de joie. Votre suggestion avec '' résolu cependant. Merci! – Rowan

Questions connexes