2009-11-29 20 views
16

Làm cách nào để mô phỏng số phiên bản tăng toàn cầu cho mỗi cam kết trong dòng chính git?Mô phỏng số sửa đổi toàn cầu với git

Vì vậy, sau khi tôi cam kết, tôi muốn tập lệnh chạy tăng số ở đâu đó.

Điều này sẽ cho phép tôi thông báo cho khách hàng của mình dễ dàng rằng tính năng X đã được sửa trong XYZ sửa đổi git.

Tôi đang tìm tập lệnh mẫu thực tế đủ mạnh để xử lý các lần đẩy và hợp nhất ở một mức độ.

Trả lời

27

git describe cung cấp cho bạn mô tả phiên bản như sau: v2.0-64-g835c907. Phần v2.0 là tên của thẻ được chú thích mới nhất trước cam kết, 64 là số lần commit sau đó và 835c907 là id cam kết viết tắt. Đó là cơ bản có để xác định bất kỳ sửa đổi một cách chính xác và thuận tiện (mặc dù kỹ thuật).

Lưu ý: Để làm việc này, bạn sẽ cần ít nhất một thẻ được chú thích. Để tạo một phiên bản cho v2.0 phiên bản chạy - git tag -a v2.0, nếu bạn không có thẻ chú thích, lệnh này sẽ không thành công, trừ khi được đưa ra đối số dự phòng như --tags hoặc --always.

+1

Tôi nghĩ rằng tôi sẽ chấp nhận điều này, nó là git-way và sẽ đủ mạnh mẽ lâu dài để xử lý các kịch bản đa dev ... Tôi luôn có thể hiển thị khách hàng trên trang web 2.0.64 và sau đó giữ phần còn lại của thông tin trên hệ thống tệp ở đâu đó để tôi có thể theo dõi cam kết. –

6

Tôi nghĩ bạn đang nhầm lẫn số sửa đổi với số bản phát hành.

Subversion sử dụng số sửa đổi vì nó có thể: đó là một kho lưu trữ tập trung. Git tất nhiên có băm SHA-1 không sửa đổi số vì nó không có kho trung tâm (nhưng bạn biết điều này).

Số sửa đổi đó (và số băm về mặt kỹ thuật là số 160 bit, nó không phải là tuần tự) không thực sự quan tâm đến khách hàng của bạn. Những gì họ cần phải quan tâm là số phát hành. Đó là khi bạn đóng gói mã nguồn của mình và nói "đây là phiên bản 2.3.4", hoàn thành với ghi chú phát hành để cho biết những gì đã thay đổi.

Lý tưởng danh sách này được tạo bởi phần mềm theo dõi vấn đề và mã nguồn của bạn được gắn thẻ đơn giản để nói bản sửa đổi nào cấu thành số phát hành đó.

+2

Ngoại trừ Git không sử dụng GUID 128 bit chút nào. Git sử dụng băm SHA-1 160 bit của từng đối tượng được lưu trữ. GUID là một con thú hoàn toàn khác: http: //en.wikipedia.org/wiki/GUID – Juliano

+0

Rất tiếc, cảm ơn. Đã sửa. – cletus

9

Có thể mô phỏng số sửa đổi trong git, tuy nhiên điều quan trọng là phải biết rằng đó không phải là kết hợp hoàn hảo và không phải là cách dễ nhất để theo dõi lại. Cá nhân tôi sử dụng nó để tạo số sửa đổi đơn giản hơn cho một ứng dụng web vì tôi là nhà phát triển duy nhất. Tôi sử dụng chức năng sau đây trong số .bashrc của tôi để có được số sửa đổi mà sau đó tôi sử dụng cho các ghi chú phát hành (tuy nhiên nếu bạn không phải là tôi rất khuyên bạn nên gắn thẻ phát hành - sau đó số chỉ dành cho người dùng). Nếu những giới hạn này được biết đến, nó sẽ cung cấp một số sửa đổi thân thiện hơn cho con người.

function rgit() { 
    git rev-list --abbrev-commit HEAD | wc -l | awk '{print $1}' 
} 
+0

Điều đó thực sự tuyệt vời, tôi có cùng một vấn đề, dev đơn lẻ trên một ứng dụng web đang chuyển động rất nhanh. Tôi hiểu rằng điều này có thể đi hình dạng lê nếu tôi bắt đầu viết lại lịch sử nhưng chấp nhận giới hạn đó. –

+1

Phần 'awk' là vô ích vì bạn đã chuyển tùy chọn '-l' thành' wc'. –

1

tôi (là không biết gì về git describe) đã được sử dụng kịch bản sau đây:

#!/bin/bash 

FULL_BRANCH=`git branch | grep '*'` 
BRANCH_NAME=${FULL_BRANCH:2} 
REV=`git rev-parse --short HEAD` 

$COMMIT_NAME = $BRANCH_NAME-$REV 

này mang đến cho bạn một tên có chứa các tên chi nhánh hiện tại, tiếp theo là ngắn cam ID. Ví dụ: master-c03f862.

Đủ để làm những gì bạn đang theo dõi, nhưng có lẽ git describe là cách chính xác để đến đây.

Các vấn đề liên quan