2013-01-08 31 views
15

Có cách nào để biết giá trị băm của cam kết trước khi cam kết không?Biết mã GIT trước khi cam kết?

+0

Có lý do nào mà bạn không thể cam kết, lấy hàm băm và sau đó đặt lại --soft không? –

+1

Tôi nghĩ rằng làm điều đó, nhưng không phải là có một cách để làm điều đó thay vì proccess này? –

+0

Luôn luôn có một cách, nhưng đó là một chút thể dục dụng cụ. Tại sao bạn cần băm? –

Trả lời

12

Bạn có thể có lý do gì để cần điều này? Nếu bạn đang nghĩ đến việc đặt băm của cam kết vào thông điệp cam kết của riêng mình, tôi xin lỗi để nói với bạn nhưng điều đó là không thể (hoặc ít nhất, không thể không phá vỡ SHA1). Thông báo cam kết là một trong những phần được sử dụng khi tạo băm, vì vậy bất kỳ nỗ lực nào để sửa đổi thông báo sẽ thay đổi giá trị băm.

Trong mọi trường hợp, việc tìm ra giá trị băm của cam kết trước khi cam kết gần như không thể phân biệt được từ việc thực sự cam kết, viết mã băm và sau đó vứt bỏ cam kết (như Carl Norum đã đề xuất trong nhận xét của mình). Lý do là băm được tạo ra bằng cách tạo đối tượng commit và truyền nó qua SHA1. Vì vậy, để tìm hash mà không cam kết, bạn phải về cơ bản đi qua quá trình cam kết bằng tay và SHA1 kết quả, mà không thực sự viết đối tượng vào đĩa. Và không chỉ là điều không thực tế, nhưng nó cũng hoàn toàn vô nghĩa.

+0

Tôi nghĩ GIT sẽ có cách để làm điều đó, giống như Subversion (ví dụ: $ Revision $). –

+2

@MarceloLiberato: Trong Subversion, nó là tầm thường để dự đoán số sửa đổi của cam kết bạn đang tạo ra sẽ là gì. Trong git, nó hoàn toàn không thể (một lần nữa, trừ khi bạn đang đề xuất bằng cách nào đó phá vỡ SHA1). –

+0

Và bởi "không thể" tôi không có nghĩa là "bởi vì git không cung cấp một cách", tôi có nghĩa là "bởi vì bạn không thể thực hiện chức năng này, thời gian". –

9

Băm cam kết phụ thuộc vào thời gian cam kết.

Nếu bạn thực hiện 2 cam kết có cùng thay đổi, cùng một phụ huynh, cùng một tác giả và thư cam kết trong cùng một giây, bạn sẽ nhận được cùng một giá trị băm. Nếu không, hàm băm sẽ khác nhau.

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