Как использовать Magit еще эффективнее?

После нескольких часов пробного использования git с помощью оболочки я переключился на magit.

Это довольно аккуратно и эффективно: мне больше не нужно набирать «git», чтобы вызвать команду git!

Но я все же нашел один недостаток, сравнивая командную строку оболочки

Каждый раз, когда я набирал : для вызова команды git, вывод появлялся в другом окне. Мне пришлось набрать C-x o, чтобы переключиться обратно, а затем снова ввести команду git.

Есть ли лучший способ продолжать печатать и одновременно смотреть на вывод, кроме режима оболочки в emacs?

Должен ли я перепривязать вывод к другому режиму? который из? или более элегантное решение?

Большое спасибо


person sfszh    schedule 15.04.2011    source источник


Ответы (3)


Я согласен с Брайаном, что вы пытаетесь сделать, что магит не может сделать с помощью простого ключа? Вероятно, для него уже есть привязка клавиш. Если нет, я просто C-z захожу в оболочку и запускаю команду, затем набираю fg, чтобы вернуть emacs на передний план.

Изменить: мой поток выглядит следующим образом.

  1. Я начинаю рабочий день. Я набираю git diff в командной строке, чтобы посмотреть, есть ли у меня незафиксированные изменения с предыдущего дня (не забудьте включенные цвета!) Причина, по которой я делаю это в командной строке, а не в magit, заключается в том, что я еще не в emacs.
  2. Я либо открываю незафиксированные файлы в emacs emacs file1 file2, либо открываю некоторые файлы, над которыми собираюсь работать.
  3. Я кодирую до тех пор, пока не исправлю ошибку или не закончу новую функцию.
  4. В emacs я набираю C-c i, чтобы открыть окно статуса Magit.
  5. Я прокручиваю вниз до раздела «Изменения» и рядом с каждым файлом нажимаю вкладку, чтобы увидеть разницу каждого изменения. Я либо нажимаю s, чтобы применить эти изменения, либо u, чтобы отменить эти изменения.
  6. При желании я могу просмотреть код различий и выполнить те же действия s и u для поэтапного и нестадийного разделов кода. Полезно, если у меня где-то есть отладочный код и я хочу его убить.
  7. После того, как я убедился, что все мои изменения выглядят хорошо и подготовлены, я набираю c, чтобы открыть журнал magit-edit-log. Я набираю сообщение о коммите, а затем набираю C-c C-c, чтобы зафиксировать его. Затем P нажать его. Сделанный!

Обратите внимание, что это звучит как много шагов, но это быстро становится естественным, и весь процесс буквально занимает 30 секунд, чтобы я мог сравнить весь свой набор изменений, подготовить их и зафиксировать их с сообщением. Все время пребывания в Emacs. Это намного проще, чем переходить в командную строку.

Иногда при отправке через Magit возвращается ошибка, обычно вызванная новым кодом в удаленном репо, который я должен извлечь перед отправкой. В этом случае F вытащить изменения, затем P снова нажать. Честно говоря, почему-то вместо того, чтобы тянуть через магит, я вообще просто Ctrl-z в этой ситуации выпадаю в шелл, git pull и git push.

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

;; change magit diff colors                                                                                                                                                                                 
(eval-after-load 'magit                                                                                                                                                                                     
  '(progn                                                                                                                                                                                                   
     (set-face-foreground 'magit-diff-add "green3")                                                                                                                                                         
     (set-face-foreground 'magit-diff-del "red3")                                                                                                                                                           
     (when (not window-system)                                                                                                                                                                              
       (set-face-background 'magit-item-highlight "black"))))                                                                                                                                               

(add-to-list 'auto-mode-alist '("COMMIT_EDITMSG$" . diff-mode))                                                                                                                                             
(eval-after-load 'diff-mode                                                                                                                                                                                 
  '(progn                                                                                                                                                                                                   
     (set-face-foreground 'diff-added "green4")                                                                                                                                                             
     (set-face-foreground 'diff-removed "red3")))
person Mauvis Ledford    schedule 01.05.2011

Я обычно использую встроенные команды Magit для большей части своей работы, когда использую Magit, и просто использую обычный терминал, когда мне нужно сделать то, что я не могу сделать с помощью встроенных команд Magit. В Magit есть встроенные команды почти для всех моих повседневных задач; что вы регулярно используете, чего Magit не поставляет, и что вы все равно не будете делать в полноценном терминале?

person Brian Campbell    schedule 15.04.2011
comment
Эх, думаю, это из-за того, что Магит такой классный, я больше не хочу возвращаться к терминалу. Сделай все в emacs:-] спасибо - person sfszh; 16.04.2011

Совет по magit-run* решает эту проблему. Может прерывать другие вызовы magit-run*, дальше я не проверял...

(defadvice magit-run* (around stay-in-magit activate)
  (flet ((pop-to-buffer (buf &optional act rec) (display-buffer buf act)))
    ad-do-it))
person thisirs    schedule 26.11.2012