2013-03-06 31 views
9

Khi chạy git log --graph trên bản sao của hạt nhân Linux, tôi thấy dấu gạch dưới trong biểu đồ không giống như ở đó.Dấu gạch dưới không mong muốn trong nhật ký git - đầu ra đồ họa

Dấu gạch dưới đó có ý nghĩa gì?

Lệnh cụ thể tôi đang sử dụng là như sau:

git log --graph --decorate --pretty=oneline --abbrev-commit --all --date-order 

Và đầu ra trông như thế này:

git log --graph output

Tôi đã cố gắng nhìn vào lĩnh vực này trong đồ thị trong gitk , nhưng dường như không có gì ngoài bình thường ở đó.

Tôi không nghĩ này chỉ được thể hiện một điểm chi nhánh, như tôi mong đợi rằng để được trả lại như trên bên phải, không phải là bên trái (bên trái phải phù hợp với hình ảnh trên):

I see:  I'd expect for 
       normal branching: 

\ \ \   \ \ \ 
///  ///
| _/  |// 
|/  |//
| |   | | 
| |   | | 
+3

Đó là một đống o khá lớn' chi nhánh ... – twalberg

+0

Bạn chỉ hỏi về vẽ? Tôi không nghĩ rằng có bất kỳ vấn đề với lịch sử cam kết (tức là các chi nhánh màu tím chia thành hai tại thời điểm đó.) – gcbenison

+0

@ gcbenison: Bạn có thể thấy trong hình ảnh đó một vài nơi mà một chi nhánh đã chia thành hai, và chúng được hiển thị dưới dạng '| /' (dấu gạch chéo), không phải '| _' (dấu cách-dấu gạch dưới).Nếu đó là điều này có nghĩa là, tôi muốn biết sự khác biệt giữa sự chia rẽ này và sự khác biệt là gì; nếu nó có ý nghĩa gì đó khác, tôi muốn biết cái gì. –

Trả lời

3

Với tôi, điều này có vẻ là một vật phẩm dựng hình. Nhiều khả năng, đầu ra của bảng điều khiển có một số logic để ngăn chặn điều gì đó như thế này

//
|/

vì xảy ra, vì đoạn mã này sẽ không hiển thị chính xác tại vị trí nào xảy ra hoạt động chi nhánh. Do đó, các nhà thiết kế có thể đã chọn tham gia

//
| _ 

thay thế.

Nhưng tôi có thể sai ở đây, có vẻ như đó là thứ cần được kiểm tra trong mã.

+0

Tôi không nghĩ vậy: Tôi có thể tạo một kho lưu trữ ví dụ bốn cam đơn giản, hiển thị biểu đồ với '/' s ngay trên mỗi khác. Luôn luôn có một khoảng trống giữa một '/' và một bên dưới nó, nhưng nếu bạn nhìn vào hình ảnh này, nếu '_' được thay thế bằng'/'s, thì cũng sẽ có một ký tự trống. –

3

Từ ack "'_'" trên nguồn Git nó trông giống như dấu gạch chân được in trong graph.c, line 1120, bên trong graph_output_collapsing_line chức năng:

/* 
* Output out a line based on the new mapping info 
*/ 
for (i = 0; i < graph->mapping_size; i++) { 
    int target = graph->new_mapping[i]; 
    if (target < 0) 
     strbuf_addch(sb, ' '); 
    else if (target * 2 == i) 
     strbuf_write_column(sb, &graph->new_columns[target], '|'); 
    else if (target == horizontal_edge_target && 
     i != horizontal_edge - 1) { 
      /* 
      * Set the mappings for all but the 
      * first segment to -1 so that they 
      * won't continue into the next line. 
      */ 
      if (i != (target * 2)+3) 
       graph->new_mapping[i] = -1; 
      used_horizontal = 1; 
     strbuf_write_column(sb, &graph->new_columns[target], '_'); 
    } else { 
     if (used_horizontal && i < horizontal_edge) 
      graph->new_mapping[i] = -1; 
     strbuf_write_column(sb, &graph->new_columns[target], '/'); 

    } 
} 

Nhưng sau khi suy nghĩ về nó trong một thời gian nó không có ý nghĩa nhiều anyway. Dấu gạch dưới là biểu tượng cho việc vượt qua nhánh không liên quan ở bên trái từ nhánh hiện tại, để đến một điểm nhánh ở đâu đó bên trái. Điều này có thể được nhìn thấy trên những nơi khác trong ảnh chụp màn hình của bạn, nhưng dấu gạch dưới đặc biệt này thực sự trông bị mất.

+0

Tôi đồng ý rằng dấu gạch dưới này sẽ bị mất. Cam kết giới thiệu mã mà bạn đang trỏ tới ('v1.6.3-rc1-19-geaf158f') là để nén các đường đồ thị đang truyền qua màn hình, và phải có'/'s ở hai bên; điều này chỉ có một bên phải. Mà ngụ ý đó là một lỗi, hoặc có cái gì khác in dấu gạch dưới cụ thể này. –

0

Câu hỏi rất cũ, nhưng hôm nay tôi gặp sự cố này khi viết một trình phân tích cú pháp cho đầu ra biểu đồ git. Lúc đầu, tôi cũng nghĩ rằng nó kết nối với chi nhánh trực tiếp ở bên trái của _, nhưng sau khi thử một số kho lớn hơn, tôi phát hiện ra rằng nó có nghĩa là: kết nối với một trong số chi nhánh | ở bên trái. Tại sao nó được kết xuất như thế này là một bí ẩn hoàn toàn đối với tôi. Xem ví dụ bên dưới.

git log --graph --date-order --all --pretty=format:"%h %p %s"

git_weirdness

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