2013-02-09 11 views
13

AFAIK, git push --tag schiebt alle Tags unter refs/tags zu remote. Ich möchte wissen, ob es einen Weg in Git gibt, nur einige Tags zu drücken, die einem Wildcard oder Regexp entsprechen?git: nur bestimmte Tags pushen

Zum Beispiel hat mein Repo Tag v1.0, v1.1, v2.0 und v2.1. Ich möchte nur v2.* drücken. Ich habe versucht,

git push <repo> refs/tags/v2.* 

und erhielt Fehler

fatal. Abgelegenen Teil Refspec ist kein gültiger Name in refs/tags/v2 *

Natürlich kann ich immer tun

cd .git && ls refs/tags/v2.* | xargs git push <repo> 

Aber das riecht nicht Gity.

Antwort

14
git tag | grep '^v2\.' | xargs --no-run-if-empty git push <repo> 
  • .git nicht Verzeichnis sein, es kann dort überhaupt nicht sein. Submodule haben eine Datei, die auf das Root-Repository verweist. Oder Sie können GIT_DIR auf woanders setzen.
  • Wenn keine Tags Ihren Kriterien entsprechen, möchten Sie den Push nicht durchführen.
+1

Was ist, wenn es einen lokalen Zweig namens "v2.0" gibt? Wie löst 'git push' mehrdeutige Namen auf? –

+0

Es ist keine gute Idee, Tags und Zweige mit demselben Namen zu haben. Git macht das nicht gut. Verwenden Sie "v2.0" für Tags und etwas wie "stable-2.x" für Zweige. Beispiel: http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary –

+2

Siehe ['gittrevisions'] (http://www.kernel.org/ pub/software/scm/git/docs/gitrevisons.html) ("Wenn mehrdeutig, wird eine durch die erste Übereinstimmung in den folgenden Regeln disambiguiert"). – Joe