2013-04-03 30 views
150

git rev-parse làm gì?Git rev-parse làm gì?

Tôi đã đọc trang người đàn ông nhưng nó nêu ra nhiều câu hỏi hơn câu trả lời. Những điều thích:

Chọn ra và massage thông số

Massage? Điều đó nghĩa là gì?

Tôi đang sử dụng như một trình giải quyết (để SHA1) của specifiers sửa đổi, giống như

git rev-parse HEAD^ 

hoặc

git rev-parse origin/master 

Đây có phải là mục đích của lệnh? Nếu không, thậm chí là chính xác để sử dụng nó để đạt được điều này?

+1

Theo như tôi có thể nhìn thấy trong trang người đàn ông, đó là một tiện ích chủ yếu là nội bộ để phân tích cú pháp sửa đổi/tên đối tượng cho các lệnh khác . Những gì bạn đang làm là khá nhiều mục đích của lệnh 'rev-parse'. Bạn cũng có thể sử dụng nó để chuẩn hóa một dòng lệnh, để chương trình thực sự không phải hiểu cú pháp tên đối tượng phức tạp của Git (bạn sử dụng 'git rev-parse' để thay đổi, hoặc" massage ", một số tham số trong dòng lệnh trước khi chương trình thực tế được gọi). –

+0

Xem thêm https://github.com/git/git/commit/b2a2c4d8099c69ec997e51cac489c0947ad17956 – VonC

Trả lời

139

git rev-parse là lệnh phụ trợ plumbing được sử dụng chủ yếu cho thao tác.

Một cách sử dụng phổ biến là git rev-parse là in các băm SHA1 được cung cấp cho một thông số sửa đổi. Ngoài ra, nó có các tùy chọn khác nhau để định dạng đầu ra này như --short để in một SHA1 ngắn hơn duy nhất.

Có những trường hợp khác sử dụng cũng như (trong kịch bản và các công cụ khác được xây dựng trên git) mà tôi đã sử dụng cho:

  • --verify để xác minh rằng các đối tượng quy định là một đối tượng git hợp lệ.
  • --git-dir để hiển thị đường dẫn abs/tương đối của thư mục .git.
  • Kiểm tra xem bạn hiện đang trong một kho lưu trữ sử dụng --is-inside-git-dir hoặc trong một tác phẩm cây sử dụng --is-inside-work-tree
  • Kiểm tra nếu repo là một trần sử dụng
  • In ấn SHA1 băm của chi nhánh (--branches), thẻ (--tags) và refs cũng có thể được lọc dựa trên điều khiển từ xa (sử dụng --remote)
  • --parse-opt để bình thường hóa đối số trong một kịch bản (loại tương tự như getopt) và in một chuỗi đầu ra có thể được sử dụng với eval

Massage chỉ ngụ ý rằng có thể chuyển đổi thông tin từ một biểu mẫu này sang dạng khác, tức là lệnh chuyển đổi. Đây là một số ví dụ nhanh mà tôi có thể nghĩ đến:

  • tên chi nhánh hoặc thẻ vào cam kết SHA1 nó chỉ để nó có thể được chuyển đến lệnh đường ống chỉ chấp nhận giá trị SHA1 cho cam kết.
  • một phạm vi sửa đổi A..B cho git log hoặc git diff vào các đối số tương đương cho các lệnh hệ thống ống nước nằm bên dưới như B ^A
44

Chỉ cần để xây dựng về từ nguyên của tên lệnh rev-parse, Git thường xuyên sử dụng thuật ngữ rev trong các lệnh hệ thống ống nước như viết tắt của "sửa đổi" và thường có nghĩa là giá trị băm SHA1 40 ký tự cho một cam kết. Lệnh rev-list ví dụ in một danh sách các băm cam kết 40-char cho một nhánh hoặc bất kỳ thứ gì.

Trong trường hợp này, tên có thể được mở rộng thành parse-a-commitish-to-a-full-SHA1-hash. Trong khi lệnh có một số hàm phụ trợ được đề cập trong câu trả lời của Tuxdude, tên gọi của nó dường như là trường hợp sử dụng chuyển đổi một tham chiếu thân thiện với người dùng như tên chi nhánh hoặc băm viết tắt thành hàm băm SHA1 40 ký tự rõ ràng hữu ích nhất cho nhiều lập trình/hệ thống ống nước mục đích.

Tôi biết tôi đã suy nghĩ nó là "đảo ngược-phân tích" một cái gì đó khá lâu trước khi tôi figured it out và có những rắc rối tương tự làm cho ý nghĩa của các thuật ngữ "xoa bóp" và "thao tác" :)

Dù sao , Tôi thấy khái niệm "phân tích cú pháp-to-a-sửa đổi" này là một cách thỏa mãn để suy nghĩ về nó, và một khái niệm đáng tin cậy để đưa lệnh này vào trong tâm trí khi tôi cần loại điều đó. Thường xuyên trong kịch bản Git bạn có một tham chiếu cam kết thân thiện với người dùng khi người dùng nhập vào và thường muốn làm cho nó được giải quyết thành một tham chiếu làm việc đã được xác thực và rõ ràng ngay khi nhận được nó càng tốt. Nếu không thì việc dịch và xác thực đầu vào có xu hướng gia tăng thông qua tập lệnh.

+4

Cảm ơn bạn đã giải thích, tôi không hiểu git-doc một chút: http://git-scm.com/docs/git- rev-parse –

10

git rev-parse Cũng làm việc để nhận được tên chi nhánh hiện tại bằng cách sử dụng --abbrev-ref cờ như:

git rev-parse --abbrev-ref HEAD