it-swarm.com.de

Git für Anfänger: Die definitive praktische Anleitung

Ok, nachdem ich diesen Beitrag von PJ Hyett gesehen habe, habe ich beschlossen, zum Ende zu springen und mit Git fortzufahren.

Also, was ich brauche, ist ein praktischer Leitfaden für Anfänger für Git. "Anfänger" wird definiert als jemand, der weiß, wie man mit seinem Compiler umgeht, bis zu einem gewissen Grad versteht, was ein Makefile ist, und die Quellcodeverwaltung berührt hat, ohne sie sehr gut zu verstehen.

Als "praktisch" wird definiert, dass diese Person nicht sehr detailliert darauf eingehen möchte, was Git im Hintergrund tut, und sich nicht einmal darum kümmert (oder weiß), dass es verbreitet wird. Ihre Antworten mögen auf die Möglichkeiten hinweisen, aber versuchen Sie, den Anfänger zu erreichen, der ein "Haupt" -Repository auf einem "Server" speichern möchte, der gesichert und sicher ist, und dessen lokales Repository lediglich als "Client" -Ressource behandelt.

Damit:

Installation/Einrichtung

Mit dem Code arbeiten

Markieren, Verzweigen, Freigeben, Baselines

Andere

  • Beschreiben und verknüpfen Sie eine gute GUI, ein IDE Plugin usw., das Git zu einer Nicht-Befehlszeilen-Ressource macht. Nennen Sie jedoch bitte die Einschränkungen und Vorteile.
    • msysgit - Plattformübergreifend, in Git enthalten
    • gitk - Plattformübergreifender Verlaufs-Viewer, der in Git enthalten ist
    • 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 Extensions - Paket für Windows, enthält eine benutzerfreundliche Benutzeroberfläche
  • Gibt es noch andere Aufgaben, die Anfänger kennen sollten?
  • Wie arbeite ich effektiv mit einem Subversion-Repository, das als Versionsverwaltungsquelle festgelegt ist?

Andere Git Anfängerreferenzen

Eintauchen in Git

Ich werde die Einträge von Zeit zu Zeit durchgehen und sie "aufräumen", damit sie ein einheitliches Erscheinungsbild haben und es einfach ist, die Liste zu scannen extra info "vorlage. Ich werde auch auf die Einträge aus der Aufzählungsliste oben verweisen, damit sie später leichter zu finden sind.

854
Adam Davis

Wie legen Sie ein neues Projekt/Repository an?

Ein Git-Repository ist einfach ein Verzeichnis, das ein spezielles .git -Verzeichnis enthält.

Dies unterscheidet sich von "zentralisierten" Versionskontrollsystemen (wie Subversion), bei denen ein "Repository" auf einem Remote-Server gehostet wird, den Sie in einem "Arbeitskopie" -Verzeichnis checkout ablegen. Bei git ist Ihre Arbeitskopie das Repository .

Führen Sie einfach git init in dem Verzeichnis aus, das die Dateien enthält, die Sie verfolgen möchten.

Zum Beispiel,

cd ~/code/project001/
git init

Dadurch wird im aktuellen Verzeichnis ein .git (versteckter) Ordner erstellt.

Um ein neues Projekt zu erstellen, führen Sie git init mit einem zusätzlichen Argument (dem Namen des zu erstellenden Verzeichnisses) aus:

git init project002

(This is equivalent to: mkdir project002 && cd project002 && git init)

Um zu überprüfen, ob sich der aktuelle Pfad in einem Git-Repository befindet, führen Sie einfach git status aus. Wenn es sich nicht um ein Repository handelt, wird "Fatal: Kein Git-Repository" gemeldet.

Sie können auch das Verzeichnis .git auflisten und prüfen, ob es Dateien/Verzeichnisse enthält, die den folgenden ähneln:

$ ls .git
HEAD         config       hooks/       objects/
branches/    description  info/        refs/

Wenn Sie aus irgendeinem Grund ein Repository "de-giten" möchten (Sie möchten nicht mehr git verwenden, um dieses Projekt zu verfolgen). Entfernen Sie einfach das Verzeichnis .git auf der Basisebene des Repositorys.

cd ~/code/project001/
rm -rf .git/

Achtung: Dies zerstört alle Änderungsprotokolle, alle Ihre Tags, alles, was Git getan hat. Die "aktuellen" Dateien (die derzeit angezeigten Dateien) werden nicht berührt, aber vorherige Änderungen, gelöschte Dateien usw. können nicht wiederhergestellt werden!

118
dbr

GUIs für Git


Git GUI

In git enthalten - Führen Sie git gui über die Befehlszeile aus, und das Windows msysgit -Installationsprogramm fügt es dem Startmenü hinzu.

Git GUI kann einen Großteil dessen tun, was Sie mit Git tun müssen. Einschließlich Stage-Änderungen, Konfiguration von Git und Repositorys, Push-Änderungen, Erstellen/Auschecken/Löschen von Zweigen, Zusammenführen und vielen anderen Dingen.

Eine meiner Lieblingsfunktionen sind die Verknüpfungen "Stage Line" und "Stage Hunk" im Kontextmenü, mit denen Sie bestimmte Teile einer Datei festschreiben können. Sie können dasselbe über git add -i erreichen, aber ich finde es einfacher zu bedienen.

Es ist nicht die schönste Anwendung, funktioniert aber auf fast allen Plattformen (basierend auf Tcl/Tk)

Screenshots | ein Screencast


GitK

Auch mit git enthalten. Es ist ein Git-Verlaufs-Viewer, mit dem Sie den Verlauf eines Repositorys (einschließlich der Zweige, wenn sie erstellt und zusammengeführt werden) visualisieren können. Sie können Commits anzeigen und suchen.

Passt gut zu Git-Gui.


Gitnub

Mac OS X-Anwendung. Hauptsächlich ein Äquivalent von git log, hat aber eine gewisse Integration mit github (wie die "Netzwerkansicht").

