wie man ein altes Git-Commit klont (und noch ein paar Fragen zu Git)

75

Ich habe ein Git-Repository meines Projekts mit ungefähr 20 Commits. Ich weiß, wie man das eigentliche Commit klont git clone,

  • aber wie kann ich ein altes Commit "klonen"?
  • Gibt es eine wirklich gute Git-GUI (imho qgitist keine gute GUI)?
  • Was genau sind "Zweige"?
  • Was ist der beste Weg, um diese Commits in Git zu markieren, wenn ich 0.1, 0.2 usw. veröffentlichen möchte?
  • Was sind die großen Unterschiede zu SVN?
Berschi
quelle

Antworten:

127

Ein Git-Repository enthält zu jeder Zeit den gesamten Verlauf.
Wenn Sie also ein Repository klonen, klonen Sie es mit seinem vollständigen Verlauf, und dann können Sie einen Zweig aus einem beliebigen Commit erstellen:

 $ git checkout -b aNewBranch SHA1

Dabei steht SHA1 für die Festschreibungs-ID, von der aus Sie fortfahren möchten.


Verzweigungen in Git sind nur eine Möglichkeit, einen Pfad einer DAG (Directed Acyclic Graph) zu verfolgen, bei der es sich um Commits handelt, die den Verlauf eines Git-Repositorys darstellen.
Es ist nur ein Zeiger, den Sie einem dieser Commits zuweisen, und er bewegt sich bei jedem neuen Commit weiter.

Geäst

Weitere Informationen finden Sie im Pro Git- Buch.


Sie können ein bestimmtes Commit mit einem Tag markieren , das wie ein Zweig nur ein Zeiger ist, aber unveränderlich (es bewegt sich nicht, wenn Sie ein neues Commit durchführen).
Sie verwenden vorzugsweise mit Anmerkungen versehene Tags, die als vollständige Objekte in der Git-Datenbank gespeichert sind. Sie sind Prüfsummen; den Tagger-Namen, die E-Mail-Adresse und das Datum enthalten; eine Tagging-Nachricht haben; und kann mit GNU Privacy Guard (GPG) signiert und verifiziert werden.


Die „Grafische Interfaces“ Abschnitt InterfacesFrontendsAndTools Seite auf Git Wiki listet die verschiedenen GUI für Git im Moment.


Sie werden viele Fragen zum Unterschied zwischen Git und SVN sehen: siehe meine Antwort (oder diese ) zum Beispiel.
Meine vollständigste Antwort zu den grundlegenden Unterschieden zwischen Git und SVN lautet hier:
" Welcher der beiden ist besser: Git oder SVN" .

VonC
quelle
1
Tatsächlich wurde die letzte SO-Frage "Welches der beiden ist besser: Git oder SVN" gelöscht. Ich habe es in eine ältere Antwort kopiert: stackoverflow.com/questions/161541/svn-vs-git/2549128#2549128
VonC
5
vorübergehend in einem alten Commit git checkout SHA1git checkout -b aNewBranch
herumzustöbern
7

Es gibt ein paar Fragen in diesem Beitrag, hier sind meine Antworten:

Um ein vorheriges Commit zu "klonen", können Sie zunächst Folgendes tun:

git clone REPO_URL
git checkout HEAD~1 // checks out the last commit's first parent

Verwenden Sie ~1diese Option, um auf das erste übergeordnete Element des letzten Commits zuzugreifen, und erhöhen Sie die Zahl, um das übergeordnete Element des übergeordneten Elements abzurufen. Mehr zur Tilde- und Caret-Notation .

Die beiden obigen Befehle versetzen Sie in einen getrennten HEAD-Zustand, der je nach Kontext wichtig sein kann oder nicht. Zum Beispiel ist es nicht wichtig, ob Sie als Teil Ihrer Bereitstellungsskripte klonen und sich nur um den Zugriff auf ein vorheriges Commit kümmern (z. B. als Teil einer Rollback-Strategie).

Wenn Sie ab diesem Zeitpunkt in der Geschichte mit der Arbeit beginnen müssen, können Sie sie ausführen

git checkout -b NEW_BRANCH_NAME

Eine gute Git-GUI? Für mich ist SourceTree das Beste.

Was sind Filialen? In meinen eigenen Worten ist ein Zweig nur eine sehr einfache Möglichkeit, sich zu drehen. Angenommen, Sie arbeiten an einem Zweig masterund möchten ein Experiment durchführen. Einfach, einfach git checkout -b experimentund Sie sind schnell an einem sicheren Ort, um Dinge zu zerbrechen.

Was ist anders zwischen git und svn?

git ist ein verteiltes Versionskontrollsystem . svn ist nicht. Auch das Verzweigen (oben erwähnt) ist in Git einfacher.

Zum Markieren weiß ich nicht, ob es "One True Way" gibt (gibt es jemals?), Aber erkunde einfach den git tagBefehl. Eine großartige Sache bei git ist, wie einfach es ist, ein Duplikat Ihres Repos auf Ihrem lokalen Computer (oder wo auch immer) zu klonen und zu tun, was Sie wollen, und zu sehen, was passiert. Wenn Sie etwas vermasseln, löschen Sie einfach das Verzeichnis. Sie können also git tagin einem Testverzeichnis experimentieren und sehen, was Ihnen gefällt.

cdmo
quelle