Question

J'ai quelques applications Rails et j'utilise Git comme le système de contrôle de version. Je l'utilise soit GitHub ou Beanstalk comme les hôtes du référentiel.

Ce que je suis en train de est assez simple en théorie. montrent une certaine façon le dernier commettras numéro d'identification (hash?) dans le pied de page de l'application Web. Alors que quand je suis à la recherche à l'application web que je peux vérifier qu'il est engagé et déployé correctement.

Je peux imaginer, il y a deux méthodes pour lutter contre cela. La première serait une caractéristique possible de Git qui permet la sortie du commettras ID. La seconde serait un crochet de bande post-commit (à la fois Beanstalk et GitHub permettent).

Quelqu'un at-il jamais trouvé une façon de faire, ou quelque chose de similaire?

Merci,

Danny

Était-ce utile?

La solution

D'abord, une précision: crochet post-commit ne peut pas ajouter commit-id fichier une livraison, car engager id depends COMMIT de l'arbre supérieur (représentant le répertoire haut), id arbre haut à son tour dépend ids de ses membres, et id d'un fichier dépend de son contenu ... et ce contenu est d'inclure id commettre. Pas possible.

Mais nous allons jeter un oeil à différentes solutions:

en direct, les scripts côté serveur

Si votre application Web est déployée en direct depuis le dépôt git non-nu (je l'espère, vous savez ce que vous faites WRT. Poussant dans un dépôt non-nu, ce référentiel avec la caisse / arbre de travail), votre application web peut vérifier HEAD en utilisant git rev-parse HEAD (donne SHA-1 de validation), ou mieux git describe --dirty (l'option --dirty ferait chaîne retournée contenir des informations que vous avez des changements uncomitted dans la zone de travail), ou git describe --always HEAD.

git rev-parse HEAD donne quelque chose comme 7611062b4ba6d1ebc4cf3e63c11204a4f5057660, alors que git describe --dirty donne quelque chose comme v1.7.3.2-95-g7611062 (ce qui signifie commettre avec SHA-1 abrégé de de 7611062, 95 commits commettent après avec le tag « v1.7.3.2 »), mais cela dépend de vous libère de marquage utilisant annotées tags.

Une variante de ce serait d'avoir une application Web pour vérifier HEAD du référentiel qui est un autre endroit sur le même système de fichiers, par exemple avec git --git-dir=/path/to/.git describe HEAD.

Sidenote: si vous utilisez Ruby, vous voulez probablement utiliser grain bibliothèque. L'équivalent de la version git rev-parse HEAD serait probablement (non testé!):

require 'grit'
include Grit

repo = Repo.new("/var/git/app.git")
head = repo.commits('HEAD', 1)

app_version = head.id

en direct, les fichiers statiques servi de git checkout

Modifier 2010-10-23 13:33 ajouté la section +0000 Si vous servez vos fichiers de votre commande (worktree) du dépôt git non-nu (pas votre situation), vous pouvez utiliser commandes 'bavure' et 'propres' de filter gitattribute pour effectuer CVS comme extension mot-clé sur la caisse / checkin.

Dans le fichier .gitattributes vous définirait les fichiers sur lesquels l'attribut filter doit agir:

*.rb filter=commitid

Définir le filtre dans le fichier de configuration git (par exemple dans .git/config), par exemple

[filter "commitid"]
        smudge = sed -e "s/\$Revision: ?\$/\$Revision: $(git rev-parse HEAD)\$/1"
        clean =  sed -e "s/\$Revision: ?[^$]*\$/\$Revision: \$/1"

Le filtre smudge remplacerait '$ Revision: $' par exemple « $ Révision: v1.7.3.2-95-g7611062 » sur la caisse (ce qui signifie que cochés outfiles contiendrait ce CVS comme mot-clé) élargi. Le filtre clean supprimerait l'expansion lors du stockage de contenu de fichiers dans la base de données d'objet dans le dépôt git (GIT); sinon vous auriez des problèmes avec le fichier comparant etc.

Déployé avec l'utilisation de git archive

Si vous déployez à la place de votre application web, il ne réside pas dans le dépôt direct (qui a ses bizarreries WRT. Poussant en elle, et qui présente des inconvénients possibles de sécurité), et que vous utilisez quelque part de git archive (par exemple application zip télécharger sur votre site d'hébergement), vous pouvez utiliser substitution de mots clés .

Vous devez d'abord dire Git que vous voulez des mots-clés dans un fichier remplacé par git archive . Vous faites cela en définissant export-subst pour le fichier donné, par exemple en ajoutant au fichier .gitattributes

*.rb export-subst

et puis en ajoutant à votre fichier qui contient / pied de page génère par exemple

$Format:%H$

qui sera remplacé par hachage engagement (voir la description pretty-formats par exemple dans Info-git manpage).


Déployé, en utilisant un script de déploiement

Si vous utilisez une sorte de script / mécanisme script pour déployer votre application Web, vous devez suivre Jefromi conseil d'avoir votre script deploy intégrer des informations de version.

Vous auriez à demander à quelqu'un d'autre comment configurer Capistrano (en supposant que vous l'utilisez pour le déploiement) post: déploiement remplacer '@@ VERSION @@' espace réservé dans votre fichier 'app.rb' avec un résultat de git describe --always HEAD ... projet Git Makefile noreferrer utilisations sed pour cette

Autres conseils

Je crois que ce que vous allez finir par vouloir faire est, comme une partie de votre processus de « construction » (déploiement, votre cas?), Stocker la sortie de git rev-parse HEAD ou git describe HEAD (mieux, en supposant que les versions de tag) dans un fichier. Votre application peut alors afficher le contenu du fichier. Le hachage ne peut pas commettre jamais fait partie de tout contenu chenillé (le hachage du commettras dépend du contenu suivi). Bien sûr, si votre application est en cours d'exécution d'un repo, vous pouvez simplement exécuter la commande à partir de l'application, mais il est beaucoup plus élégante de le faire juste une fois.

Ceci est l'approche adoptée par git lui-même, par la voie. Il a une script shell Teeny qui dépotoirs essentiellement la production de git describe à GIT-VERSION-FILE, qui est ensuite compilé pour fournir les informations de version.

Si tout va bien je n'ai pas mal compris votre situation - je suis un peu confus en vous disant « une caractéristique possible de Git qui permet la sortie du commit ID ». Ceci est une capacité très basique de git.

Tout d'abord, la réponse à votre question, exécutez la commande suivante dans votre script Ruby:

`git log -n1 | head -1`.split.last

Deuxièmement: Que voulez-vous dire que vous utilisez beanstalk comme hôte du référentiel? Est Beanstalk pas un serveur de mise en attente?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top