2013-03-06 11 views
9

Po uruchomieniu git log --graph na mojej kopii jądra systemu Linux widzę podkreślenie na wykresie, które nie wygląda tak, jak powinno być.Nieoczekiwany podkreślnik w dzienniku git - wynik w postaci pliku graficznego

Co oznacza to podkreślenie?

Konkretna komenda używam jest tak:

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

a wyjście wygląda następująco:

git log --graph output

Próbowałem patrząc na tym obszarze na wykresie w gitk , ale wydaje się, że nie ma tam nic niezwykłego.

Nie myśleć To tylko pokazuje punktu rozgałęzienia, jak będę oczekiwać, że mają być świadczone, jak po prawej stronie, a nie po lewej stronie (lewa powinna odpowiadać zdjęcie powyżej):

I see:  I'd expect for 
       normal branching: 

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

To gałęzie dość duży stos O”... – twalberg

+0

dopiero pytasz o świadczenie? Nie sądzę, że jest jakikolwiek problem z historią zatwierdzenia (tj. Fioletowa gałąź dzieli się na dwie części w tym punkcie). – gcbenison

+0

@gazunek: Możesz zobaczyć na tym obrazku kilka miejsc, w których jedna gałąź podzieliła się na dwie, i są one renderowane jako '| /' (pipe-slash), a nie '| _' (pipe-space-podkreślenie).Jeśli to właśnie oznacza, chcę wiedzieć, jaka jest różnica między tym podziałem a normalnym; jeśli to oznacza coś innego, chcę wiedzieć co. –

Odpowiedz

3

Dla mnie wydaje się to artefaktem renderingu. Najprawdopodobniej wyjście konsola ma jakąś logikę, aby zapobiec coś takiego

//
|/

dzieje, jak ten fragment nie pokazują dokładnie miejsce, w którym wystąpiła operacja oddział. W związku z tym projektanci prawdopodobnie zdecydowali się zamiast tego na:

Ale mogę się mylić tutaj, to chyba coś, co powinno zostać sprawdzone w kodzie.

+0

Nie wydaje mi się, żebym mógł: utworzyć proste repozytorium przykładowego 4-commit, które pokazuje wykres z '/' s bezpośrednio nad sobą. Zawsze byłaby spacja między '/' a tą pod nią, ale jeśli spojrzysz na to zdjęcie, jeśli '_' zostanie zamienione na'/'s, również będzie pusta. –

3

Od ack "'_'" na źródłach Git wygląda jak podkreślenia jest drukowany w graph.c, line 1120, wewnątrz funkcji graph_output_collapsing_line:

/* 
* 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], '/'); 

    } 
} 

Ale po tym myśleć przez jakiś czas nie ma sensu i tak. Podkreślenie jest symbolem przekraczania niepowiązanej gałęzi po lewej od bieżącej, aby dostać się do punktu rozgałęzienia gdzieś dalej po lewej stronie. Można to zobaczyć w innych miejscach na ekranie, ale ten szczególny podkreślnik wygląda na zagubiony.

+0

Zgadzam się, że ten podkreślnik wygląda na zagubiony. Zatwierdzenie, które wprowadziło kod, który wskazujesz ('v1.6.3-rc1-19-geaf158f') służy do zagęszczania linii wykresu, które przechodzą przez ekran, i powinno mieć'/'s po obu stronach; to ma tylko jeden na prawo. Co oznacza, że ​​jest to błąd, albo jest jeszcze coś, co drukuje to konkretne podkreślenie. –

0

Bardzo stare pytanie, ale dzisiaj napotkałem ten problem podczas pisania parsera dla wyjścia wykresu git. Początkowo myślałem także, że jest on połączony z odgałęzieniem bezpośrednio po lewej stronie _, ale po wypróbowaniu kilku większych repozytoriów odkryłem, że oznacza to: połączyć się z jedną z gałęzi | po lewej stronie. Dlaczego jest to interpretowane w ten sposób, jest dla mnie całkowitą tajemnicą. Zobacz poniżej przykład.

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

git_weirdness

Powiązane problemy