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ś?


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.


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)

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.


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,
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.