Frage

Ich habe ein paar Rails-Anwendungen und ich verwende Git als Versionskontrollsystem. Ich benutze entweder GitHub oder Bohnenstange als die Repository-Hosts.

Was ich versuche, ist ganz einfach in der Theorie. Irgendwie zeigt die letzte ID-Nummer (hash?) In der Fußzeile der Web-Anwendung zu begehen. So dass, wenn ich auf der Web-Anwendung suchen kann ich überprüfen, dass es verpflichtet und richtig eingesetzt werden.

kann ich mir vorstellen, gibt es zwei Methoden, um dies zu bewältigen. Die erste wäre eine mögliche Funktion von Git sein, die die Ausgabe der ID verpflichten können. Die zweite wäre ein post-commit Web-Haken (beiden Bohnenstangen und GitHub dies erlauben).

Hat jemand jemals einen Weg gefunden, dies zu tun, oder etwas ähnliches?

Danke,

Danny

War es hilfreich?

Lösung

Als erstes wird eine Klarstellung: post-commit Haken können nicht hinzufügen begehen-ID-Datei ein begehen, weil id verpflichten, hängt von commit der oberen Baum (die Top-Verzeichnis), id von oben Baum wiederum auf ids seiner Mitglieder abhängt und ID einer Datei hängt von dessen Inhalt ... und dieser Inhalt enthalten ist id zu begehen. Nicht möglich.

Aber lassen Sie uns einen Blick auf verschiedene Lösungen an:

Live, Server-Side-Scripting

Wenn Sie Ihre Web-App live aus nicht-bare Git Repository bereitgestellt wird (ich hoffe, Sie wissen, was Sie WRT tun. Einschieben in nicht-bare Repository, dh Repository mit Kasse / Arbeitsbaum), dann können Sie Ihre Web-App HEAD überprüfen mit der Funktion git rev-parse HEAD (gibt SHA-1 von commit) oder besser git describe --dirty (die --dirty Option würde String machen zurückgegeben enthalten Informationen, ob Sie uncomitted Veränderungen in den Arbeitsbereich haben) oder git describe --always HEAD.

git rev-parse HEAD gibt so etwas wie 7611062b4ba6d1ebc4cf3e63c11204a4f5057660, während git describe --dirty so etwas wie v1.7.3.2-95-g7611062 gibt (die Mittel begehen und ein verkürzter SHA-1 von 7611062, 95 Commits nach begehen Tagged ‚v1.7.3.2‘), aber es hängt von Ihnen ab Tagging Releases kommentierten Verwendung Tags.

Eine Variante wäre das Web-App haben HEAD aus dem Repository zu überprüfen, die auf dem gleichen Dateisystem irgendwo anders ist, z.B. mit git --git-dir=/path/to/.git describe HEAD.

Nebenbei bemerkt: , wenn Sie Ruby-verwenden, möchten Sie wahrscheinlich verwenden grit Bibliothek. Das Äquivalent von git rev-parse HEAD Version würde wahrscheinlich (ungetestet!) Sein:

require 'grit'
include Grit

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

app_version = head.id


Live, statische Dateien bedient von git checkout

Edit: Sektion hinzugefügt 2010-10-23 13.33 0.000
Wenn Sie Ihre Dateien aus der Kasse (worktree) von nicht-bare Git Repository (nicht Ihre Situation) dienen, können Sie 'verschmiert' und 'saubere' Befehle von filter gitattribute ausführen CVS-wie Keyword-Erweiterung auf der Kasse / Check-in.

In .gitattributes Datei würden Sie definieren Dateien auf dem filter Attribut handeln sollte:

*.rb filter=commitid

Sie definieren Filter in git config-Datei (zum Beispiel in .git/config), zum Beispiel

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

Der smudge Filter würde ersetzen '$ Revision: $' mit z.B. '$ Revision: v1.7.3.2-95-g7611062' auf der Kasse (dies bedeutet, dass Outfiles geprüft würde dieses CVS-like enthalten Schlüsselwort erweitert). Der Filter würde clean Expansions entfernen, wenn Dateiinhalte in GIT-Objektdatenbank (in GIT Repository) zu speichern; sonst würden Sie Probleme mit etc Datei verglichen werden.


Eingesetzte mit Verwendung von git archive

Wenn Sie stattdessen Ihre Web-App bereitstellen, so dass es nicht in Live-Repository befinden (das hat seine Tücken wrt. Hinein schieben, und das hat mögliche Sicherheits Nachteile), und verwenden Sie git archive irgendwo (zB Zip-App laden Sie es auf Ihrem Hosting-Website), können Sie die Verwendung von Stichwort Substitution .

machen

Zuerst müssen Sie Git sagen, dass Sie Schlüsselwörter in einer Datei, die von git archive . Sie tun das, export-subst für bestimmte Datei, zum Beispiel, indem zu .gitattributes Datei, indem

*.rb export-subst

und dann mit denen Sie Ihre Datei, die enthält / erzeugt Seitenfuß z

$Format:%H$

, die Hash durch begehen ersetzt werden (siehe recht-Formate Beschreibung zB in git-log manpage).


Eingesetzte, mit einigen Bereitstellungsskript

Wenn Sie irgendeine Art von Skript / scripted Mechanismus verwenden, um Ihren Web-App zu implementieren, sollten Sie eine href folgen <= "https://stackoverflow.com/questions/3998869/show-the-latest-commit-value-within -a-web-application / 3999656 # 3999656" > Jefromi Beratung Ihre deploy Skript mit einzubetten Versionsinformationen an.

würden Sie haben jemand anderes zu fragen, wie setzen Capistrano (unter der Annahme, dass Sie es verwenden, für die Bereitstellung) zum Beitrag: Bereitstellung ersetzen '@@ VERSION @@' Platzhalter in Ihrer app.rb 'Datei mit Ergebnis git describe --always HEAD ... Git Projekt Makefile Anwendungen für die sed

Andere Tipps

Ich glaube, was Sie wollen am Ende zu tun ist, als Teil der „build“ -Prozess (Deployment, Ihr Fall?), Speichern Sie die Ausgabe von git rev-parse HEAD oder git describe HEAD (besser, Ihnen Tag Versionen vorausgesetzt) ??in einem Datei. Ihre Anwendung kann dann den Inhalt der Datei anzuzeigen. Die Commit-Hash kann nicht immer tatsächlich Teil eines getrackten Inhalt (der Hash-Wert des Commit hängt von dem verfolgten Gehalt) betragen. Natürlich, wenn Ihre Anwendung eines Repo läuft aus, könnten Sie einfach den Befehl aus der App laufen, aber es ist viel eleganter, um es nur einmal zu tun.

Dies ist der Ansatz von git genommen selbst, übrigens. Es hat eine teeny Shell-Skript die im Grunde git describe Ausgabe GIT-VERSION-FILE Dumps, die dann in kompiliert wird die Versionsinformationen zur Verfügung zu stellen.

Hoffentlich habe ich falsch verstanden nicht Ihre Situation - ich ein wenig bin von Ihnen verwirrt sagen „eine mögliche Funktion von Git, die die Ausgabe der Commit-ID erlaubt“. Dies ist eine sehr grundlegende Fähigkeit von git.

Zuerst wird die Antwort auf Ihre Frage, führen Sie den folgenden Befehl in der Ruby-Skript:

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

Zweitens: Was meinst du damit Sie Bohnenstengel als Repository-Host verwenden? Ist das nicht ein Warteschlangenserver beanstalk?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top