2016-03-20 6 views
2

Ich verstehe wie ist es möglich, einen Blob oder einen Baum oder sogar ein anderes kommentiertes Tag mit einem Git-Tag zu taggen. Ich verstehe die Architektur und das Konzept, das dies ermöglicht.Warum markieren Sie einen Blob oder einen Baum (oder ein Tag)?

Allerdings habe ich Probleme beim Nachdenken über reale Anwendungen dieser (oder "echten Workflow" -Anwendungen).

Hier auf Stack Overflow suchen Ich fand nur eine Antwort, die das Markieren von nicht commit-Objekten mit advice not to do so erwähnt.

Unter was möglich Umständen könnte es jemals angemessen sein Objekt ein nicht-begehen zu markieren?

+1

Technisch gesehen, sind mit Annotationen versehene Tags * ein Beispiel für das Taggen eines Nicht-Commit-Objekts, aber ich nehme an, das ist nicht das, was Sie meinen. – hvd

+0

@hvd, das habe ich eigentlich nicht bemerkt; Danke für das Aufzeigen! Auf jeden Fall löst sich das letztendlich noch auf ein Commit hin, also bleibt meine Frage bestehen. – Wildcard

+2

Dies ist nicht Standardpraxis, aber es scheint vernünftig genug, ein paar kleine Vermögenswerte auf diese Weise zu teilen (Out-of-Band, wenn Sie so wollen), die nicht unbedingt in den Arbeitsbaum selbst gehören. Für den offiziellen Git-Repo wird der öffentliche ssh-Schlüssel des Betreuers auf diese Weise markiert; Das Tag ist die einzige Möglichkeit, darauf zuzugreifen, da es nicht in der Baumstruktur eines Commits enthalten ist. – jpaugh

Antwort

3

Tagging Bäume oder Blobs Punkte auf den Anfang Baum des Imports des Quellcodes erstellt kann in lang laufenden Hilfsprogrammen, die Objekte direkt manipulieren, vorübergehend angebracht sein. Die Markierung würde sicherstellen, dass git gc sicher parallel betrieben werden kann. Das Dienstprogramm würde dann die Tags entfernen, wenn es fertig ist, wenn ein Commit erstellt wird.

+0

Dies sollte eher unnötig sein. git gc überprüft den Zeitstempel von Objekten, um sicherzustellen, dass neue Objekte nicht entfernt werden. Und falls nicht, können Sie sehen, dass es hier immer noch ein Rennen gibt: Das GC könnte nach der Erstellung eines Objekts, aber vor der Markierung, eine Weile laufen. –

+0

@EdwardThomson Ich habe "Long-Running" geschrieben. Sie können es als z.B. "warten auf die Eingabe von einem Benutzer, der für einen einmonatigen Urlaub ging", wenn Sie möchten. – hvd

0

Gibt es alle Anwendungsfälle, wo es angebracht wäre, Objekt eine nicht-begehen zu markieren?

Wie Sie herausgefunden haben. Ich eine Nussschale sollten Sie vermeidennon-commit Tagging.

Hier können zum Beispiel sagen, dass Sie einen Code (Hot-Fix) und dessen Teil eines größeren

begehen

Warum behoben haben?
da es so begangen wurde und erst später Sie herausgefunden haben, dass Sie nur eine einzige Datei benötigen.
Jetzt möchten Sie die Datei (Inhalt) dieser Änderung markieren, ohne alle anderen Inhalte zu markieren.

Probe 2:
Sie sind über den Code gehen versuchen, herauszufinden, welche Datei einen Fehler verursacht, ein einzelnen zu begehen markieren Sie einen Tag oder ein git note verwenden können, aber eine einzelne Datei markieren Sie tag verwenden .

Und es kann auch einige andere Beispiele geben.


Die Linux-Kernel-Repository hat auch eine nicht-commit weisender Tag-Objekt - der erste Tag

+0

Das Linux-Kernel-Beispiel ist gut, da es ein echtes Beispiel ist, aber ich sehe nicht, warum sie nicht einfach ein initiales Commit machen und das markieren könnten. Wäre der Effekt nicht derselbe? Letztendlich ist ein Commit nur ein Zeiger auf einen Baum und (normalerweise) auch auf andere Commits. – Wildcard

+0

Ich stimme zu, deshalb sollten Sie versuchen, es zu vermeiden, Sie haben immer noch die ** Option **, es zu tun. Sie können auch die Option haben, in rotes Licht zu fahren (und wie wir einige tun), aber es ist ein Fall von missbräuchlicher Verwendung dieser Funktion. – CodeWizard

+0

Nehmen wir an, Sie haben an einem Code gearbeitet, der einen Fehler verursacht hat, und dann haben Sie einen Fehler mit einigen anderen Dateien behoben. Jetzt möchten Sie nur das Update (einzelne Datei) aus dem Commit-Baum greifen. Sie können dies tun, indem Sie den gewünschten Inhalt selbst markieren. – CodeWizard