Sieht hübsch aus und passt zu Mac OS X. Sie können Repositorys durchsuchen. Die größte Kritik an Gitnub ist, dass es die Geschichte linear darstellt (jeweils ein Zweig) - es wird kein Verzweigen und Zusammenführen angezeigt, was bei Git wichtig sein kann, obwohl dies eine geplante Verbesserung ist.

Download-Links, Änderungsprotokoll und Screenshots | Git-Repository


GitX

Beabsichtigt, ein "Gitk-Klon für OS X" zu sein.

Es kann den Verlauf von nichtlinearen Verzweigungen visualisieren, Commits ausführen, Commits anzeigen und durchsuchen und verfügt über einige andere nützliche Funktionen, z (per Drag & Drop).

Es ist weitaus besser in OS X integriert als git-gui/gitk und ist auch bei außergewöhnlich großen Repositorys schnell und stabil.

Das ursprüngliche Git-Repository pieter wurde in letzter Zeit nicht aktualisiert (mehr als ein Jahr zum Zeitpunkt des Schreibens). Ein aktiver gepflegter Zweig ist verfügbar unter brotherbard/gitx - er fügt "Sidebar, Fetch, Pull, Push, Remote hinzufügen, Merge, Cherry-Pick, Rebase, Clone, Clone to" hinzu

Download | Screenshots | Git-Repository | Brudergabel | Waschgabel


SmartGit

Von der Homepage:

SmartGit ist ein Frontend für das verteilte Versionskontrollsystem Git und läuft unter Windows, Mac OS X und Linux. SmartGit ist für Entwickler gedacht, die eine grafische Benutzeroberfläche gegenüber einem Befehlszeilenclient bevorzugen, um mit Git - dem derzeit leistungsstärksten DVCS - noch produktiver zu werden.

Sie können es von deren Website herunterladen.

Download


TortoiseGit

TortoiseSVN Git Version für Windows Benutzer.

Es portiert TortoiseSVN nach TortoiseGit. Die neueste Version 1.2.1.0 Diese Version kann reguläre Aufgaben erledigen, z. Siehe ReleaseNotes für Details. Willkommen, um dieses Projekt beizutragen.

Download


QGit

QGit ist ein auf Qt/C++ basierender Git-GUI-Viewer.

Mit qgit können Sie den Revisionsverlauf durchsuchen, Patch-Inhalte und geänderte Dateien anzeigen und dabei verschiedenen Entwicklungszweigen grafisch folgen.

Download


gitg

gitg ist ein Git-Repository-Viewer, der auf gtk +/GNOME abzielt. Eines der Hauptziele ist es, eine einheitlichere Benutzererfahrung für Git-Frontends auf mehreren Desktops bereitzustellen. Dabei wird keine plattformübergreifende Anwendung geschrieben, sondern in enger Zusammenarbeit mit ähnlichen Clients für andere Betriebssysteme (wie GitX für OS X).

Eigenschaften

  • Durchsuchen Sie den Revisionsverlauf.
  • Behandeln Sie große Repositorys (lädt Linux-Repository, 17000+ Revisionen, unter 1 Sekunde).
  • Änderungen übernehmen.
  • Einzelne Hunks inszenieren/absetzen.
  • Änderungen rückgängig machen.
  • Zeige eingefärbte Unterschiede von Änderungen in Überarbeitungen.
  • Durchsuchen Sie den Baum nach einer bestimmten Revision.
  • Exportiert Teile des Baums einer bestimmten Revision.
  • Geben Sie eine beliebige Referenzspezifikation an, die ein Befehl wie 'git log' zum Erstellen des Verlaufs verstehen kann.
  • Anzeigen und Wechseln zwischen Zweigen in der Verlaufsansicht.

Download: Veröffentlichungen oder Quelle


Gitbox

Gitbox ist eine grafische Oberfläche für Mac OS X für das Git-Versionskontrollsystem. In einem einzigen Fenster sehen Sie die Zweige, den Verlauf und den Status des Arbeitsverzeichnisses.

Der alltägliche Betrieb ist einfach: Änderungen an der Bühne und auf der Bühne mit einer Checkbox. Commit, Pull, Merge und Push mit einem Klick. Doppelklicken Sie auf eine Änderung, um ein Diff mit FileMerge.app anzuzeigen.

Download


Gity

Die Gity-Website enthält nicht viele Informationen, aber aus den Screenshots geht hervor, dass es sich um eine funktionsreiche Open-Source-OS-X-Git-GUI handelt.

Download oder Quelle


Meld

Meld ist ein visuelles Tool zum Vergleichen und Zusammenführen. Sie können zwei oder drei Dateien vergleichen und an Ort und Stelle bearbeiten (Unterschiede werden dynamisch aktualisiert). Sie können zwei oder drei Ordner vergleichen und Dateivergleiche starten. Sie können eine Arbeitskopie aus gängigen Versionskontrollsystemen wie CVS, Subversion, Bazaar-ng und Mercurial [ und Git ] durchsuchen und anzeigen.

Downloads


Katana

Eine Git GUIfor OSX von Steve Dekorte.

Sehen Sie auf einen Blick, welche Remote-Zweige Änderungen zu ziehen haben und welche lokalen Repos Änderungen zu Push haben. Die Optionen "Hinzufügen", "Festschreiben", "Drücken", "Ziehen", "Kennzeichnen" und "Zurücksetzen" werden ebenso unterstützt wie visuelle Unterschiede und das visuelle Durchsuchen der Projekthierarchie, die lokale Änderungen und Ergänzungen hervorheben.

Kostenlos für 1 Repository, 25 US-Dollar für mehr.

Download


Sprout (ehemals GitMac)

Konzentriert sich darauf, Git benutzerfreundlich zu machen. Bietet eine native Cocoa (Mac-ähnliche) Benutzeroberfläche, schnelles Durchsuchen des Repository, Klonen, Push/Pull, Verzweigen/Zusammenführen, visuelles Vergleichen, Remote-Verzweigen, einfachen Zugriff auf das Terminal und vieles mehr.

