854 Stimmen

Git für Anfänger: Der endgültige praktische Leitfaden

Ok, nachdem ich dieser Beitrag von PJ Hyett habe ich beschlossen, das Ende zu überspringen und mit Git .

Was ich also brauche, ist ein Anfängerhandbuch praktisch Anleitung zu Git. "Anfänger" wird definiert als jemand, der weiß, wie man mit seinem Compiler umgeht, der einigermaßen versteht, was ein Makefile ist, und hat die Versionskontrolle angefasst, ohne sie sehr gut zu verstehen.

"Praktisch" bedeutet, dass diese Person nicht ins Detail gehen möchte, was Git im Hintergrund tut, und sich nicht einmal darum kümmert (oder weiß), dass es verteilt ist. Ihre Antworten könnten die Möglichkeiten andeuten, aber versuchen Sie, auf den Anfänger abzuzielen, der ein "Haupt"-Repository auf einem "Server" haben möchte, das gesichert und sicher ist, und sein lokales Repository lediglich als "Client"-Ressource behandelt.

Also:

Installation/Einrichtung

Arbeiten mit dem Code

Kennzeichnung, Verzweigung, Veröffentlichungen, Baselines

Andere

  • Beschreiben Sie eine gute grafische Benutzeroberfläche, ein IDE-Plugin usw., das Git zu einer Ressource macht, die nicht auf der Kommandozeile läuft, und verlinken Sie auf diese, führen Sie aber auch die Vorteile und Einschränkungen auf.
    • msysgit - Plattformübergreifend, mit Git enthalten
    • gitk - Plattformübergreifender Verlaufsbetrachter, enthalten in Git
    • gitnub - Mac OS X
    • gitx - Mac OS X Verlaufsanzeige
    • smartgit - Plattformübergreifend, kommerziell, Beta
    • tig - Konsolen-GUI für Linux
    • qgit - GUI für Windows, Linux
    • Git-Erweiterungen - Paket für Windows, enthält freundliche GUI
  • Gibt es noch andere allgemeine Aufgaben, die ein Anfänger kennen sollte?
  • Wie kann ich effektiv mit einem Subversion-Repository arbeiten, das als Quelle für die Versionskontrolle festgelegt wurde?

Andere Referenzen für Git-Anfänger

Eintauchen in Git

Ich werde die Einträge von Zeit zu Zeit durchgehen und sie "aufräumen", damit sie ein einheitliches Aussehen haben und die Liste leicht zu überblicken ist. Ich werde auch einen Link zu den Einträgen in der Aufzählung oben einfügen, damit man sie später leicht wiederfindet.

59voto

Pat Notz Punkte 196406

Nun, trotz der Tatsache, dass Sie darum gebeten haben, dass wir nicht "einfach" auf andere Ressourcen verlinken, ist es ziemlich dumm, wenn es bereits eine von der Gemeinschaft gewachsene (und wachsende) Ressource gibt, die wirklich ziemlich gut ist: die Git Community Book . Ernsthaft, diese 20+ Fragen in einer Frage sind alles andere als prägnant und konsistent. Das Git Community Book ist sowohl im HTML- als auch im PDF-Format verfügbar und beantwortet viele Ihrer Fragen mit klaren, gut formatierten und von Fachleuten geprüften Antworten und in einem Format, das es Ihnen ermöglicht, direkt zu Ihrem Problem zu springen.

Wenn mein Beitrag Sie wirklich verärgert, werde ich ihn leider löschen. Sagen Sie es einfach.

2 Stimmen

Wenn Sie Git nicht verwenden, weil es ein DVCS ist, warum sollten Sie Git überhaupt verwenden? Diese Frage ist dumm und vergeudet Ressourcen, die für andere Dinge verwendet werden könnten, um ein fragwürdiges Ziel zu erreichen.

56voto

Brian Gianforcaro Punkte 25503

Wie man es so konfiguriert, dass Dateien ignoriert werden:

Die Möglichkeit, dass Git Dateien ignoriert, die Sie nicht verfolgen wollen, ist sehr nützlich.

