Как не дать Мэгиту спросить, куда подтолкнуть ветку?

10

При вызове magit-push-currentс P Pпомощью буфера состояния Magit 2.1.0спрашивает меня, где нажать на ветку в первый раз, когда восходящий поток не установлен.

Как он может позволить автоматически генерировать имя, как раньше?

z1naOK9nu8iY5A
источник
2
Если вы не знаете, автоматически сгенерированное имя является одним из вариантов завершения. Итак, когда вы впервые нажимаете some-branch-nameна originпульт, вы, вероятно, можете просто напечатать, o TAB s TABи вы получите желаемое имя.
Малабарба
О, хорошо, я не знал, спасибо. Проблема в том, что у меня много веток, начинающихся с одинаковых префиксов, что не очень удобно, также я всегда ставлю удаленные ветки с тем же именем, что и локальные ветки.
z1naOK9nu8iY5A

Ответы:

8

Обновление: упомянутая ниже "push ветка" уже реализована. Для получения дополнительной информации см. Документацию о ветвлении .

Вы должны установить ветку upstream один раз. Как только вы это сделаете, это P Pподтолкнет к этому, и вы получите списки невыполненных и невыпущенных изменений в буфере состояния (если они есть).

Существуют различные способы установить ветку upstream. Вы можете использовать --set-upstreamпереключатель из толкающего всплывающего окна: P -u P. Или используйте команду , которая устанавливает вверх по течению и ничего не делает: b u.

Также Magit теперь автоматически устанавливает восходящую ветвь при создании новой ветки, при условии, что «отправной точкой» является имя ветки. Это работает для локальных и удаленных «апстримов». Но обратите внимание, что если вы выберете локальную ветвь в качестве отправной точки, то это не поможет вам в продвижении. Перенос из текущего репозитория в текущий репозиторий, очевидно, не имеет смысла и запрещен.

Поэтому, когда «восходящая» ветвь фактически является другой локальной ветвью, она P Pведет себя так, как если бы восходящая ветвь не была настроена, и ведет себя точно так же P e. То же самое в случае, если восходящий поток не настроен вообще.

Это связано с ограничением в Git: с какой-либо веткой можно связать только одну другую ветвь, и тогда эта ветка называется «восходящей веткой». Было бы лучше, если бы была хотя бы ветка «вверх по течению» и «публикация». Я намерен реализовать это в Magit в конце концов. Смотрите выпуск № 1485 .

Таким образом, если вы хотите иметь возможность использовать только что, P Pтогда ветвь «вверх по течению» должна быть, например, «origin / master», а не «master».


Я рассматриваю возможность добавления push-варианта, который всегда выполняется git pushбез каких-либо аргументов. То, что это делает, будет зависеть исключительно от конфигурации Git.

Tarsius
источник
Я получил ответвление, masterи он не установил восходящий поток. Должен ли я перейти от него, origin/masterчтобы автоматически установить исходящий поток?
z1naOK9nu8iY5A
Смотрите обновленный ответ.
Tarsius
1
Ответвление от origin/masterset origin/masteras upstream, но я бы ожидал, origin/branch-nameчто upstream.
z1naOK9nu8iY5A
Если это то, что вы хотите, то лучше всего делать это во время пуша. P -p P <... completion ...> RETОбратите внимание, что origin/branch-nameон предлагается в качестве кандидата на завершение, поэтому вам не нужно его печатать.
Tarsius
2
Это болезненно, когда вы используете запросы gitflow и pull для проверки кода с ветвью для каждой функции, потому что вы обычно нажимаете только один раз, и всегда создается удаленная ветка с тем же именем, что и у локальной ветки. Нажатие на другую именованную ветвь будет завершением обзора кода.
Барри Келли
3

Я использую следующий совет, который автоматически включается, --set-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)

В сочетании с завершением ido это позволяет открыть новую ветку P P RET:

;; NOTE: requires ido-completing-read+
(setq magit-completing-read-function #'magit-ido-completing-read)
npostavs
источник
Это так круто! Большое спасибо!
z1naOK9nu8iY5A
0

Я просто создаю новую ветвь с помощью, b cа затем редактирую .git/configфайл, чтобы он указывал на него, origin/branchа не манипулировал всеми вещами из magit 2, которые, похоже, не работают в любом случае.

Изменить:

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

к

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

Это работает, в то время как я до сих пор не нашел комбинацию клавиш в magit2, которая бы выполняла то же самое. Попытка установить пульт не работает, потому что он еще не существует в источнике.

Дэвид Н. Уэлтон
источник
1
Восходящий поток может быть установлен с помощью bu. Но это использует, git branch --set-upstream-toи, как вы знаете, Git не может установить несуществующую ветвь в качестве восходящего потока, и поэтому Magit также не может.
Tarsius
@tarsius magit 1, казалось, делал то, что мне было нужно. Я просто пытаюсь вернуть какое-то подобие этого рабочего процесса.
Дэвид Н. Уэлтон