Sprout (ehemals GitMac) macht Git benutzerfreundlich, indem es die am häufigsten verwendeten Git-Aktionen intuitiv und einfach ausführbar macht. Sprout ist mit den meisten Git-Workflows kompatibel und eignet sich sowohl für Designer als auch für Entwickler, für die Zusammenarbeit im Team sowie für fortgeschrittene und unerfahrene Benutzer.

Download | Website


Turm

Eine funktionsreiche Git-GUI für Mac OSX. 30-tägige kostenlose Testversion, 59 USD für eine Einzelplatzlizenz.

Download | Website


EGit

EGit ist ein Eclipse Team-Anbieter für das Git-Versionskontrollsystem. Git ist ein verteiltes SCM, dh jeder Entwickler verfügt über eine vollständige Kopie des gesamten Verlaufs jeder Revision des Codes, wodurch Abfragen zum Verlauf sehr schnell und vielseitig sind.

Das EGit-Projekt implementiert Eclipse-Tools zusätzlich zur JGit Java -Implementierung von Git.

Download | Website


Git Extensions

Open Source für Windows - Installiert alles, was Sie für die Arbeit mit Git benötigen, in einem einzigen Paket, das einfach zu bedienen ist.

Git Extensions ist ein Toolkit, mit dem Sie die Arbeit mit Git unter Windows intuitiver gestalten können. Die Shell-Erweiterung wird in Windows Explorer integriert und bietet ein Kontextmenü für Dateien und Verzeichnisse. Es gibt auch ein Visual Studio-Plugin, um Git aus Visual Studio zu verwenden.

Download

Vielen Dank an dbr für die Ausarbeitung des Git-Gui-Materials.


SourceTree

SourceTree ist ein kostenloser Mac-Client für Git, Mercurial und SVN. Es wurde von Atlassian, den Leuten hinter BitBucket, entwickelt und scheint mit jedem VC - System gleich gut zu funktionieren, sodass Sie ein einziges Tool für die Verwendung mit all Ihren Projekten beherrschen können, auch wenn diese versionskontrolliert sind. Vollgepackt und KOSTENLOS.

Bereit für Experten und mit zahlreichen Funktionen für Anfänger und Fortgeschrittene:

Überprüfen Sie ausgehende und eingehende Änderungssätze. Cherry-Pick zwischen den Zweigen. Patch-Handling, Rebase, Stash/Shelve und vieles mehr.

Download | Website


110
dylanfm

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 gewachsene (und wachsende) Community-Ressource gibt, die wirklich ziemlich gut ist: das Git Community Book . Im Ernst, diese mehr als 20 Fragen in einer Frage werden alles andere als prägnant und konsistent sein. Das Git Community Book ist sowohl als HTML als auch alsPDFverfügbar und beantwortet viele Ihrer Fragen mit klaren, gut formatierten und von Experten überprüften Antworten in einem Format, mit dem Sie direkt zu Ihrem Problem gelangen.

Ach, wenn mein Beitrag dich wirklich stört, werde ich ihn löschen. Sag es einfach.

59
Pat Notz

So konfigurieren Sie es zum Ignorieren von Dateien:

Die Möglichkeit, Dateien, die Sie nicht verfolgen möchten, von git ignorieren zu lassen, ist sehr nützlich.

