Z tego, co pamiętam, jeśli pracuję nad gałęzią, np. my-feature-branch
Kiedyś mogłem to zrobić z magit-status
menu za pomocą P P
, a następnie wybrałem zdalną gałąź z listy, która miała origin/my-feature-branch
na górze. To działało pięknie.
Ostatnio, podczas tej dyskusji , mogłem zrobić coś podobnego P -u e
(otwierając magit-push-popup
, ustawiając --set-upstream
flagę i używając e
do innych celów), co podobnie pozwoliłoby mi wybierać z listy gałęzi zaczynających się od origin/my-feature-branch
. To również działało dobrze dla mnie. Jednak ostatnio to już nie działa i nie byłem w stanie wymyślić najlepszego sposobu na utworzenie odgałęzienia.
Kiedy korzystam P e
z pierwszej opcji, aby gałąź naciskała origin/my-feature-branch
, jest to prawie zawsze to, czego chcę. Jednak nie ustawia się origin/my-feature-branch
jako upstream dla mojego lokalnego oddziału. Użycie P u
pozwala mi wybrać gałąź nadrzędną, ale origin/my-feature-branch
nie ma jej na liście i muszę pisać origin/my-feature-branch
bez uzupełniania tabulatorów (wiem, że nie jest to trudne, ale jest podatne na błędy użytkownika i jest wolniejsze niż wiersz poleceń).
Czy to jedyny sposób, aby ustawić teraz gałąź upstream, czy coś mi brakuje? Przejrzałem inne dyskusje i dokumentację związaną z tym problemem, ale wszystkie znalezione źródła wydają się nieaktualne.
<remote>/<branch>
część została przypadkowo pominięta w wierszu polecenia (zobacz ten komentarz ). W międzyczasie możesz ustawićmagit-push-current-set-remote-if-missing
zero.Odpowiedzi:
Istnieje kilka sposobów ustawienia upstream, jednocześnie pchając lub bez pchania.
Jeśli
magit-push-current-set-remote-if-missing
nie jestnil
(domyślne), zobaczysz coś takiego:Aby przesłać
origin/feature
i ustawić jako upstream, naciśnij, ua następnie RETzaakceptuj domyślnego kandydata na zakończenie.Jeśli
magit-push-current-set-remote-if-missing
taknil
, to zobaczysz to w zamian:Jeśli pteraz nacisnąłeś, powiedziano by Ci, że upstream nie jest skonfigurowany (co oznacza, że nie możesz pchać do upstream, jeśli nie ma upstream).
Ale jeśli
magit-push-current-set-remote-if-missing
taknil
, to lista przełączników byłaby dostępna--set-upstream
, więc możesz używać P - u ptak, jak jesteś przyzwyczajony (z wyjątkiem tego, że drugie p jest małe). Jest jednak jedna komplikacja: po zmianie wartościmagit-push-current-set-remote-if-missing
musisz zrestartować Emacsa,--set-upstream
aby pojawił się lub zniknął.Wreszcie można ustawić za pomocą upstream „set powyżej (i nic innego zrobić)” polecenie: b u
origin/master
RET. Zauważ, że gdy zastosujesz to podejście, możesz wybrać tylko gałąź, która już istnieje.Ale byłoby lepiej skonfigurować push-remote i push do tego. Aby dowiedzieć się więcej o push-remote i tym, jak różni się on od upstream, zobacz węzeł rozgałęzienia w podręczniku informacyjnym (wersja internetowa nie została jeszcze zaktualizowana).
Zasadniczo gałąź nadrzędna to gałąź, w którą twoja gałąź funkcji zostanie ostatecznie scalona (przez scalenie lub zmianę, a nie przez wypychanie)
origin/master
. A push-remote to miejsce, do którego przesuwasz swoje gałęzie funkcji, wciąż nad nimi pracując, lub aby ktoś inny mógł je scalić. Jeśli nazwa lokalnego oddziału to nazwafeature
„push-remote”my-fork
, wówczas naciśnięcie tego oddziału P pspowoduje wypchnięcie domy-fork/feature
. („Push-to-branch” nie może być skonfigurowany, nazwa gałęzi na push-remote jest zawsze taka sama jak nazwa lokalna).Tak więc, podczas gdy twoje pytanie brzmiało mniej więcej tak: „w jaki sposób mogę przepchnąć w górę, jednocześnie konfigurując w górę”, moim zaleceniem jest, aby w ogóle nie przepychać w górę, ale zamiast tego wcisnąć pilota.
Pod warunkiem, że nie zmieniłeś wartości
magit-push-current-set-remote-if-missing
, możesz skonfigurować push-remote za pomocą P psome-remote
RET. Ponieważ jednak prawdopodobnie wypychasz wszystkie gałęzie funkcji do tego samego pilota, lepiej jest ustawić push-remote raz dla wszystkich gałęzi i zrobić to z nim: ba potem, M-pdopóki nie zostanie wybrany odpowiedni pilot.Zauważ również, że zwykle nie powinno być konieczne jawne ustawienie odgałęzienia. Kiedy tworzysz nową gałąź i wybierasz gałąź zdalną jako punkt początkowy, wówczas jest ona wykorzystywana jako nadrzędna.
Niestety punktem początkowym jest zazwyczaj lokalna gałąź i w takim przypadku Git domyślnie nie używa jej jako strumienia nadrzędnego. Ale można to łatwo naprawić, uruchamiając to raz:
Wartość domyślna to
true
, co oznacza „ustaw punkt początkowy jako początkowy, pod warunkiem, że jest to gałąź zdalna ”.Nawiasem mówiąc, to samo dotyczy pilota zdalnego sterowania. To również powinno być zazwyczaj ustawiane półautomatycznie w „nowych” repozytoriach. Jeśli sklonujesz repozytorium, zostaniesz zapytany, czy chcesz używać go
origin
jako push-remote. Powinieneś odpowiedzieć „tak”, chyba że masz zamiar dodać innego pilota, powiedzmymy-fork
, który powinien być używany jako push-remote. Gdy dodasz nowego pilota za pomocą M airemote.pushDefault
nie jest on jeszcze ustawiony, zostaniesz zapytany, czy chcesz użyć nowo dodanego pilota jako pilota push.Można to skonfigurować za pomocą
magit-clone-set-remote.pushDefault
imagit-remote-add-set-remote.pushDefault
.Inną zaawansowaną opcją jest
magit-branch-prefer-remote-upstream
domyślna wartośćnil
. Jeśli ustawisz got
, a następnie wybierzesz gałąź lokalną jako punkt początkowy dla nowej gałęzi, wtedy punkt początkowy może być (zgodnie z niektórymi zasadami, patrz dokument-ciąg) zamiast sam punkt wyjścia.źródło