Chcę git push origin
automatycznie ustawić odniesienie nadrzędne, gdy po raz pierwszy wypycham gałąź utworzoną lokalnie.
Wiem o tym git push -u
, ale nie chcę myśleć o tym, czy użyłem -u
wcześniej lub w inny sposób ustawiłem odniesienie nadrzędne. Innymi słowy, chcę git push
automatycznie mieć wpływ git push -u
na każde wypchnięcie gałęzi, która nie ma jeszcze upstream.
czy to możliwe? Jeśli wymaga aliasu lub skryptu narzędziowego, w porządku.
push.default
ibranch.<name>.merge
w git-config (1) ?push.default
ustawionycurrent
- to w jaki sposób mogę to powiedziećgit push origin
bez refspec lub prąd. Ale to nie pomaga w automatycznym ustawianiu upstream.Odpowiedzi:
Możesz to skonfigurować za
git config
pomocągit config --global push.default current
.Dokumenty: https://git-scm.com/docs/git-config/#Documentation/git-config.txt-pushdefault
źródło
git push origin
bez refspec lub upstream. Ale to nie pomaga w automatycznym ustawianiu upstream.push
, np. Tylko jeden programista jest w swoim oddziale, który edytuje tylko jedną kopię repozytorium.Ponieważ nie sądzę, aby było to możliwe przy użyciu git config, oto co możesz zrobić w bash:
Jeśli bieżąca gałąź ma zdalną gałąź śledzenia, wywołuje w
git push
przeciwnym raziegit push -u
źródło
git config --global push.default current
.push.default=current
tworzy tylko oddział w zdalnym repozytorium o tej samej nazwie co oddział lokalny, ale nie ustawia lokalnego oddziału do śledzenia zdalnego. Nie wiem, dlaczego tak jest, ale warto o tym pamiętać.Uwaga: fakt, że nowa domyślna polityka "
simple
" wypychania polega na odgałęzieniu posiadającym gałąź upstream oznacza, że:ustawienie gałęzi upstream jest postrzegane jako krok dobrowolny, a nie ukryty automatyczny
Więc budowanie z mechanicalfish „s odpowiedzi , można zdefiniować alias, z odpowiednimi cudzysłowach (
"
) uciekł (\"
):Sc0ttyD proponuje w komentarzach następujący alias:
W wielu wierszach:
źródło
-u
istnieje ta jawna opcja i dlaczego nie ma konfiguracji umożliwiającej automatyczne ustawienie tej opcji (stąd alias).alias gpu='[[ -z $(git config "branch.$(git symbolic-ref --short HEAD).merge") ]] && git push -u origin $(git symbolic-ref --short HEAD) || git push'
Miałem ten sam problem. Znalazłem ten alias (.gitconfig)
[alias] track = "!git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD`"
Użycie:
git track
raz na nowy oddział (obecnie wyrejestrowany). Następnie pchnij jak zwykle :)źródło
Odpowiedzi @VonC i @Frexuz są pomocne, ale oba ich rozwiązania powodują dla mnie błąd. Korzystając z obu odpowiedzi, zebrałem razem coś, co działa dla mnie:
Powoduje to wykonanie
git push -u origin $BRANCHNAME
lubgit push
, w zależności od tego, czy jego nadrzędny (propertybranch.$BRANCHNAME.merge
zdefiniowano ).Wprowadzenie tego aliasu w wierszu poleceń będzie wymagało kodów ucieczki, więc prawdopodobnie najłatwiej jest użyć edytora do wstawienia do odpowiedniego pliku (
$HOME/.gitconfig
(globalny),.git/config
(lokalny) lub/etc/gitconfig
(system))źródło
git config --global -e
Rozwiązałem ten problem za pomocą tego prostego skryptu Bash. Nie będzie działać na istniejących gałęziach, ale jeśli utworzysz wszystkie swoje gałęzie za pomocą tej funkcji, zawsze będziesz mieć automatycznie ustawioną gałąź nadrzędną.
$ 1 reprezentuje pierwszy argument, po którym przekazujesz,
con
więc wygląda to tak, jak robisz:... robiąc to po prostu:
źródło
Krótka odpowiedź
Jeśli faktycznie lubisz być wyraźny i korzystasz z
-u
opcji, gdy jest to konieczne, ale po prostu nie chcesz wpisywać całości:Następnie możesz użyć następującego aliasu:
I po prostu wpisz:
Długa odpowiedź
Zazwyczaj potrzeba
-u
(shorthand for--set-upstream
) występuje, gdy właśnie utworzyliśmy nową gałąź lokalną i zatwierdzenie, a chcemy wypchnąć to w górę. Zdalne repozytorium nie ma jeszcze nowej gałęzi, więc musimy powiedzieć gitowi, aby utworzył i śledził zdalną gałąź przed wypchnięciem zatwierdzenia. Jest to konieczne tylko przy pierwszym pchnięciu gałęzi. Oto typowy scenariusz:Osobiście lubię potrzebę wyraźnego wyrażenia się
git push -u
podczas tworzenia zdalnego oddziału: jest to dość znacząca operacja, udostępniająca światu zupełnie nową gałąź.Jednak nienawidzę tego, że musimy wyraźnie pisać
git push -u origin foo
. Nie tylko jest to trudne do wpisania, ale co ważniejsze, jest dość podatne na błędy! Podczas wpisywania nazwy oddziału łatwo jest popełnić błąd, a nowy oddział zdalny nie będzie miał takiej samej nazwy jak oddział lokalny! W większości przypadków naprawdę chcesz, aby repozytorium zewnętrzne byłoorigin
, a gałąź nadrzędna miała taką samą nazwę jak gałąź lokalna.Dlatego używam w moim aliasie
.gitconfig
, który jest podzbiorem doskonałej odpowiedzi udzielonej przez Marka :Teraz możemy wykonać następujące czynności, które nadal są jawne, ale mniej podatne na błędy:
źródło
Po prostu:
źródło
git push -u
, ale…”. Więc to nie odpowiada na pytanie.Jeśli chcesz używać wbudowanych funkcji git tylko przy mniejszym możliwym naciśnięciu klawisza, po prostu wpisz:
$ git push -u o
tabH
taba autouzupełnianie da ci
$ git push -u origin HEAD
Aby włączyć autocomplate na OSX, skonfiguruj
~/.git-completition.bash
plik z tą zawartością i dodaj następujące wiersze do~/.bash_profile
pliku i zrestartuj terminal:Wpływa również na wbudowane terminale, takie jak ten w vscode itp.
źródło
git-completition.bash
i dodałem do mojej odpowiedzi.Zrobiłem rozszerzenie git z przydatnymi skryptami, w tym ten:
https://github.com/jvenezia/git-line
źródło
Jeśli z jakiegokolwiek powodu żadna z pozostałych odpowiedzi nie działa dla Ciebie, możesz zastąpić
git push
tę funkcję bash, aby automatycznie ponownie wysłać żądanie push z poprawnymi flagami, gdy jest to konieczne.gitpush() { git push -v 2>&1 | # perform push command, pipe all output tee /dev/tty | # keep output on screen and pipe it forward ( cmd=$(sed -n "s/^.*\(git push --set-upstream origin .*\)$/\1/p"); [[ -n "${cmd// }" ]] && (echo "> $cmd"; eval $cmd); ) # if we get output that matches the command to perform, execute it }
Będziesz poświęcał część postępu w wynikach wypychania, ale poza tym wszystko działa zgodnie z oczekiwaniami.
Osobiście będę korzystał z odpowiedzi JT Jobe .
źródło