Um eine Datei oder mehrere Dateien zu ignorieren, geben Sie ein Muster ein. Die Mustersyntax für Git ist recht einfach, aber leistungsstark. Es gilt für alle drei verschiedenen Dateien, die ich unten erwähnen werde.

  • Eine leere Zeile ignoriert keine Dateien, sie wird normalerweise als Trennzeichen verwendet.
  • Zeilen mit # dienen als Kommentare.
  • Das Präfix ! ist optional und negiert das Muster. Jedes negierte Muster, das übereinstimmt, überschreibt Muster mit niedrigerer Priorität.
  • Unterstützt erweiterte Ausdrücke und Platzhalter
    • Beispiel: Das Muster: *. [Oa] ignoriert alle Dateien im Repository, die mit .o oder .a enden (Objekt- und Archivdateien).
  • Wenn ein Muster ein Verzeichnis hat, das mit einem Schrägstrich endet, stimmt git nur mit diesem Verzeichnis und den Pfaden darunter überein. Dies schließt reguläre Dateien und symbolische Links vom Spiel aus.
  • Ein führender Schrägstrich entspricht allen Dateien in diesem Pfadnamen.
    • Beispiel: Das Muster /*. C entspricht der Datei foo.c aber nicht bar/awesome.c

Tolles Beispiel aus der gitignore (5) Manpage:

$ 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, um nicht verfolgte Dateien zu ignorieren.

1) Für alle Benutzer des Repository ignorieren:

Fügen Sie eine Datei mit dem Namen . Gitignore zum Stammverzeichnis Ihrer Arbeitskopie hinzu.

Bearbeiten Sie . Gitignore , um Ihren Einstellungen zu entsprechen, für die Dateien ignoriert werden sollen.

git add .gitignore 

und festschreiben, wenn Sie fertig sind.

2) Ignorieren Sie nur Ihre Kopie des Repositorys:

Fügen Sie die Datei $ GIT_DIR/info/exclude in Ihrer Arbeitskopie mit Ihren bevorzugten Mustern hinzu bzw. bearbeiten Sie sie.

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

Sie sind fertig!

3) Ignorieren Sie in allen Situationen auf Ihrem System:

Globale Ignoriermuster für Ihr System können in eine Datei mit dem gewünschten Namen geschrieben werden.

Meins persönlich heißt ~/.gitglobalignore

Ich kann git dann von dieser Datei in Kenntnis setzen, indem ich meine Datei ~/.gitconfig mit der folgenden Zeile bearbeite:

core.excludesfile = ~/.gitglobalignore

Sie sind fertig!

Ich finde die gitignore Manpage die beste Ressource für weitere Informationen.

56

Wie können Sie einen bestimmten Satz von Revisionen mit Tags versehen?

Wie können Sie einen bestimmten Satz von Revisionen für einen bestimmten Satz von Dateien markieren oder freigeben, damit Sie diese später immer wieder abrufen können?

Verwenden Sie den Befehl git tag.

Um die aktuelle Revision einfach zu "taggen", führen Sie einfach Folgendes aus.

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 aus (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 das -d Flag:

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

Um ein bestimmtes (vorheriges) Commit zu markieren, müssen Sie nur.

git tag [tag name] [revision SHA1 hash]

Zum Beispiel:

git tag 1.1.1 81b15a68c6c3e71f72e766931df4e6499990385b

Hinweis: Standardmäßig erstellt git ein "Lightweight" -Tag (im Grunde genommen ein Verweis auf eine bestimmte Revision). Der "richtige" Weg besteht darin, das -a -Flag zu verwenden. Dadurch wird der Editor gestartet, der nach einer Tag-Nachricht fragt (genau wie nach einer Commit-Nachricht können Sie auch das -m -Flag verwenden, um die Tag-Nachricht in der Befehlszeile bereitzustellen). Bei Verwendung eines mit Anmerkungen versehenen Tags wird ein Objekt mit einer eigenen ID, einem Datum, einem Tagger (Autor) und optional einer GPG-Signatur (unter Verwendung des Tags -s) erstellt. Weitere Informationen hierzu finden Sie unter dieser Beitrag

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

Um die Tags mit Anmerkungen aufzulisten, verwenden Sie das Flag -n1, um 1 Zeile jeder Tag-Nachricht 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) Manual Page

47
dbr

Workflow-Beispiel mit GIT.

Git ist extrem flexibel und passt sich jedem Workflow an. Wenn Sie jedoch einen bestimmten Workflow nicht erzwingen, kann dies dazu führen, dass Sie nur schwer nachvollziehen können, was Sie mit git jenseits des linearen "Backup" -Workflows tun können und wie nützlich beispielsweise das Verzweigen sein kann .

Dieser Blog-Beitrag erklärt einen sehr einfachen, aber effektiven Workflow, der mit git sehr einfach einzurichten ist.

zitat aus dem Blogpost: Wir betrachten Origin/Master als den Hauptzweig, in dem der Quellcode von HEAD immer einen produktionsbereiten Zustand widerspiegelt:

Der Workflow wurde populär genug, um ein Projekt zu erstellen, das diesen Workflow implementiert: git-flow

Schöne Illustration eines einfachen Workflows, in dem Sie alle Änderungen an der Entwicklung vornehmen und nur Push-to-Master, wenn sich der Code in einem Produktionsstatus befindet:

simple workflow

Angenommen, Sie möchten an einer neuen Funktion arbeiten oder ein Modul umgestalten. Sie könnten einen neuen Zweig erstellen, den wir als "Feature" -Zweig bezeichnen. Dies kann einige Zeit in Anspruch nehmen und Code beschädigen. Sobald Ihr Feature "stabil genug" ist und es "näher an die Produktion rücken" möchte, führen Sie Ihren Feature-Zweig in "Develop" zusammen. Wenn alle Fehler nach dem Zusammenführen behoben sind und Ihr Code alle Tests absolut bestanden hat, übernehmen Sie Ihre Änderungen in master.

Während dieses gesamten Vorgangs stößt man auf 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ückgeschoben werden als der normale "Entwicklungs" -Zweig.

Hier haben Sie eine Illustration, wie dieser Feature-/Hotfix-/Entwicklungs-/Produktions-Workflow aussehen könnte (gut erklärt im Blog-Post, und ich wiederhole, der Blog-Post erklärt den gesamten Prozess viel detaillierter und viel besser als ich .

Git workflow example

46
ashwoods

Hier ist eine Kopie von PJ Hyetts Beitrag, da er nicht mehr verfügbar ist:

Git ist nicht schwer

23. November 2008

Wenn wir den Leuten sagen, warum sie Git statt Subversion verwenden sollen, lautet die Go-To-Zeile: "Git macht Subversion besser als Subversion, aber es macht viel mehr als das."

Das "viel mehr" besteht aus einer Reihe von Dingen, die Git wirklich zum Leuchten bringen, aber es kann für diejenigen, die von anderen SCMs wie Subversion stammen, ziemlich überwältigend sein.

Nichts hindert Sie jedoch daran, Git so zu verwenden, wie Sie Subversion während des Übergangs verwenden.

Angenommen, Sie haben die erforderliche Software installiert und haben irgendwo ein Remote-Repository. So würden Sie den Code abrufen und Ihre Änderungen mit Subversion zurückschreiben:

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

Und wie würden Sie es in Git tun:

$ git clone [email protected]:pjhyett/foo.git
# make your changes
$ git commit -a -m "my first commit"
$ git Push

Ein weiterer Befehl, um dies in Git zu ermöglichen. Dieser zusätzliche Befehl hat große Auswirkungen, aber für die Zwecke dieses Beitrags ist das alles, worüber wir sprechen, ein zusätzlicher Befehl.

Sehen Sie, es ist wirklich nicht so schwer.

pdate: Ich möchte nicht erwähnen, dass das Äquivalent zum Aktualisieren Ihrer lokalen Kopie in Subversion im Vergleich zu Git svn update bzw. git pull ist. In beiden Fällen nur ein Befehl.

39
Adam Davis

Wie installiert man Git

Unter Windows:

Installieren Sie msysgit

Es gibt verschiedene Downloads:

  • Git: Verwenden Sie diese Option, es sei denn, Sie benötigen speziell eine der folgenden Optionen.
  • PortableGit: Verwenden Sie diese Option, wenn Sie Git auf einem PC ausführen möchten, ohne auf diesem PC zu installieren (z. B. Git von einem USB-Laufwerk ausführen zu müssen).
  • msysGit: Verwenden Sie dies, wenn Sie Git selbst entwickeln möchten. Wenn Sie Git nur für Ihr Quellcode verwenden möchten, aber nicht Gits Quellcode bearbeiten möchten, benötigen Sie diesen nicht.

Dadurch wird auch eine Cygwin-Bash-Shell installiert, sodass Sie git in einer schöneren Shell (als cmd.exe) verwenden können. Dazu gehört auch git-gui (über den Befehl git gui oder den Befehl Start > All Programs > Git verfügbar) ]_ Speisekarte)

Mac OS X

Verwenden Sie das git-osx-installer , oder Sie können auch von der Quelle installieren

Über einen Paketmanager

Installieren Sie git mit Ihrem nativen Paketmanager. Zum Beispiel unter Debian (oder Ubuntu):

apt-get install git-core

Oder unter Mac OS X über MacPorts :

Sudo port install git-core+bash_completion+doc

… Oder fink:

fink install git

… Oder Homebrew :

brew install git

Auf Red Hat-basierten Distributionen wie Fedora:

yum install git

In Cygwin finden Sie das Git-Paket im Abschnitt "devel"

Aus der Quelle (Mac OS X/Linux/BSD/etc.)

Wenn Sie unter Mac OS X die Entwicklertools installiert haben, können Sie Git ganz einfach aus dem Quellcode kompilieren. Lade die neueste Version von Git als .tar.bz oder .tar.gz von http://git-scm.com/ herunter und extrahiere sie (Doppelklick im Finder)

Unter Linux/BSD/etc. es sollte ähnlich sein. Beispielsweise müssen Sie in Debian (und Ubuntu) das Paket build-essential über apt installieren.

Dann in einem Terminal cd, wo Sie die Dateien extrahiert haben (Running cd ~/Downloads/git*/ sollte funktionieren), und dann ausführen ..

