Tôi đang làm việc với libgit2sharp (trình bao bọc C# cho libgit2) và đã gặp sự cố vì nó không có nhiều chức năng tôi hy vọng (hy vọng tôi có thể đóng góp cho nó sớm, điều này có vẻ giống như một dự án thực sự hữu ích)Nhận thay đổi giữa cam kết và phụ huynh với libgit2sharp
Điều tôi đang cố gắng làm ngay bây giờ là lấy danh sách các tệp đã thay đổi từ một cam kết cụ thể và cha mẹ của nó. Tôi sẽ không cố gắng tìm ra những gì đã thay đổi giữa một hợp nhất và hai cha mẹ của nó. Tôi quan tâm nhiều hơn đến các cam kết thông thường.
Những người này (https://github.com/libgit2/libgit2sharp/issues/89) đang làm việc tương tự. Tôi nghĩ rằng thủ tục của họ là một ý tưởng âm thanh nhưng tôi hơi yếu về sự hiểu biết của tôi về ruột GIT (có vô số hướng dẫn về hướng dẫn người dùng cuối để GIT nhưng không quá nhiều về cấu trúc bên trong)
Tôi tò mò về cách GIT chính nó thực hiện lệnh "git diff". Giả sử GIT không thực sự lưu trữ các vùng đồng bằng mà là phiên bản đầy đủ của tệp (nếu nó không thay đổi, nó sẽ trỏ đến một SHA hiện có. Thông tin này có thể tìm thấy từ nhiều nguồn khác nhau như ở đây http://xentac.net/2012/01/19/the-real-difference-between-git-and-mercurial.html). Điều này dường như làm cho nó khó khăn hơn để có được những thay đổi giữa hai commit (trong trường hợp của tôi là commit cụ thể và cha mẹ đơn của nó) vì dữ liệu không được lưu trữ như một phần của commit (rõ ràng nếu bạn kiểm tra lớp Commit trong Commit.cs của libgit2sharp) tập tin).
Điều tôi có thể truy cập từ cam kết là cây. Bạn có thể thực hiện các bước sau để tìm thông tin này:
1) Bắt đầu với cam kết mong muốn và đi xuống cây và lưu trữ tất cả các giá trị SHA trong một tập hợp.
2) Bắt đầu ở cấp độ gốc cho cam kết mong muốn và đi xuống cây để lưu trữ tất cả các giá trị SHA blob của nó trong tập hợp khác.
3) SHA cho các tệp đã thay đổi sẽ là các tệp không nằm trong giao điểm của hai tập hợp.
Vấn đề tôi thấy với cách tiếp cận này là nó không giống như có một cách để lấy tên tệp từ giá trị SHA của blob (Tôi không thấy bất cứ điều gì có thể làm điều này trong tệp blob.cs libgit2sharp).
Tôi biết có rất nhiều khía cạnh cho câu hỏi này nhưng chúng là một phần của mục tiêu lớn này để có được một đoạn dữ liệu cụ thể từ git.
Cảm ơn.
Hãy coi chừng rằng cùng một 'Blob' sẽ được trỏ qua SHA của nó bằng các' TreeEntries' khác nhau với các tên tệp khác nhau. Điều này sẽ xảy ra khi các tệp có cùng nội dung chính xác. – nulltoken