2010-12-14 8 views
1

Wenn ich gitk benutze, um ein commit-Objekt zu betrachten, listet es unter Zweige (im unteren linken Bereich) alle Kinder dieses Zweiges auf, zu denen ich nach oben navigieren kann (solange sie keine namenlosen Commits sind, sondern tatsächlich Branch-Namen haben) .gitk show "future" -zweige?

Warum? IMHO ist das nicht logisch und nicht nützlich, weil es die Chronologie von Ereignissen verletzt (wie Thinsg in das Repository übergeben wurde).

Angenommen, ich habe einen einen Baum, der wie folgt aussehen:

o Zweig 'Left' (Commit 3)
| o Verzweigung 'Richtig' (Festschreibung 2)
|/
o Festschreibung
|
o Zweig 'base'

Nun, wenn ich 1 wählen begehen, dann unter 'Branches:' Ich will sehen:
Branchen: links, rechts
folgt: Grund

Was ist der Punkt davon? Das Commit 1-Objekt ist Teil des Basiszweigs, es ist weder Teil des linken Zweigs noch des rechten Zweigs, weil es zum Zeitpunkt der Erstellung noch nicht links und rechts vorhanden war. Also wird alles, was zu Links und Rechts SPÄTER verschmolzen oder gebunden wird, Teil von Links oder Rechts sein, NICHT commit 1. Also, wie können dann die Zweige, die 1 festschreiben, Teil von Links und Rechts sein?

jemand bitte erklären, was ich hier fehlt, weil von einem Clearcase Hintergrund kommt es Sinn für mich gar nicht machen ...

Dank!

Antwort

1

Dank dieser Informationen wissen Sie, dass die Änderungen, die mit dem ausgewählten Commit eingeführt wurden, in allen Zweigstellen enthalten sind.

Ich kann mir Situationen vorstellen, in denen ich gerne wissen würde, in welchen Zweigen der Commit angewendet wird (oder, wenn ein Zweig den ausgewählten Commit enthält). Du kannst den Linien in Gitk immer folgen, aber das kann mit langen Zweigen mühsam sein.

Manchmal möchte ich das Gegenteil tun, wählen Sie eine Festschreibung und sehen, ob dort eine andere vorherige Festschreibung gilt. Soweit ich weiß, gibt es dazu keinen praktikablen Weg. Daher ist es ein guter Ersatz, das vorherige Commit auszuwählen und das Feld "Branches" zu überprüfen.

+0

Zunächst einmal - danke für die Antwort. Ok Ich sehe Ihren Punkt, aber in diesem Fall, wie kann ich die umgekehrte Information sehen, d. H. Was ist der Ausgangspunkt eines Zweigs? Mit anderen Worten - wenn ich zwei weitere Commits (4 und 5) oben auf Left zusammenführe, was sagt mir, dass Commits 3, 4 und 5 alle Teil des linken Zweigs sind? Ja, ich könnte es visuell herausfinden, aber was, wenn Branch Left nicht erstellt wurde, bis Commit 4? Oder wenn es auf der gleichen Ebene wie Commit 1 oder Base erstellt wurde? – Alan

+0

@Alan: In dem Fall, dass Sie beschreiben, würden die Commits 3, 4 und 5 Linke immer noch als Zweig auflisten. Es spielt keine Rolle, woher es stammt, ob ein bestimmtes Commit Teil seiner Geschichte ist oder nicht. – Cascabel

+0

@Alan: wie Jefromi sagt, ist es wirklich wichtig, wo der neue Zweig begann? Ob ein Zweig existierte, als ein Commit erstellt wurde, ändert nichts an der Tatsache, dass das Commit Teil seines Verlaufs ist. In git sind Zweige praktisch nur Hinweise auf Commits. Jedes Commit hat einen Zeiger auf seinen Elternteil, so wie der Verlauf neu erstellt wird. – Gauthier

0

Git hat ein anonymeres Verzweigungsmodell (um nicht mit anonymen Zweigen zu verwechseln, git hat diese nicht) auf diese Weise, dass ein Commit nicht dauerhaft einem Zweig zugeordnet ist (manchmal gehen Zweignamen in Zusammenführungsnachrichten, aber das ist mehr eine Konvention). Eine Verzweigung in git ist eine Verzweigungsetikette, die zusammen mit einem neuen Commit vorwärtsbewegt wird, aber es gibt keine Information darüber, in welcher Verzweigung sie erstellt wurde.

In Ihrem Beispiel commit1 nicht direkt mit jedem Zweig verbunden, aber ein vorheriges bleibt auf base und die beide aufsteigend Commits sind auf Left und Right.

0

Sie betrachten dies etwas falsch. Der Commit1-Commit gehört nicht zum Basiszweig. In git sind Zweige einfache Verweise auf Commit-Objekte. Die Geschichte eines Zweigs wird dann als "alle Zugänge erreichbar von" beschrieben. Commit1 ist also sowohl von links als auch von rechts erreichbar, aber von der Basis aus nicht erreichbar.

Wenn Sie zu git checkout base && git checkout -b feature2 wären, dann würde Ihr neuer Zweig feature2 commit1 nicht enthalten. Git verfolgt die Erstellung von Zweigen nicht - wenn Sie aufzeichnen möchten, können Sie ein Tag hinzufügen oder git mergebase Left Right verwenden, das Ihnen das erste Commit anzeigt, das von beiden Zweigen erreichbar ist (in diesem Fall commit1).