./configure && make && Sudo make install

Dadurch wird Git an der Standardposition installiert (/usr/local - also git in /usr/local/bin/git).

Sie werden aufgefordert, Ihr Passwort einzugeben (für Sudo), damit es in das Verzeichnis /usr/local/ geschrieben werden kann, auf das nur der Benutzer "root" zugreifen kann, sodass Sudo erforderlich ist!

Wenn Sie es an einem separaten Ort installieren möchten (damit die Dateien von Git nicht mit anderen Tools gemischt werden), verwenden Sie --prefix mit dem Befehl configure:

./configure --prefix=/usr/local/gitpath
make
Sudo make install

Dadurch wird die Binärdatei git in /usr/local/bin/gitpath/bin/git installiert. Sie müssen diese also nicht jedes Mal eingeben, wenn Sie in $PATH die folgende Zeile in ~/.profile einfügen ] _:

export PATH="${PATH}:/usr/local/bin/gitpath/bin/"

Wenn Sie keinen Sudo-Zugriff haben, können Sie --prefix=/Users/myusername/bin verwenden und in Ihr Home-Verzeichnis installieren. Denken Sie daran, ~/bin/ zu $PATH hinzuzufügen

Das Skript x-git-update-to-latest-version automatisiert vieles davon:

Dieses Skript aktualisiert meinen lokalen Klon des Git-Repos (lokal bei ~/work/track/git) und konfiguriert, installiert (bei /usr/local/git-git describe) und aktualisiert den /usr/local/git-Symlink.

Auf diese Weise kann ich /usr/local/git/bin in meinem PATH haben und ich verwende immer die neueste Version.

Die neueste Version dieses Skripts installiert auch die Manpages. Sie müssen Ihr MANPATH optimieren, um das /usr/local/git/share/man -Verzeichnis einzuschließen.

33
dbr

Git Reset

Angenommen, Sie führen einen Pull aus, fügen ihn in Ihren Code ein und entscheiden, dass Sie ihn nicht mögen. Verwenden Sie git-log oder tig und suchen Sie den Hash von wo immer Sie zurück wollen (wahrscheinlich Ihren letzten Commit vor dem Pull/Merge), kopieren Sie den Hash und machen Sie Folgendes:

# Revert to a previous commit by hash:
git-reset --hard <hash>

Anstelle des Hashs können Sie HEAD ^ als Abkürzung für das vorherige Commit verwenden.

# Revert to previous commit:
git-reset --hard HEAD^
32
Dean Rather

Wie richten Sie ein gemeinsam genutztes Team-Repository ein?

Wie Sie ein normales Repository einrichten, wird hier beschrieben - aber wie richten Sie ein Team-Repository ein, das jeder abrufen kann und von und nach schieben?

Verwenden eines freigegebenen NFS-Dateisystems

Angenommen, Ihr Team verfügt bereits über eine gemeinsame Gruppenzugehörigkeit, die verwendet werden kann.

mkdir /your/share/folder/project.git
cd /your/share/folder/project.git
newgrp yourteamgroup # if necessary
git init --bare --shared

Um dieses Repository zu verwenden, starten Sie am einfachsten von einem lokalen Repository aus, das Sie bereits verwendet haben:

cd your/local/workspace/project
git remote add Origin /your/share/folder/project.git
git Push Origin master

Andere können dies nun klonen und mit der Arbeit beginnen:

cd your/local/workspace
git clone /your/share/folder/project.git

Verwendung von SSH

Richten Sie ein Benutzerkonto auf dem Zielserver ein. Ob Sie ein Konto ohne Kennwort, ein Konto mit Kennwort oder authorized_keys verwenden, hängt wirklich von der erforderlichen Sicherheitsstufe ab. Schauen Sie sich Git über SSH konfigurieren an, um weitere Informationen zu erhalten.

Wenn alle Entwickler dasselbe Konto für den Zugriff auf dieses freigegebene Repository verwenden, müssen Sie die Option --shared nicht wie oben verwenden.

Nachdem Sie das Repository auf die gleiche Weise wie oben aufgerufen haben, führen Sie den ersten Push folgendermaßen aus:

cd your/local/workspace/project
git remote add Origin [email protected]:/path/to/project.git
git Push Origin master