Um eine Datei oder eine Gruppe von Dateien zu ignorieren, geben Sie ein Muster an. Die Mustersyntax für Git ist recht einfach, aber mächtig. Sie ist auf alle drei der verschiedenen Dateien anwendbar, die ich im Folgenden erwähnen werde.

  • Eine Leerzeile ignoriert keine Dateien, sie wird im Allgemeinen als Trennzeichen verwendet.
  • Linien starrend mit # dienen als Kommentare.
  • El ! Präfix ist optional und negiert das Muster. Jedes negierte Muster, das passt, hat Vorrang vor Mustern mit niedrigerer Priorität.
  • Unterstützt erweiterte Ausdrücke und Wildcards
    • Beispiel: Das Muster: *.[oa] ignoriert alle Dateien im Repository, die auf .o oder .a enden (Objekt- und Archivdateien)
  • Wenn ein Muster ein Verzeichnis enthält, das mit einem Schrägstrich endet, passt Git nur auf dieses Verzeichnis und die Pfade darunter. Dadurch werden reguläre Dateien und symbolische Links von der Übereinstimmung ausgeschlossen.
  • Ein führender Schrägstrich findet alle Dateien in diesem Pfadnamen.
    • Beispiel: Das Muster /*.c wird mit der Datei foo.c pero no bar/awesome.c

Großes Beispiel aus dem gitignore(5) man-Seite:

$ git status
[...]
# Untracked files:
[...]
#       Documentation/foo.html
#       Documentation/gitignore.html
#       file.o
#       lib.a
#       src/internal.o
[...]
$ cat .git/info/exclude
  # ignore objects and archives, anywhere in the tree.
  *.[oa]
$ cat Documentation/.gitignore
# ignore generated html files,
*.html
# except foo.html which is maintained by hand
!foo.html
$ git status
[...]
# Untracked files:
[...]
#       Documentation/foo.html
[...]

Im Allgemeinen gibt es drei verschiedene Möglichkeiten, nicht verfolgte Dateien zu ignorieren.

1) Für alle Benutzer des Repositorys ignorieren:

Fügen Sie eine Datei namens .gitignore zur Wurzel Ihrer Arbeitskopie.

Modifier .gitignore an Ihre Präferenzen anpassen, welche Dateien ignoriert werden sollen und welche nicht.

git add .gitignore 

und bestätigen Sie, wenn Sie fertig sind.

2) Nur für Ihre Kopie des Repositorys ignorieren:

Hinzufügen/Bearbeiten der Datei $GIT_DIR/info/exclude in Ihrer Arbeitskopie mit den von Ihnen bevorzugten Mustern.

Beispiel: Meine Arbeitskopie ist ~/src/project1, also würde ich ~/src/project1/.git/info/exclude

Sie sind fertig!

3) In allen Situationen ignorieren, auf Ihrem System:

Globale Ignoriermuster für Ihr System können in einer Datei mit beliebigem Namen gespeichert werden.

Mein persönlicher Name ist ~/.gitglobalignore

Ich kann dann git von dieser Datei wissen lassen, indem ich meine ~/.gitconfig Datei mit der folgenden Zeile:

core.excludesfile = ~/.gitglobalignore

Sie sind fertig!

Ich finde die gitignore man-Seite ist die beste Quelle für weitere Informationen.

0 Stimmen

Könnte jemand bitte ein kleines, aber wichtiges Detail zu diesem Beitrag hinzufügen? Dies funktioniert nur für Dateien, die bereits nicht von Git verfolgt werden. Um eine Datei zu entfernen, sie aber im Dateisystem zu belassen, braucht man "git rm --cached filename". Vielen Dank!

0 Stimmen

Ich möchte nur anmerken, dass das Hinzufügen der Zeile core.excludesfile bei mir nicht funktioniert hat. Ich musste [git config --global core.excludesfile ~/.gitglobalignore] einfügen, damit es funktioniert.

0 Stimmen

Es gibt jetzt ein Projekt auf Github namens gitignore, das gitignore-Dateien für eine Vielzahl von Sprachen und Entwicklungsumgebungen enthält: github.com/github/gitignore

47voto

dbr Punkte 158949

Wie markiert man einen bestimmten Satz von Überarbeitungen?

Wie kann man einen bestimmten Satz von Revisionen für einen bestimmten Satz von Dateien "markieren", "kennzeichnen" oder "freigeben", so dass man ihn später immer wieder aufrufen kann?

Die Verwendung des git tag Befehl.

Um die aktuelle Revision einfach zu "markieren", würden Sie einfach

git tag -a thetagname
git tag -a 0.1
git tag -a 2.6.1-rc1 -m 'Released on 01/02/03'

Um die aktuellen Tags aufzulisten, führen Sie einfach git tag ohne Argumente, oder -l (Kleinbuchstabe L):

$ git tag -a thetagname # and enter a message, or use -m 'My tag annotation'
$ git tag -l
thetagname

Um ein Tag zu löschen, verwenden Sie die -d Flagge:

$ git tag -d thetagname 
Deleted tag 'thetagname'
$ git tag
[no output]

Um eine bestimmte (frühere) Übertragung zu markieren, tun Sie einfach.

git tag [tag name] [revision SHA1 hash]

Zum Beispiel:

git tag 1.1.1 81b15a68c6c3e71f72e766931df4e6499990385b

Hinweis: Git erstellt standardmäßig ein "leichtgewichtiges" Tag (im Grunde ein Verweis auf eine bestimmte Revision). Der "richtige" Weg ist die Verwendung des -a Flagge. Dies wird Ihren Editor starten und nach einer Tag-Nachricht fragen (identisch mit der Frage nach einer Commit-Nachricht, Sie können auch die -m Flag, um die Tag-Meldung auf der Befehlszeile anzugeben). Die Verwendung eines kommentierten Tags erzeugt ein Objekt mit eigener ID, Datum, Tagger (Autor) und optional einer GPG-Signatur (mit der Option -s Tag). Weitere Informationen hierzu finden Sie unter diese Stelle

git tag mytagwithmsg -a -m 'This is a tag, with message'

Und um die Tags mit Anmerkungen aufzulisten, verwenden Sie die -n1 Flagge, um 1 Zeile jeder Tag-Meldung anzuzeigen ( -n245 um die ersten 245 Zeilen jeder Anmerkung anzuzeigen, usw.):

$ git tag -l -n1
mytagwithmsg    This is a tag, with message

Weitere Informationen finden Sie in der git-tag(1) Handbuchseite

0 Stimmen

Trottel-Tag nicht standardmäßig Tags erstellen, sondern nur leichtgewichtige Referenzen. Sie müssen entweder -a oder -s verwenden, um ein Tag-Objekt zu erstellen (das von Dingen wie describe verwendet wird): rockstarprogrammer.org/post/2008/oct/16/

0 Stimmen

Ah, interessant. Danke, ich habe die Antwort aktualisiert, um dies zu berücksichtigen

0 Stimmen

Und wie kennzeichnet man eine bereits abgeschlossene Revision? (Tut mir leid, dass er zu lang ist, ich habe ihn nur überflogen, habe ich etwas verpasst?)

46voto

ashwoods Punkte 2139

Workflow-Beispiel mit GIT.

Git ist extrem flexibel und passt sich gut an jeden Arbeitsablauf an, aber wenn man einen bestimmten Arbeitsablauf nicht erzwingt, kann das dazu führen, dass man nicht versteht, was man mit Git über den linearen "Backup"-Arbeitsablauf hinaus tun kann und wie nützlich zum Beispiel Verzweigungen sein können.

Diese Blog-Beitrag erklärt sehr schön einen sehr einfachen, aber effektiven Arbeitsablauf, der mit Git wirklich einfach einzurichten ist.

Ich zitiere aus dem Blogbeitrag: Wir betrachten origin/master als den Hauptzweig, in dem der Quellcode von HEAD immer einen produktionsreifen Zustand widerspiegelt:

Der Arbeitsablauf ist so populär geworden, dass es ein Projekt gibt, das diesen Arbeitsablauf implementiert: git-flow

Eine schöne Illustration eines einfachen Arbeitsablaufs, bei dem man alle Änderungen in der Entwicklungsumgebung vornimmt und erst dann an den Master überträgt, wenn sich der Code im Produktionsstatus befindet:

simple workflow

Nehmen wir an, Sie möchten an einer neuen Funktion oder an der Überarbeitung eines Moduls arbeiten. Sie könnten einen neuen Zweig erstellen, den wir als "Feature"-Zweig bezeichnen könnten, etwas, das einige Zeit in Anspruch nehmen wird und bei dem vielleicht etwas Code kaputt geht. Sobald Ihr Feature "stabil genug" ist und Sie es "näher" an die Produktion heranführen wollen, führen Sie Ihren Feature-Zweig mit dem Entwicklungszweig zusammen. Wenn alle Bugs nach dem Merge beseitigt sind und Ihr Code alle Tests einwandfrei besteht, schieben Sie Ihre Änderungen in den Master-Zweig.

Während dieses Prozesses finden Sie einen schrecklichen Sicherheitsfehler, der sofort behoben werden muss. Sie könnten einen Zweig namens Hotfixes haben, der Änderungen vornimmt, die schneller in die Produktion zurückfließen als der normale "Entwicklungszweig".

Hier haben Sie eine Illustration, wie dieser Feature/Hotfix/Entwicklung/Produktion-Workflow aussehen könnte (gut erklärt im Blogpost, und ich wiederhole, der Blogpost erklärt den ganzen Prozess viel detaillierter und viel besser als ich.

Git workflow example

0 Stimmen

Ich bin ein Git-Neuling, und dieses Diagramm macht es mehr verwirrend für mich.

0 Stimmen

Welche, die erste oder die letzte? Ich wollte den Beitrag nicht zu lang machen, aber ich werde später eine kleine Erklärung zu beiden Diagrammen hinzufügen.

0 Stimmen

Lesen Sie den vollständigen Artikel. Auch mich hat dieses Diagramm verwirrt, aber der Blogbeitrag ist sehr gut geschrieben nvie.com/posts/a-successful-git-branching-model

39voto

Adam Davis Punkte 89506

Hier ist eine Kopie des Beitrags von PJ Hyett, da er nicht mehr verfügbar ist:

Git ist nicht schwer

23. November 2008

Wenn wir den Menschen sagen, warum sie Git statt Subversion verwenden sollten, lautet die häufigste ist: "Git kann Subversion besser als Subversion, aber es kann noch viel mehr als das."

Das "viel mehr" besteht aus einer Reihe von Dinge, die Git wirklich glänzen lassen, aber es kann ziemlich überwältigend sein für diejenigen, die von anderen SCMs wie Subversion.

Nichtsdestotrotz gibt es nichts, was die Git zu verwenden, genauso wie Sie Subversion zu verwenden, während Sie den Übergang.

Angenommen, Sie haben die Software installiert haben und über ein entferntes Repository haben, können Sie auf folgende Weise den Code holen und Ihre Änderungen Änderungen mit Subversion zurück:

$ svn checkout svn://foo.googlecode.com/svn/trunk foo
# make your changes
$ svn commit -m "my first commit"

Und wie würden Sie das in Git machen:

$ git clone git@github.com:pjhyett/foo.git
# make your changes
$ git commit -a -m "my first commit"
$ git push

Ein weiterer Befehl, um dies zu erreichen in Git. Dieser zusätzliche Befehl hat große Implikationen, aber für die Zwecke dieses dieses Beitrags ist das alles, worüber wir über einen zusätzlichen Befehl.

Sehen Sie, es ist wirklich nicht so schwer.

Aktualisierung: Ich wäre nachlässig, wenn ich nicht auch erwähnen würde, dass das Äquivalent der Aktualisierung Ihrer lokalen Kopie in Subversion im Vergleich zu Git ist svn update y git pull . Nur ein Befehl in beiden Fällen.

0 Stimmen

Im ersten Beispiel sehen Sie, dass Sie auf einen relativen Pfad auschecken ./foo aber es ist kein Pfad für den get clone angegeben, wohin wollen Sie auschecken?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X