Jak ustawić gałąź nadrzędną, aby wypychała gałąź lokalną w magit?


11

Z tego, co pamiętam, jeśli pracuję nad gałęzią, np. my-feature-branchKiedyś mogłem to zrobić z magit-statusmenu za pomocą P P, a następnie wybrałem zdalną gałąź z listy, która miała origin/my-feature-branchna 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-upstreamflagę i używając edo 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 ez pierwszej opcji, aby gałąź naciskała origin/my-feature-branch, jest to prawie zawsze to, czego chcę. Jednak nie ustawia się origin/my-feature-branchjako upstream dla mojego lokalnego oddziału. Użycie P upozwala mi wybrać gałąź nadrzędną, ale origin/my-feature-branchnie ma jej na liście i muszę pisać origin/my-feature-branchbez 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.


1
Myślę, że <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-missingzero.
Kyle Meyer

Właśnie to naprawiłem. Moja odpowiedź poniżej zakłada, że ​​to naprawić.
Tarsius

Znaleziono i naprawiono kilka innych powiązanych problemów. Prawdopodobnie będziesz musiał poczekać kilka godzin, aby Melpa nadrobiła zaległości, zanim wszystko poniżej będzie w 100% poprawne.
tarsjusz

Odpowiedzi:


11

Istnieje kilka sposobów ustawienia upstream, jednocześnie pchając lub bez pchania.

Jeśli magit-push-current-set-remote-if-missingnie jest nil(domyślne), zobaczysz coś takiego:

Push feature to
 p pushRemote, after setting that
 u @{upstream}, after setting that
 e elsewhere

Aby przesłać origin/featurei ustawić jako upstream, naciśnij, ua następnie RETzaakceptuj domyślnego kandydata na zakończenie.

Jeśli magit-push-current-set-remote-if-missingtak nil, to zobaczysz to w zamian:

Push feature to
 e elsewhere

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-missingtak nil, 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ści magit-push-current-set-remote-if-missingmusisz zrestartować Emacsa, --set-upstreamaby pojawił się lub zniknął.

Wreszcie można ustawić za pomocą upstream „set powyżej (i nic innego zrobić)” polecenie: b uorigin/masterRET. 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 nazwa feature„push-remote” my-fork, wówczas naciśnięcie tego oddziału P pspowoduje wypchnięcie do my-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-remoteRET. 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:

git config --global branch.autoSetupMerge always

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 originjako push-remote. Powinieneś odpowiedzieć „tak”, chyba że masz zamiar dodać innego pilota, powiedzmy my-fork, który powinien być używany jako push-remote. Gdy dodasz nowego pilota za pomocą M ai remote.pushDefaultnie 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.pushDefaulti magit-remote-add-set-remote.pushDefault.

Inną zaawansowaną opcją jest magit-branch-prefer-remote-upstreamdomyślna wartość nil. Jeśli ustawisz go t, 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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.