Sehen Sie die Ähnlichkeit mit dem oben genannten? Das Einzige, was zusätzlich passieren kann, ist, dass SSH nach einem Passwort fragt, wenn das Konto ein Passwort hat. Wenn Sie diese Eingabeaufforderung für ein Konto ohne Kennwort erhalten, hat der SSH-Server möglicherweise PermitEmptyPasswords deaktiviert.

Das Klonen sieht jetzt so aus:

cd your/local/workspace
git clone [email protected]:/path/to/project.git
31

git status ist dein Freund, benutze es oft. Gut für die Beantwortung von Fragen wie:

  • Was hat dieser Befehl gerade getan?
  • In welchem ​​Zweig bin ich?
  • Welche Änderungen werde ich vornehmen und habe ich etwas vergessen?
  • War ich in der Mitte von etwas, als ich das letzte Mal an diesem Projekt gearbeitet habe (vor Tagen, Wochen oder vielleicht Monaten)?

Im Gegensatz dazu wird svn status, git status auch bei großen Projekten sofort ausgeführt. Ich fand es oft beruhigend, während ich Git lernte, es häufig zu benutzen, um sicherzustellen, dass mein mentales Modell dessen, was vor sich ging, genau war. Jetzt benutze ich es meistens nur, um mich daran zu erinnern, was ich seit meinem letzten Commit geändert habe.

Natürlich ist es viel nützlicher, wenn Ihr .gitignore ordnungsgemäß konfiguriert ist.

28
Peter Burns

Änderungen übernehmen

Sobald Sie eine Datei bearbeitet haben, müssen Sie Ihre Änderungen an git übergeben. Wenn Sie diesen Befehl ausführen, werden Sie nach einer Festschreibungsmeldung gefragt. Hierbei handelt es sich lediglich um einen einfachen Text, der allen mitteilt, was Sie geändert haben.

$ git commit source/main.c

Überträgt die Datei main.c in das Verzeichnis ./source/

$ git commit -a # the -a flag pulls in all modified files

schreibt alle geänderten Dateien fest (aber keine neuen Dateien, diese müssen mit git-add zum Index hinzugefügt werden). Wenn Sie nur bestimmte Dateien festschreiben möchten, müssen Sie sie zuerst mit git-add bereitstellen und dann ohne das Flag -a festschreiben.

Durch das Festschreiben wird nur Ihr lokales Repository geändert, nicht jedoch die Remote-Repositorys. Wenn Sie die Commits an das Remote-Repository senden möchten, müssen Sie einen Push ausführen.

$ git Push <remote> <branch> # Push new commits to the <branch> on the <remote> repository

Für jemanden, der von CVS oder SVN kommt, ist dies eine Änderung, da das Festschreiben an das zentrale Repository jetzt zwei Schritte erfordert.

27
Adam Davis

Wie verzweigen Sie?

Der Standardzweig in einem Git-Repository heißt master.

Verwenden Sie zum Erstellen eines neuen Zweigs

git branch <branch-name>

Anzeigen einer Liste aller Zweige im aktuellen Repository-Typ

git branch

Wenn Sie zu einem anderen Zweig wechseln möchten, können Sie verwenden

git checkout <branch-name>

So erstellen Sie einen neuen Zweig und wechseln in einem Schritt dorthin

git checkout -b <branch-name>

Verwenden Sie, um einen Zweig zu löschen

git branch -d <branch-name>

So erstellen Sie einen Zweig mit den Änderungen aus dem aktuellen Zweig:

git stash
git stash branch <branch-name>
27
Markus Dulghier

Den neuesten Code erhalten

$ git pull <remote> <branch> # fetches the code and merges it into 
                             # your working directory
$ git fetch <remote> <branch> # fetches the code but does not merge
                              # it into your working directory

$ git pull --tag <remote> <branch> # same as above but fetch tags as well
$ git fetch --tag <remote> <branch> # you get the idea

Das deckt so ziemlich jeden Fall ab, um die neueste Kopie des Codes aus dem Remote-Repository zu erhalten.

21
Jeremy Wall

Das Pro Git freie Buch ist definitiv mein Favorit, besonders für Anfänger.

20
aldux

Git Magic ist alles, was Sie jemals brauchen werden. Garantiert oder Geld zurück!

18
Andrew

Ich habe auch festgestellt, dass Git Internals sehr nützlich ist. Es wurde von Scott Chacon (Autor von Pro Git und Betreuer des Git Community Book) geschrieben. Was ich an Git Internals mag, ist konzentriert sich zuerst auf die Konzepte und dann auf die Befehle und da es ~ 100 kleine Seiten sind, ist es schnell verdaulich.

16
Jordan

Wie verschmelzen Sie Niederlassungen?

Wenn Sie einen Zweig zusammenführen möchten (z. B. master bis release), stellen Sie sicher, dass Ihr aktueller Zweig der Zielzweig ist, in den Sie zusammenführen möchten (verwenden Sie git branch oder git status, um Ihren aktuellen Zweig zu sehen).

Dann benutze

git merge master

(wobei master der Name des Zweigs ist, den Sie mit dem aktuellen Zweig zusammenführen möchten).

Bei Konflikten können Sie verwenden

git diff

um anstehende Konflikte zu erkennen, müssen Sie diese lösen.

16
Markus Dulghier

Wie sehen Sie den Verlauf der Überarbeitungen einer Datei?

git log -- filename

So verfolgen Sie entfernte Zweige

Angenommen, es gibt ein Remote-Repository, aus dem Sie Ihr lokales Repository geklont haben, und es gibt einen Zweig namens 'some_branch' in diesem Remote-Repository.

# list remote branches
git branch -r

# start tracking one remote branch
git branch --track some_branch Origin/some_branch

# change to the branch locally
git checkout some_branch

# make changes and commit them locally
....

# Push your changes to the remote repository:
git Push
12
innaM

Ein wirklich gutes Papier, um zu verstehen, wie Git funktioniert, ist The Git Parable . Sehr zu empfehlen!

