Một cách để chèn một văn bản được xác định trước vào cửa sổ thông báo cam kết của Magit?


8

Chúng tôi có một quy ước rằng mọi thông điệp cam kết bắt đầu bằng một số vấn đề.

Tôi muốn có thể chèn phần số vấn đề (được tính bởi một chức năng riêng biệt) vào cửa sổ cam kết của Magit, khi nó mở lần đầu tiên (nghĩa là khi nhấn C C).

Làm thế nào để tôi làm tốt nhất? Nhìn ở đâu?

CẬP NHẬT: Đây là những gì tôi đang sử dụng.

(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)

Đối với một tên chi nhánh như <username>-foo-123-<explanatory part>nó tạo ra [FOO-123]trong dòng đầu tiên của thông điệp cam kết, để cho phép tự động liên kết vé dễ dàng trong Jira.


Câu trả lời:


9

Có một git-commit-setup-hookcái có thể được sử dụng để chuẩn bị bộ đệm thông điệp cam kết. Đây là một ví dụ ngắn:

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

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

2

Rất vui khi tìm thấy câu trả lời cũ hơn nhưng rất hữu ích của @wasamasa:

Trên mô hình phân nhánh dựa trên gitflow, các nhánh (tính năng-) được tạo bởi Bitbucket dựa trên các vấn đề của Jira (luôn ở dạng UPPERCASEALPHA-DIGITS), tôi sử dụng điều này để tự động chèn số vấn đề hiện tại:

(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

Để giữ cho mọi thứ thực sự đơn giản, bạn chỉ cần gọi magit-commitcác đối số git tương đương để thực hiện điều tương tự:

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

Thêm lệnh đó dưới dạng một hành động vào cửa sổ bật lên bằng một cái gì đó như sau có thể giúp hợp lý hóa quy trình công việc git của bạn:

(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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.