Jak powstrzymać Magit przed pytaniem, gdzie przesunąć gałąź?

10

Dzwoniąc za magit-push-currentpomocą P Pz bufora statusu, Magit 2.1.0pyta mnie, gdzie po raz pierwszy wcisnąć gałąź, gdy nie jest ustawiony upstream.

Jak może automatycznie generować nazwę, tak jak kiedyś?

z1naOK9nu8iY5A
źródło
2
Jeśli nie wiesz, automatycznie wygenerowana nazwa jest jedną z opcji uzupełniania. Tak więc, kiedy po raz pierwszy naciskasz some-branch-namena originpilota, prawdopodobnie możesz po prostu wpisać, o TAB s TABa otrzymasz nazwę, którą chcesz.
Malabarba
Och ok, nie wiedziałem, dziękuję. Problemem jest to, że mam wiele gałęzi zaczynających się na te same prefiksy, co nie jest bardzo przydatne, zawsze też umieszczam zdalne gałęzie o tej samej nazwie co gałęzie lokalne.
z1naOK9nu8iY5A 7.07.15

Odpowiedzi:

8

Aktualizacja: Wspomniana poniżej „gałąź wypychania” została już wdrożona. Aby uzyskać więcej informacji, zapoznaj się z dokumentacją dotyczącą rozgałęzień .

Musisz raz ustawić gałąź nadrzędną. Gdy to zrobisz, P Pnaciskasz na to, a otrzymasz listę niepustanych i nieprzypisanych zmian w buforze stanu (pod warunkiem, że są).

Istnieją różne sposoby ustawienia gałęzi upstream. Można użyć --set-upstreamprzełącznika z popup Push: P -u P. Lub użyj polecenia określający górną i robi nic innego: b u.

Również Magit automatycznie ustawia teraz gałąź odgórną podczas tworzenia nowej gałęzi, pod warunkiem, że „punktem początkowym” jest nazwa gałęzi. Działa to dla lokalnych i zdalnych „upstreams”. Pamiętaj jednak, że jeśli wybierzesz lokalny oddział jako punkt początkowy, nie pomoże ci to w przepychaniu. Przenoszenie z bieżącego repozytorium do bieżącego repozytorium oczywiście nie ma sensu i jest niedozwolone.

Kiedy więc gałąź „nadrzędna” jest w rzeczywistości inną gałęzią lokalną, P Pzachowuje się tak, jakby żadna gałąź nadrzędna nie została skonfigurowana i zachowuje się dokładnie tak samo P e. To samo dotyczy sytuacji, gdy w ogóle nie jest skonfigurowany żaden serwer.

Wynika to z ograniczenia w Git: można powiązać tylko jedną gałąź z inną gałęzią, a gałąź ta jest następnie nazywana „gałęzią nadrzędną”. Byłoby lepiej, gdyby istniał przynajmniej oddział „upstream” i „publishing”. W końcu zamierzam to zaimplementować w Magit. Zobacz numer 1485 .

Więc jeśli chcesz mieć możliwość pushowania, P Pwtedy gałąź „upstream” musi być np. „Origin / master”, a nie „master”.


Rozważam dodanie wariantu push, który zawsze działa git pushbez żadnych argumentów. To, co by to zrobiło, zależałoby wyłącznie od konfiguracji Git.

Tarsjusz
źródło
Rozgałęziałem się masteri nie ustawiłem w górę, czy może powinienem rozgałęzić się, origin/masteraby automatycznie ustawić w górę?
z1naOK9nu8iY5A
Zobacz zaktualizowaną odpowiedź.
tarsius
1
Rozgałęzienie z origin/masterzestawu origin/masterjako upstream, ale spodziewałbym się, że będę mieć origin/branch-nameupstream.
z1naOK9nu8iY5A
Jeśli tego właśnie chcesz, najlepiej to zrobić podczas wypychania. P -p P <... completion ...> RETPamiętaj, że origin/branch-namejest oferowany jako kandydat do ukończenia, więc nie musisz go wpisywać.
tarsjusz
2
Jest to bolesne, gdy używasz gitflow i ściągasz prośby o sprawdzenie kodu, z gałęzią na funkcję, ponieważ zwykle zawsze wypychasz tylko raz i zawsze tworzysz gałąź zdalną o tej samej nazwie co gałąź lokalna. Przesunięcie do innej nazwanej gałęzi byłoby końcowym przeglądem kodu.
Barry Kelly,
3

Korzystam z następujących porad, które automatycznie włączają się, --set-upstreamgdy bieżący oddział nie ma jeszcze upstream:

(defun magit-push-arguments-maybe-upstream (magit-push-popup-fun &rest args)
  "Enable --set-upstream switch if there isn't a current upstream."
  (let ((magit-push-arguments
         (if (magit-get-remote) magit-push-arguments
           (cons "--set-upstream" magit-push-arguments))))
    (apply magit-push-popup-fun args)))
(advice-add 'magit-push-popup :around #'magit-push-arguments-maybe-upstream)

W połączeniu z zakończeniem ido pozwala to na przesunięcie nowej gałęzi dzięki P P RET:

;; NOTE: requires ido-completing-read+
(setq magit-completing-read-function #'magit-ido-completing-read)
npostavs
źródło
To jest takie fajne! Dziękuję Ci bardzo!
z1naOK9nu8iY5A
0

Po prostu tworzę nową gałąź z, b ca następnie edytuję .git/configplik, aby wskazywał, origin/branchzamiast małpować wszystkie magit 2 rzeczy, co i tak wydaje się nie działać.

Zmiana:

[branch "fix_something"]
  remote = .
  merge = refs/heads/master

Do

[branch "fix_something"]
  remote = origin
  merge = refs/heads/fix_something

To działa, podczas gdy wciąż nie znalazłem kombinacji klawiszy w Magit2, która spełnia tę samą funkcję. Próba ustawienia pilota nie działa, ponieważ nie istnieje on jeszcze na początku.

David N. Welton
źródło
1
Upstream można ustawić za pomocą bu. Ale to wykorzystuje git branch --set-upstream-toi, jak wiesz, Git nie może ustawić nieistniejącej gałęzi jako nadrzędnej, więc Magit też nie może.
Tarsius
@tarsius magit 1 wydawał się robić to, czego potrzebowałem. Próbuję tylko odzyskać pozory tego przepływu pracy.
David N. Welton,