2013-02-09 10 views
13

AFAIK, git push --tag przesyła wszystkie tagi pod pozycją refs/tags do zdalnego. Chcę wiedzieć, czy istnieje sposób w git, aby tylko wypchnąć kilka tagów pasujących do symbolu wieloznacznego lub wyrażenia regularnego?git: tylko pchanie określonych znaczników

Na przykład moje repozytorium ma tag v1.0, v1.1, v2.0 i v2.1. Chcę tylko nacisnąć v2.*. Próbowałem

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

i got błąd

śmiertelne. Remote część refspec nie jest poprawną nazwą w odn/tagów/v2 *

Oczywiście, zawsze mogę zrobić

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

Ale to nie pachnie gitarą.

Odpowiedz

14
git tag | grep '^v2\.' | xargs --no-run-if-empty git push <repo> 
  • .git nie może być katalog, to nie może być tam w ogóle. W submodulach znajduje się plik wskazujący na repozytorium root. Lub możesz ustawić GIT_DIR w innym miejscu.
  • Gdy nie ma tagów pasujących do Twoich kryteriów, nie chcesz tego robić.
+1

Co zrobić, jeśli istnieje lokalny oddział o nazwie "v2.0"? W jaki sposób 'git push' rozwiązuje niejednoznaczne nazwy? –

+0

To jest zły pomysł, aby mieć tagi i gałęzie o tej samej nazwie. Git nie radzi sobie tak dobrze. Użyj 'v2.0' dla znaczników i czegoś podobnego' 'stable-2.x' dla gałęzi. Przykład: http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary –

+2

Zobacz ['gitrevisions'] (http://www.kernel.org/ pub/software/scm/git/docs/gitrevisions.html) ("Kiedy jest niejednoznaczny, jest ujednoznaczniany przez przyjęcie pierwszego dopasowania w poniższych zasadach"). – Joe