Tôi là tác giả của GitX. Một trong những tính năng mà GitX có là hình dung của các chi nhánh, có thể được nhìn thấy here.Tăng tuyến tính gia tăng của git DAG
Hiển thị trực quan này hiện được thực hiện bằng cách đọc các cam kết được phát ra từ git theo đúng thứ tự. Đối với mỗi cam kết, cha mẹ được biết, vì vậy nó khá dễ dàng để xây dựng các làn đường một cách chính xác.
Tôi muốn tăng tốc quá trình này bằng cách sử dụng nhóm cam kết của chính mình và tự tinh chỉnh các cam kết. Điều này cho phép tôi sử dụng lại các cam kết đã tải hiện có và cho phép git phát ra các cam kết nhanh hơn vì nó không phải phát ra chúng theo đúng thứ tự.
Tuy nhiên, tôi không chắc chắn thuật toán nào sẽ sử dụng để thực hiện việc này. Điều quan trọng là tòa nhà đang tăng dần, vì việc tải các cam kết có thể mất một thời gian dài (> 5 giây cho 100.000 cam kết, tất cả sẽ được hiển thị).
Gitk đã đi theo cùng một cách, và có một bản vá here cho thấy cách nó được triển khai, nhưng kỹ năng TCL của tôi yếu và bản vá không được nhận xét kỹ lưỡng và khó thực hiện.
Tôi cũng muốn thuật toán này hiệu quả vì nó sẽ phải xử lý hàng trăm nghìn cam kết. Nó cũng phải được hiển thị trong một bảng, vì vậy điều quan trọng là truy cập vào các hàng cụ thể là nhanh.
Tôi sẽ mô tả đầu vào mà tôi có cho đến nay, kết quả đầu ra mà tôi muốn và một vài quan sát.
Input:
- Tôi có một hồ bơi hiện các cam kết theo hình thức một bảng băm mà các bản đồ cam id cam kết đối tượng. Hồ bơi này không phải hoàn thành (có tất cả các cam kết cần thiết)
- Tôi có một chuỗi tải riêng biệt trong các cam kết mới từ git, với một cuộc gọi lại có thể được gọi mỗi khi một lần commit mới được nạp. Không có trật tự được bảo đảm trong đó các cam kết đi vào, nhưng trong hầu hết các trường hợp, cam kết tiếp theo là một phụ huynh của cam kết trước đó.
- Đối tượng cam kết có id sửa đổi của riêng nó và các id sửa đổi của tất cả các bậc cha mẹ của nó
- Tôi có một danh sách các trưởng chi nhánh cần được liệt kê. Đó là, không có một 'đầu' của DAG sẽ được hiển thị. Cũng không cần phải là một gốc đồ thị đơn.
Output:
- tôi sẽ cần phải linearize những cam kết nhằm topo. Đó là, một cam kết không thể được liệt kê sau khi cha mẹ của nó đã được liệt kê.
- Tôi cũng cần 'đường nhánh' có thể được nhìn thấy trong ảnh chụp màn hình ở trên. Đây có thể cần phải được precomputed như hầu hết trong số họ phụ thuộc vào con cái của họ.
Một vài nhận xét:
- Đó là cần thiết để di chuyển một danh sách các cam kết. Ví dụ, chúng ta có thể phải cam kết (người đứng đầu chi nhánh) không liên quan, cho đến khi một cam kết xuất hiện mà làm cho một đầu một tổ tiên của người khác.
- Nhiều mẹo chi nhánh phải được hiển thị
- Điều quan trọng là quá trình này gia tăng, do đó ít nhất một chế độ xem có sẵn trong khi dữ liệu vẫn đang tải. Điều này có nghĩa là dữ liệu mới phải được chèn vào giữa chừng và các đường nhánh phải được điều chỉnh lại.
Điều đó có thể xảy ra, tôi sẽ kiểm tra. Tôi nghĩ rằng nó đắt hơn để tính toán các dòng đồ thị, mà tôi nhớ cache bây giờ. tính toán của những dòng này mất khá nhiều thời gian (~ 1 giây cho 100k cam kết), vì vậy tôi sẽ không thể tính toán lại mọi lúc. Tôi vẫn sẽ cần một số cập nhật gia tăng cho điều đó. – Pieter