11
EricSchaefer

Wie vergleichst du zwei Revisionen einer Datei oder deine aktuelle Datei und eine frühere Revision?

Der Vergleichsbefehl lautet git diff.

So vergleichen Sie 2 Revisionen einer Datei:

$ git diff <commit1> <commit2> <file_name>

Das unterscheidet commit1 von commit2. Wenn Sie die Reihenfolge ändern, werden die Dateien umgekehrt abgeglichen. Dies entspricht möglicherweise nicht Ihren Erwartungen.

So vergleichen Sie die aktuell bereitgestellte Datei mit dem Repository:

$ git diff --staged <file_name>

So vergleichen Sie die aktuelle nicht bereitgestellte Datei mit dem Repository:

$ git diff <file_name>
10
kret

Warum noch ein Howto? Es gibt wirklich gute im Netz, wie die Git-Anleitung , die perfekt ist, um zu beginnen. Es hat gute Links, einschließlich des Git-Buch , zu dem man beitragen kann (auf Git-Hub gehostet) und das perfekt für diese kollektive Aufgabe ist.

Am liebsten würde ich mir beim Stackoverflow deine Lieblingstricks ansehen!

Meins, das ich erst kürzlich entdeckt habe, ist git stash, erklärt hier , mit dem Sie Ihren aktuellen Job speichern und in eine andere Filiale wechseln können

BEARBEITEN: wie im vorherigen Beitrag, wenn Sie wirklich Stackoverlow-Format mit Beiträgen als Wiki bevorzugen, werde ich diese Antwort löschen

9
Piotr Lesnicki

Console UI - Tig

Installation:

apt-get install tig

Verwendungszweck

Geben Sie in einem Git-Repo 'tig' ein, um ein interaktives Protokoll anzuzeigen, und drücken Sie in einem Protokoll die Eingabetaste, um weitere Informationen zu diesem Protokoll anzuzeigen. h Hilfe, in der die grundlegenden Funktionen aufgelistet sind.

Trivia

"Tig" ist "Git" rückwärts.

9
Dean Rather

Wie lösche ich eine Filiale in einem Remote-Repository?

Führen Sie mit : vor dem Namen des Zweigs einen Push in Ihrer Fernbedienung aus

git Push Origin :mybranchname

Origin der Name Ihrer Fernbedienung und mybranchname der Name des Zweigs, der gelöscht werden soll

http://help.github.com/remotes/

8
Felipe Sabino

Wie kann ich eine Filiale in einem Remote-Repository erstellen?

Angenommen, Sie haben Ihr Remote-Repository von einem einzelnen Remote-Repository geklont.

# create a new branch locally
git branch name_of_branch
git checkout name_of_branch
# edit/add/remove files    
# ... 
# Commit your changes locally
git add fileName
git commit -m Message
# Push changes and new branch to remote repository:
git Push Origin name_of_branch:name_of_branch
8
innaM

Ich habe mit dem offiziellen Git-Tutorial angefangen. Ich denke, es ist praktisch genug für Anfänger (ich war und bin nach Ihrer Definition ein Anfänger! Ich verstehe Makefiles kaum, ich habe nur ein bisschen mit Apache Subversion usw. gespielt).

8
hasen

Code auschecken

Wechseln Sie zunächst in ein leeres Verzeichnis, machen Sie es mit "git init" zu einem Repository, und klonen Sie dann das Remote-Repository in Ihr eigenes.

git clone [email protected]:/dir/to/repo

Überall, wo Sie anfänglich klonen, wird standardmäßig "git pull" verwendet.

7
Dean Rather

Änderungen drücken und ziehen

Vereinfacht gesagt, machen Sie einfach git Push und git pull. Änderungen werden zusammengeführt, und wenn ein Konflikt vorliegt, werden Sie darüber informiert, und Sie können ihn manuell lösen.

Wenn Sie das erste Mal auf ein Remote-Repository pushen, müssen Sie einen git Push Origin master ausführen (Master ist der Master-Zweig). Von da an machst du einfach den git Push.

Tags mit git Push --tags verschieben.

7
dylanfm
7
gngrwzrd

Wenn Sie gute GUIs/Frontends haben, sollten Sie auch qgit ausprobieren, das ein plattformübergreifender (Linux/Win32) Repository-Viewer für Git ist und auch als High-Level-Frontend für die gängigsten Git verwendet werden kann Operationen, in der Tat kann es leicht durch sogenannte "benutzerdefinierte Aktionen" erweitert werden, so dass Benutzer benutzerdefinierte Aktionen bereitstellen können.

5
none

Was ist ein Rebasing?

Rebase Erklärung aus dem Buch Pragmatic Guide to Git - Travis Swicegood

Kapitel III

16. Umschreiben des Verlaufs durch erneutes Starten

Das erneute Abbauen von Commits ist das einzige Konzept in Git, das kein Pendant in der traditionellen Welt der Versionskontrolle hat. Mit git rebase können Sie den Verlauf eines Repositorys auf verschiedene Arten neu schreiben. Es ist einer der mächtigsten Befehle in Git, was es zu einem der gefährlichsten macht.

rebase führt eine Reihe von Festschreibungen durch (normalerweise eine Verzweigung) und spielt sie über eine andere Festschreibung (normalerweise die letzte Festschreibung in einer anderen Verzweigung). Das übergeordnete Festschreiben ändert sich, sodass alle Festschreibungs-IDs neu berechnet werden. Dies kann bei anderen Entwicklern, die Ihren Code haben, zu Problemen führen, da die IDs nicht übereinstimmen.

Es gibt eine einfache Faustregel für die Git-Rebase: Verwenden Sie sie bei lokalen Commits so oft Sie möchten. Sobald Sie Änderungen mit einem anderen Entwickler geteilt haben, lohnen sich die Kopfschmerzen im Allgemeinen nicht mehr.

5
Felipe Sabino

Ressource : Auf jeden Fall Scott Chacons Gitcasts , besonders die Railsconf talk.

