2013-01-14 18 views
7

Chciałbym użyć po prostu git push, aby wypchnąć (tylko) bieżącą gałąź do skonfigurowanego źródła. W tym celu ustawiłem git config push.default upstream, który robi dokładnie to, co trzeba.Prześlij bieżącą gałąź do Gerrit

Teraz próbowałem skonfigurować odpowiedni pilot dla Gerrit, który automatycznie przesyła do refs/for/*.

Pomysł robi to w ten sposób:

[remote "gerrit"] 
     url = ssh://host:port/repo 
     push = refs/heads/*:refs/for/* 

chciałbym wpisać git push gerrit i oczekują git push tylko bieżącego oddziału do prawidłowego ref.

Niestety teraz git próbuje pchnąć wszystkie lokalnych oddziałów do Gerrit. - Czy jest jakiś sposób, żeby powiedzieć gitowi, żeby pchnął tylko bieżącą gałąź, tak jak powyżej z push.default?

Aktualizacja:

  • Git Push może korzystać tylko z jednego refspec.
  • Jeśli w wierszu poleceń podano wyraźny refspec, to jest używany.
  • Jeśli żadna nie jest podana w linii poleceń, używana jest ta zdefiniowana za pomocą pilota.
  • Jeśli nie zostanie podany również z pilotem, wówczas zostanie uwzględniony tylko parametr push.default.

Dla Gerrit potrzebuję refspec jak "branch: refs/for/branch" z odgałęzieniem będącym bieżącą gałęzią.

Pytanie:

  • Czy istnieje wyraźny refspec równowartość co push.default = upstream robi?
  • Czy istnieje sposób skonfigurowania git, aby zwykły git push automatycznie przesuwał się do poprawnego refs/do ref?

Obecnie najlepszym sposobem, jaki znalazłem, jest zawijanie wszystkiego w osobnym skrypcie, jak sugeruje here. Ale nadal nie jestem przekonany, że nie jest to możliwe przy odpowiednim refspec.

+0

Ok. Po prostu sprawdzam różne opcje tutaj. Nauczyłem się, że 'push.default' jest brany pod uwagę tylko wtedy, gdy nie podano refspec. A jeśli dostarczysz refspec (jak 'HEAD') za pomocą wiersza poleceń, to zastąpi refspec podany za pomocą pilota. W związku z tym wystarczyłoby na "ref/heads", co nie jest tym, czego potrzebujesz. Ciekawy. – VonC

Odpowiedz

1

Zgodnie z source, Git obecnie implementuje push.default = upstream, generując wyraźny refspec zawierający wyraźne nazwy.

Wydaje się, że obecnie nie da się określić, że zachowanie przez jednego rodzajowego refspec, a niektóre skrypt (jak sugeruje here), która buduje wyraźny refspec jest jedynym sposobem na teraz.

+0

Ciekawe opinie, z pewnością bardziej dokładne niż moja (teraz usunięta) odpowiedź. +1 – VonC

-1

Możesz skonfigurować git, aby wysyłać tylko bieżącą gałąź do zdalnego repozytorium za pomocą komendy git config --global push.default current.

Inne opcje, które można przekazać do push.default są:

nothing - do not push anything. 
matching - push all matching branches. All branches having the same name in both ends are considered to be matching. This is the default. 
upstream - push the current branch to its upstream branch. 
tracking - deprecated synonym for upstream. 
current - push the current branch to a branch of the same name. 

Te konfiguracje mogą być postrzegane w komendzie git help config.

UPDATE: Jednak czytając bardziej uważnie stronę podręcznika, push.default „określa push działanie git należy podjąć, jeśli nie refspec jest podana w wierszu poleceń, nie refspec jest skonfigurowany w pilocie, a nie refspec jest dorozumiany przez którąkolwiek opcje podane w linii poleceń ". Tak więc myślę, że będziesz musiał użyć skryptu do wysłania tylko bieżącej gałęzi podczas określania refspec.

+0

Czy przeczytałeś mój komentarz powyżej przed wysłaniem? Odpowiedziałem to samo poniżej (usunięto, nie widzisz tego) i uzyskałem wartość -1;) – VonC

+0

Czy przeczytałeś to pytanie w całości? Nie, push.default jest brany pod uwagę tylko wtedy, gdy nie podano refspec, to znaczy tylko popycha do głów. – michas