Bạn đang tìm cách định dạng git log message một cách hiệu quả để phục vụ cho việc xử lý và phân tích sau này? Bài viết này sẽ cung cấp cho bạn một hướng dẫn toàn diện, dễ hiểu về cách sử dụng các công cụ như `git log` và `awk` để đạt được mục tiêu này. Chúng tôi sẽ đi sâu vào các tùy chọn định dạng khác nhau, cung cấp các ví dụ thực tế và giúp bạn tối ưu hóa quy trình làm việc với Git.
Trong quá trình làm việc với Git, việc trích xuất và xử lý thông tin từ lịch sử commit là một nhu cầu phổ biến. Tuy nhiên, định dạng mặc định của `git log` có thể không phù hợp cho việc này. Bạn cần một cách để định dạng message sao cho dễ dàng phân tích bằng các công cụ dòng lệnh khác như `awk` hoặc các script xử lý văn bản.
Ví dụ, bạn có thể muốn trích xuất commit hash và message để tạo báo cáo, thống kê hoặc tích hợp với các hệ thống khác. Để làm được điều này, bạn cần một định dạng message nhất quán và dễ dàng phân tách.
git log --pretty=format
và awk
Công cụ chính để định dạng git log là tùy chọn `--pretty=format` của lệnh `git log`. Tùy chọn này cho phép bạn chỉ định một chuỗi định dạng tùy chỉnh để kiểm soát đầu ra. Kết hợp với `awk`, bạn có thể thực hiện các thao tác xử lý văn bản phức tạp để có được định dạng mong muốn.
Giả sử bạn muốn định dạng git log message theo cấu trúc sau: `f0fd5dc0f5e051e75b841b3830e3a54cdf779200^^ci-488: fetch blueprint (#4741)|...` Trong đó, commit hash và message được phân tách bằng `^^` và các commit được phân tách bằng `|`.
Bạn có thể sử dụng lệnh sau:
git log --pretty=format:'%H %s' | awk '{sub(/ /,"^^"); printf "%s%s", sep, $0; sep="|"}'
**Giải thích:**
git log --pretty=format:'%H %s'
: Lệnh này trích xuất commit hash (`%H`) và message (`%s`) từ git log.awk '{sub(/ /,"^^"); printf "%s%s", sep, $0; sep="|"}'
: Đoạn script `awk` này thực hiện các bước sau:
sub(/ /,"^^")
: Thay thế khoảng trắng đầu tiên trong mỗi dòng bằng `^^`.printf "%s%s", sep, $0
: In ra dòng hiện tại, được phân tách bởi biến `sep`.sep="|"
: Gán `|` cho biến `sep` để sử dụng làm dấu phân tách cho các dòng tiếp theo.Đoạn mã `awk` này hiệu quả vì nó xử lý từng dòng đầu ra của `git log` và định dạng nó theo yêu cầu cụ thể của bạn. `sub(/ /,"^^")` đảm bảo rằng chỉ có khoảng trắng đầu tiên bị thay thế, giữ nguyên các khoảng trắng khác trong chính message. `printf "%s%s", sep, $0` cho phép nối các dòng đã định dạng lại với nhau bằng dấu phân tách `|`.
cat git.awk
{ sub(/ /, "^^") #Chuyển đổi khoảng trắng đầu tiên thành "^^"
printf "%s%s", (FNR==1 ? "" : "|"), $0 #In ra đầu vào hiện tại thành một dòng đầu ra
}
END {
print ""
}
Để chạy nó, hãy sử dụng :
git log --pretty=format:'%H %s' | awk -f git.awk
Dưới đây là một số tùy chọn định dạng quan trọng khác mà bạn có thể sử dụng với `git log --pretty=format`:
%H
: Commit hash đầy đủ%h
: Commit hash rút gọn%s
: Commit message%an
: Tên tác giả%ae
: Email tác giả%ad
: Ngày tháng (có thể định dạng bằng --date=
)Bạn có thể kết hợp các tùy chọn này để tạo ra các định dạng message tùy chỉnh phù hợp với nhu cầu của bạn. Ví dụ, để tạo định dạng "Commit: [Hash] - Author: Name ", bạn có thể sử dụng:
git log --pretty=format:'Commit: [%h] - Author: %an'
Bằng cách sử dụng `git log --pretty=format` và `awk`, bạn có thể định dạng git log message một cách linh hoạt và mạnh mẽ để phục vụ cho nhiều mục đích khác nhau. Từ việc tạo báo cáo đến tích hợp với các hệ thống khác, việc làm chủ các công cụ này sẽ giúp bạn tối ưu hóa quy trình làm việc với Git và khai thác tối đa giá trị từ lịch sử commit của mình. Hy vọng bài viết này hữu ích cho bạn trong việc làm chủ **git log** và awk
Bài viết liên quan