Eine Möglichkeit, einen vordefinierten Text in das Commit-Nachrichtenfenster von Magit einzufügen?


8

Wir haben die Konvention, dass jede Festschreibungsnachricht mit einer Ausgabenummer beginnt.

Ich möchte in der Lage sein, den Teil der Ausgabenummer (berechnet von einer separaten Funktion) programmgesteuert in das Festschreibungsfenster von Magit einzufügen, wenn es zum ersten Mal geöffnet wird (dh beim Drücken C C).

Wie mache ich das am besten? Wo soll man suchen?

UPDATE: Folgendes verwende ich derzeit.

(defun my-extract-branch-tag (branch-name)
  (let ((TICKET-PATTERN "\\(?:[[:alpha:]]+-\\)?\\([[:alpha:]]+-[[:digit:]]+\\)-.*"))
    (when (string-match-p TICKET-PATTERN branch-name)
       (s-upcase (replace-regexp-in-string TICKET-PATTERN "[\\1] " branch-name)))))

(defun my-git-commit-insert-branch ()
  (insert (my-extract-branch-tag (magit-get-current-branch))))

(add-hook 'git-commit-setup-hook 'my-git-commit-insert-branch)

Für einen Zweigstellennamen, wie <username>-foo-123-<explanatory part>er [FOO-123]in der ersten Zeile der Festschreibungsnachricht erzeugt wird, um eine einfache automatische Ticketverknüpfung in Jira zu ermöglichen.


Antworten:


9

Es gibt eine git-commit-setup-hook, mit der der Commit-Nachrichtenpuffer vorbereitet werden kann. Hier kommt ein kurzes Beispiel:

(defun my-git-commit-setup ()
  (insert "#123 "))

(add-hook 'git-commit-setup-hook 'my-git-commit-setup)

2

Ich bin so froh, diese ältere, aber sehr hilfreiche Antwort von @wasamasa zu finden:

Bei einem gitflow-basierten Verzweigungsmodell, (Feature-) Verzweigungen, die von Bitbucket basierend auf Jira-Problemen erstellt wurden (die immer die Form UPPERCASEALPHA-DIGITS haben), verwende ich dies, um automatisch die aktuelle Ausgabenummer einzufügen:

(let ((ISSUEKEY "[[:upper:]]+-[[:digit:]]+"))
 (when (string-match-p ISSUEKEY (magit-get-current-branch))
  (insert
   (replace-regexp-in-string
    (concat ".*?\\(" ISSUEKEY "\\).*")
    "- \\1: "
    (magit-get-current-branch)))))

2

Um die Dinge wirklich einfach zu halten, können Sie einfach magit-commitmit äquivalenten Git-Argumenten aufrufen , um dasselbe zu erreichen:

(magit-commit `("--edit" ,(format "--message=%d: " 1234)))

Das Hinzufügen dieses Befehls als Aktion zum Popup mit etwa der folgenden Funktion kann zur Optimierung Ihres Git-Workflows beitragen:

(defun my/read-issue-id ()
  "Return an issue ID default to the issue ID you are currently working on."
  ;; Or maybe completing-read w/unwrapping logic to extract the ID from a supplied list of issues...
  (read-number
   "Issue ID: "
   ;; Check your org-clock or make some REST request or something and use that as a default:
   42))

(defun my/issue-commit (issue-id)
  "Make a commit with a message starting with ISSUE-ID."
  (interactive (list (my/read-issue-id)))
  (magit-commit (append `("-e" ,(format "--message=%d: " issue-id))
                        (magit-commit-arguments))))

(magit-define-popup-action 'magit-commit-popup ?I "'Issue' commit" #'my/issue-commit)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.