Làm cách nào để nhóm cam kết trong một hệ thống kiểm soát phiên bản, chẳng hạn như git


9

Thay vì một lịch sử cam kết phẳng dài, tại sao không có hệ thống phân cấp, vì vậy ở cấp cao nhất bạn có thể có các yêu cầu kéo, sau đó bạn có thể đi xuống một cấp và xem xét các cam kết trong PR đó. Tôi nhận ra rằng PR là dành riêng cho github, nhưng bạn hiểu ý. Tôi chỉ có nghĩa là nhóm một số cam kết như một tính năng hoặc sửa lỗi, ví dụ.

Chắc chắn nó sẽ làm cho lịch sử cam kết dễ dàng hơn rất nhiều để điều hướng.

Tôi chắc chắn có một câu trả lời rõ ràng cho câu hỏi này, nhưng dường như tôi không thể tìm thấy nó.


1
Một giao diện người dùng có thể có thể nhóm cam kết cho hiển thị và điều hướng. Nhưng nó dường như không đủ hữu dụng để kết nối cứng trong lõi (rất chung chung và không theo quy trình công việc).

Nếu các xác nhận là khác biệt về mặt logic, chúng không nên được nhóm lại. Nếu chúng là một phần logic của một thay đổi, thì chúng phải là một cam kết (đó là tất cả những gì các công cụ rebase dành cho). Và nếu chúng có liên quan với nhau, rất có thể chúng sẽ ở gần nhau và dễ dàng tìm thấy bằng mọi cách.
Jan Hudec

Điều này được thực hiện như bạn mô tả với việc sử dụng các nhánh tắt, đọc lên các nhánh tính năng.
iveqy

hỏi những người thiết kế git, tôi chắc chắn họ biết tại sao họ đưa ra quyết định thiết kế của họ.
jwenting

Tôi đồng ý với các poster về mặt khái niệm. Thực tế là một cái gì đó hoạt động theo một cách nhất định ngay bây giờ , không có nghĩa là nó nên . Cá nhân, tôi thường xuyên sử dụng "squash merge" để tóm tắt một số cam kết thành một và đưa nó vào nhánh chính. Mức độ chi tiết tôi muốn thấy trong tổng thể cao hơn so với phát triển chẳng hạn. Vấn đề với điều đó là về cơ bản không có mối quan hệ nào giữa cam kết squash mới được tạo và các cam kết bắt nguồn từ nó. Tôi chắc chắn có thể tưởng tượng việc có thể nhóm một số cam kết thành một, mà chính nó là một cam kết rõ ràng trước và sau
Daniel Langdon

Câu trả lời:


9

Có một lịch sử cam kết phẳng dài vì những thay đổi là tuần tự. Mỗi người xây dựng trên trạng thái 'trước' và để lại trạng thái 'sau'. Sẽ khó có những thay đổi không phản ánh điều này.

Một tùy chọn để nhóm các thay đổi liên quan là sử dụng thẻ - http://git-scm.com/book/en/Git-Basics-Tagging mặc dù chúng được sử dụng nhiều hơn để gắn thẻ một điểm trong lịch sử thay vì nhóm các cam kết khác nhau.

Để nhóm lại các cam kết thành các nhóm lớn hơn, bạn cũng có thể thực hiện phản ứng tương tác.

Chi nhánh là một tùy chọn, Bạn có thể tạo một chi nhánh và thực hiện một loạt các cam kết có liên quan về mặt logic. Bạn có thể hợp nhất những cam kết đó trở lại thành chủ như mong muốn - có thể sử dụng --no-fftùy chọn.

Mối quan hệ giữa các nhánh cũng có thể được nhìn thấy trong các công cụ trực quan như gitg / gitx nhập mô tả hình ảnh ở đây


0

Tôi đã có cùng một vấn đề suy nghĩ về điều này cho đến khi tôi phát hiện ra rằng Git đánh số các nhánh mẹ của nó. Vì điều này, các cam kết hợp nhất thường gây khó chịu được tạo ra có thể được coi là các nút tóm tắt. Và tất cả các chi tiết bổ sung có thể bị trục xuất khỏi tầm nhìn, để lại một lịch sử tuyến tính duy nhất, tóm tắt.

Kiểm tra bài đăng trên blog này để biết chi tiết và ví dụ.


0

Nhóm của bạn cam kết trong các chi nhánh: mỗi chi nhánh là một tập hợp các cam kết. Khi bạn hợp nhất các xác nhận, bạn sẽ đặt một tập hợp các cam kết bên trong một nhánh khác, xây dựng hiệu quả một hệ thống phân cấp: nhánh chính, tính năng, lỗi, thử nghiệm, bạn đặt tên cho nó.

Lý tưởng nhất, chi nhánh chính của bạn là sự kế thừa của các cam kết hợp nhất. Nếu bạn chỉ nhìn vào cha mẹ đầu tiên (lệnh git chấp nhận tùy chọn như vậy), bạn sẽ có chế độ xem cấp cao về lịch sử của mình (hy vọng, bạn viết một cam kết hợp nhất có ý nghĩa, chứ không phải tự động tạo). Nhưng khi bạn nhìn vào cha mẹ thứ 2, thứ 3, v.v., trong lịch sử của bạn, bạn sẽ mở hộp để xem những gì bên trong hợp nhất. Ở đây bạn có chi tiết về những gì đã xảy ra.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.