Как заставить magit pull иметь опцию rebase по умолчанию?

Недавно я начал использовать пакет magit в emacs, и он действительно полезен и удобен. Я хотел бы сделать пару настроек.

Как сделать так, чтобы magit pull всегда имел опцию перебазирования? В настоящее время он показывает переключатели, и мне нужно выбрать -r --rebase. В моем процессе разработки мы всегда перебазируем.

Я использую gtags+global для просмотра кода. После вытягивания магита было бы здорово, если бы у меня был крючок, чтобы снова восстановить gtags. Есть ли крючок после успеха git pull?


person sudurais    schedule 23.11.2013    source источник
comment
Кто-то может возразить, что вам следует изменить свой процесс разработки, чтобы почти не было необходимости слияния/перебазирования на git pull. Не работайте над общей веткой, а создавайте свои собственные ветки функций.   -  person lunaryorn    schedule 24.11.2013
comment
Обратите внимание, что в Magit 2 это встроено во все команды. Просто откройте всплывающее окно для режима, установите параметр, а затем C-x C-s, чтобы сохранить их по умолчанию.   -  person    schedule 04.04.2016


Ответы (3)


Я не знаю каких-либо настроек, специфичных для Magit, но вы можете просто соответствующим образом настроить сам git:

git config --global pull.rebase true

Я бы категорически не советовал против включать этот параметр глобально.

Как я уже сказал в своем комментарии, вам действительно следует изменить процесс разработки, чтобы не было необходимости слияния/перебазирования на git pull. Не работайте с общими ветвями, а вместо этого всегда создавайте свои собственные ветки функций для своей работы и явно объединяйте их при необходимости.

Затем вы можете явно настроить отдельные общие ветки в своем репозитории для перебазирования, например.

git config --local branch.my-fancy-feature.rebase true

Что касается хука, то для git pull нет конкретного хука. Тем не менее, нет никакого вреда в обновлении файла тегов и при других изменениях в дереве, поэтому вы можете использовать только хуки post-rewrite (для git rebase) и post-merge (для git merge).

Подробнее о такая установка.

person lunaryorn    schedule 24.11.2013
comment
спасибо за вклад. я ищу решение magit, так как я часто использую его в emacs. Об обновлении gtags я нашел это решение. github.com/rvoicilas/inotify-tools/wiki Он может обновлять файл изменен. - person sudurais; 26.11.2013
comment
Сопровождающий Magit здесь. Для этого нет специальной опции для magit, и я не думаю, что было бы хорошей идеей добавить ее. (Если мы добавим здесь опцию elisp, почему не для любой другой переменной git?). Установка этого локально с помощью git-config, как предложил @lunaryorn, является хорошим решением. В качестве альтернативы вы должны просто использовать команду rebase (R). Подобно команде слияния (m), которая по умолчанию вносит изменения из настроенной вышестоящей ветки. - person tarsius; 30.12.2013
comment
У меня есть вопрос, который, я думаю, связан. Во всплывающем окне, вызванном l(og), есть переключатель -al: All (--all). Есть ли способ сделать это по умолчанию через конфигурацию? Я смог сделать это, отредактировав функцию magit-key-mode-generate в файле magit-key-mode.el, например (регистрация '(list --graph --all)) Но я бы не хотел редактировать исходный файл. - person kaz_yos; 13.02.2014
comment
На самом деле я смог сделать это немного лучше, переопределив функцию всплывающего окна (magit-key-mode-popup-logging) в моем файле init.el. Но я думаю, что хорошо иметь переключатели для этих жестко запрограммированных (как я думаю) опций. github.com/kaz-yos/emacs/blob /master/init.el#L1879..L1887 - person kaz_yos; 13.02.2014

Этот код сделает то, что вы хотите, и упростит добавление параметров по умолчанию для дополнительных режимов:

(defun magit-key-mode--add-default-options (arguments)
  (let* ((mode (car arguments))
         (options (cadr arguments))
         (default-options (cdr (assoc mode my/magit-default-options))))
    (list mode (delete-dups (delq nil (append options default-options))))))

(setq my/magit-default-options
      `(
        (pulling "--rebase")
        ))

(advice-add 'magit-key-mode :filter-args #'magit-key-mode--add-default-options)

Примечание. Это должно быть редактирование ответа дублера, но 3 из 4 мастеров отклонили редактирование . Ни один из них даже не прикасался к Emacs.SE, и в их профилях SO или LinkedIn нет никаких упоминаний Emacs или Lisp. Очевидно, что люди, не владеющие рассматриваемым языком, не должны иметь право отклонять правки.

Я пришел сюда в поисках ответа на этот вопрос, нашел ответ doublep, улучшил его, сделав код более ясным и расширяемым, и потратил свое драгоценное время, возвращая улучшения сообществу, только для того, чтобы его застрелили люди которые даже не знают, что они делают. Каждый раз, когда это происходит (и до сих пор это происходило каждый раз), я удивляюсь, почему я трачу свое время на этот сайт.

person Community    schedule 10.03.2016

Добавьте в .emacs следующее:

(defun magit-key-mode--add-default-options (arguments)
  (if (eq (car arguments) 'pulling)
      (list 'pulling (list "--rebase"))
    arguments))
(advice-add 'magit-key-mode :filter-args #'magit-key-mode--add-default-options)
person doublep    schedule 04.05.2015