2010-11-03 27 views
14

Tôi có một mẫu cam kết được thiết lập cho git và tôi muốn bao gồm tên của chi nhánh hiện tại trong đó. Tôi thường thiết lập chi nhánh là id lỗi, và nó sẽ giúp tôi điền vào bản mẫu như:Bao gồm tên chi nhánh hiện tại trong mẫu cam kết

Bug : $BUG 

Làm cách nào để thay thế mẫu nhận xét git?

+0

Oh, không nhận định nó Sry :(Bạn có thể thiết lập một bí danh cho git commit, lần đầu tiên tìm nhánh hiện tại, ghi nó vào một tập tin tạm thời và gọi git cam kết với tham số --template – ZeissS

Trả lời

15

Tôi có thể chỉ cần sử dụng móc prepare-commit-msg để thêm vào tệp đó. Từ trang liên kết (được liên kết):

Móc này được gọi bởi git commit ngay sau khi chuẩn bị thông điệp tường trình mặc định và trước khi bắt đầu trình chỉnh sửa.

Phải mất từ ​​một đến ba thông số. Đầu tiên là tên của tệp chứa thông báo nhật ký cam kết. Thứ hai là nguồn của thông báo cam kết ... [tin nhắn, mẫu, hợp nhất, bí, hoặc cam kết] ...

Nếu trạng thái thoát không khác, git commit sẽ hủy bỏ.

Mục đích của móc là để chỉnh sửa các tập tin nhắn ở vị trí ...

Bạn có thể lấy chi nhánh hiện tại với git symbolic-ref HEAD.

Bạn chỉ có thể bỏ qua các mẫu hoàn toàn và có móc thêm/chèn/nối thêm tên chi nhánh. Trường hợp đơn giản nhất, phụ thêm, tập lệnh chỉ là một dòng shebang, sau đó là git symbolic-ref HEAD >> "$1". Sử dụng phương pháp yêu thích của bạn nếu bạn muốn nhúng nó - dễ đọc nhất để di chuyển bản gốc sang một bên, viết và chắp thêm, nhưng phương pháp được liên kết trong các nhận xét chắc chắn cũng hoạt động.

Nếu bạn muốn sử dụng mẫu có trình giữ chỗ, bạn chỉ có thể làm một cái gì đó như sed -i "s/Bug : \$BUG/BUG : $(git symbolic-ref HEAD)/" "$1". Tôi chắc rằng bạn có thể tưởng tượng rất nhiều biến thể khác.

Bạn có thể muốn ngăn chặn hành vi này đối với một số loại cam kết (đối số thứ hai) hoặc thậm chí chỉ bật nó nếu đối số thứ hai là "mẫu", nếu bạn đang sử dụng phương pháp thay thế boilerplate.

+0

Cảm ơn câu trả lời, nó nằm ngay trên đó. Để tham khảo, tôi đã quản lý để thêm dòng với các hướng dẫn từ http : //stackoverflow.com/questions/54365/prepend-to-a-file-one-liner-shell –

+0

@Robert Munteanu bất kỳ cơ hội nào bạn muốn đặt toàn bộ giải pháp của mình ở đây trong một câu trả lời, cho các laz y? Tôi muốn upvote nó cho chắc chắn :) Cảm ơn ... –

+1

@Yar: Cá nhân, tôi muốn có một cái gì đó có thể đọc được với một tập tin tạm thời hơn một số ma thuật mô tả tập tin mà tôi phải cố gắng để giải mã sau này. 'mv" $ 1 "" $ 1.tmp "; git symbolic-ref 2>/dev/null> "$ 1"; mèo "$ 1.tmp" >> "$ 1"; rm "$ 1.tmp "' – Cascabel

0

Chỉ cobbling với nhau các ý kiến ​​từ câu trả lời của Jefromi, tôi kết thúc với một cái gì đó như thế này. Chắc chắn nó có thể là chặt chẽ hơn (nếu tôi biết tôi đang làm gì):

tempFile='/tmp/git-commit-template' 
git config commit.template "$tempFile" 
rm $tempFile 
branch=$(git symbolic-ref HEAD|sed s#refs/heads/##) exec 3<> "$tempFile" && awk -v TEXT="[$branch]" 'BEGIN {print TEXT}{print}' "$tempFile" >&3 
git add . 
git commit -a 
1

Một giải pháp sử dụng git bí danh nhưng không có mẫu:

$ git config --global alias.com '!sh -c "bug=`git symbolic-ref HEAD|sed s#refs/heads/##`; git commit -em \"BUG: \${bug}\""' 
$ git com 
Các vấn đề liên quan