Worum Sie bitten, ist im Wesentlichen Keyword-Erweiterung. Um zu beginnen, werfen Sie einen Blick auf die Git FAQ Frage "Does git have keyword expansion?". Es heißt:
Keyword-Erweiterung wird nicht empfohlen. Die Schlüsselworterweiterung verursacht alle möglichen seltsamen Probleme und ist sowieso nicht wirklich nützlich, besonders im Kontext eines SCM. Sie können die Schlüsselwort-Erweiterung außerhalb von Git mithilfe eines benutzerdefinierten Skripts durchführen. Das Linux-Kernel-Export-Skript führt dies aus, um die Variable EXTRA_VERSION im Makefile zu setzen.
Siehe gitattributes(5), wenn Sie dies wirklich tun möchten. Wenn Ihre Übersetzung nicht reversibel ist (zB SCCS Keyword Expansion), kann dies problematisch sein. (Hinweis: die mitgelieferte $Id$-expansion setzt den 40-stelligen hexadezimalen Blob-Objektnamen in die ID; Sie können herausfinden, welche Commits diesen Blob enthalten, indem Sie ein Skript wie this verwenden.)
Siehe here for a discussion und here on how GIT may help anyway.
Also git hat etwas wie Keyword-Erweiterung, obwohl es nicht empfohlen wird. Git hat auch nicht das Konzept einer "Dateirevision" (was Ihre @version
Nummer zu sein scheint), so dass dies nicht in der Lage wäre, Ihnen genau das zu geben, wonach Sie fragen.
Sie könnten alternativ einen Hook erstellen (wahrscheinlich einen pre-receive-Hook?), Der die Version für Sie erhöht. Dies ist nur eine ausführbare Datei (also kann es eine Shell sein/Python/Perl/Ruby/was auch immer - Sie sind komfortabel - mit Skript), die automatisch ausgeführt wird, wenn Sie einen Push ausführen. Siehe die githooks man page.
Ihr Hook-Skript würde:
- Dateien identifizieren, die im Begriff sind, geändert werden.
- Von denen, finden Sie diejenigen, die das Muster enthalten
@version \d+
- Inkrementieren Sie die Version. Sie möchten den Wert im übergeordneten Commit erhöhen, nicht den Wert, der sich derzeit in der Datei befindet!
Beachten Sie, dass dies als unter dem Stichwort Expansion mindestens so schlecht ist, dass die Git FAQ gegen empfiehlt, und möglicherweise noch viel schlimmer. Dies wird wahrscheinlich zu störenden Merge-Konflikten führen. Sie könnten auch leicht mit irreführenden Versionsnummern in Ihrem Code enden, besonders wenn Sie jemals einen Bugfix zu einer älteren Version machen müssen, obwohl es wahrscheinlich auch passieren wird, wenn Sie Änderungen aus mehreren Repos/Zweigen zusammenführen (was bei den meisten ziemlich üblich ist) Git Workflows), wenn Sie nicht vorsichtig sind.
Siehe auch http://stackoverflow.com/questions/1127177/to-put-the-prefix-revision-number-to-codes-by-git-svn – VonC