Github ist großartig und hat auch einige hilfreiche Anleitungen .

5
dylanfm

Fügen Sie den in Tims Antwort im Beitrag "Stack Overflow" Git Server mit Msysgit unter Windows einrichten aufgeführten Link ernsthaft hinzu.

Es hat mir fehlerfrei gezeigt, wie ich Git unter Windows mit msysgit einrichten kann, und ist ein unglaublich detaillierter Artikel.

5
Jake

Ich fand diesen Beitrag sehr nützlich, um mich anzufangen. Ich muss das Buch und andere Ressourcen noch lesen, aber der Beitrag war hilfreich, da der Titel sagt, "git konzeptionell verstehen". Ich empfehle auch den Git & GitHub-Kurs unter RubyLearning .

4
tundal45

Ein weiterer Punkt, von dem ich wirklich denke, dass er in dieser Liste enthalten sein sollte, ist wahrscheinlich sehr nützlich für Anfänger:

Keine Panik

Was ist, wenn ich ein paar Commits gemacht habe und dann etwas Beängstigendes gemacht habe, wie z. B. ein Rebase, und jetzt scheint etwas - oder sogar alles - verloren zu sein? (Rebase scheint derjenige zu sein, der die meisten Leute zum ersten Mal anspricht, also konzentriere ich mich darauf. Während _git rebase --abort_ sehr hilfreich ist, werden Sie manchmal feststellen, dass Sie eine Bearbeitung zum Beispiel während einer interaktiven Rebase verpfuscht haben , und lass das Rebase enden und jetzt willst du deine alten Sachen zurückbekommen. Und dann gibt es Dinge wie _filter-branch_ ...)

Ein wichtiges Prinzip ist, dass nie etwas gelöscht wird, was Sie festgelegt haben. ("Was, niemals?" "Nein, niemals!" "Was, niemals ?" "Nun, kaum jemals!") Wenn Sie _git gc_ nicht ausgeführt haben, es ist immer noch da . Es kann ein bisschen dauern, bis Sie Ihre vorherige Arbeit gefunden haben, aber wenn Sie einige erfolgreiche _git commit_ früher ausgeführt haben, dann sind zum Beispiel auch Ihre scheinbar zerstörten Festschreibungsserien aufgrund eines tragischen Rebase-Fehlers noch vorhanden, normalerweise für mindestens einen Monat (technisch gesehen, bis die "Reflogs" ablaufen).

Es ist wichtig zu beachten, dass jeder Filialname eine "Festschreibungs-ID" kennzeichnet oder auf diese verweist. Dies sind die lustigen Zahlen wie _7cc5272_. Viele Dinge, die Sie tun, wie das Hinzufügen eines neuen Commits zu einer Verzweigung, führen dazu, dass der Name der Verzweigung auf eine neue, andere Commit-ID verweist. Jede Festschreibungs-ID verfügt über einen Link, der auf einige frühere Festschreibungs-IDs verweist, und genau das macht einen "Zweig" voller Festschreibungen aus.

Der Rebase-Eintrag spricht vom "Umschreiben des Verlaufs" und Befehlen wie "_git filter-branch_" umschreiben des Verlaufs ", aber sie tun dies nicht, indem sie den vorherigen Verlauf zerstören, sondern indem sie einen neuen Verlauf hinzufügen. Sobald der neue Verlauf eingerichtet ist, verschiebt git die Beschriftungen so, dass er aussieht, als hätte sich der Verlauf geändert. Wenn Sie sich in Ihrem _fix-nasty-bug_-Zweig befinden und einen _git rebase_ ausführen und es schaffen, Dinge zu zerstören, bezieht sich die Bezeichnung _fix-nasty-bug_ jetzt auf das Wrack, aber die Originalversionen sind noch vorhanden. Insbesondere durch erneutes Starten wird eine temporäre (nicht verschobene, nicht verzweigte) Bezeichnung mit der Schreibweise _ORIG_HEAD_ erstellt, mit der Sie sie finden können. Mit dem Befehl _filter-branch_ werden auch alle ursprünglichen Namen gespeichert. In einigen Fällen gibt es möglicherweise keinen offensichtlichen Namen, aber die Commits können immer gefunden werden. Wenn nötig, suchen Sie sich einen "Git-Guru" und erklären Sie, was Sie getan haben, das zu den Trümmern geführt hat.

(Der Befehl _git reflog show_ kann auch beim Auffinden von Festschreibungs-IDs hilfreich sein.)

Wenn Sie einige oder alle Ihrer früheren Arbeiten gefunden haben, versuchen Sie Folgendes:

_git log <commit-ID>   # ORIG_HEAD after a bad rebase, for instance
git show <commit-ID>  # or some long SHA1 value you can still see in a window
_

Wenn es richtig oder nützlich aussieht, geben Sie ihm einen Namen:

_git branch recover-my-stuff ORIG_HEAD
_

und alles ist wieder da! In der Tat, jetzt sind sowohl Ihre schlechte Basis als auch Ihre ursprüngliche Arbeit "für immer" in Ihrem Git-Repo (oder zumindest, bis Sie die Filialnamen und löschen, lassen Sie ein paar Monate vergehen, und dann werden sie müll gesammelt). Sie können beliebig vielen wiederhergestellten Commits beliebig viele Namen zuweisen. (Filialnamen sind praktisch kostenlos, mit Ausnahme der Unordnung in Ihrer _git branch_-Ausgabe. Natürlich verhindern sie auch, dass Commits über den Müll gesammelt werden. Sie können auch oder stattdessen Tags auf bestimmte Commit-IDs setzen, wenn Sie dies vorziehen jene.)

4
torek

Sehr guter Beitrag zum Zusammenführen mit Konflikten - GitGuys: Zusammenführen mit einem Konflikt - Konflikte und Lösungen

Der Blog ist wirklich toll - anschaulich, übersichtlich und verständlich. Auf jeden Fall einen Besuch wert.

0
rdamborsky