Vollbildmodus: Seiteninhalt ohne Menus

Git

Git ist eine freie Software zur verteilten Versionsverwaltung von Dateien. Es wurde ursprünglich für die Quellcode-Verwaltung des Linux-Kernels entwickelt.

Die Entwicklung von Git wurde im April 2005 von Linus Torvalds begonnen, um das bis dahin verwendete Versionskontrollsystem BitKeeper zu ersetzen, welches durch eine Lizenzänderung vielen Entwicklern den Zugang verwehrte. Die erste Version erschien bereits wenige Tage nach der Ankündigung.

Quelle; damit steht dieser Absatz (wie auch andere) steht damit unter der Lizenz Creative Commons Attribution/Share Alike verfügbar.

Links

Clientsoftware

Befehle

Liste der Befehl ausgeben:

git help
usage: git [--version] [--exec-path[=GIT_EXEC_PATH]] [-p|--paginate|--no-pager] [--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE] [--help] COMMAND [ARGS]

The most commonly used git commands are:
   add        Add file contents to the index
   bisect     Find the change that introduced a bug by binary search
   branch     List, create, or delete branches
   checkout   Checkout a branch or paths to the working tree
   clone      Clone a repository into a new directory
   commit     Record changes to the repository
   diff       Show changes between commits, commit and working tree, etc
   fetch      Download objects and refs from another repository
   grep       Print lines matching a pattern
   init       Create an empty git repository or reinitialize an existing one
   log        Show commit logs
   merge      Join two or more development histories together
   mv         Move or rename a file, a directory, or a symlink
   pull       Fetch from and merge with another repository or a local branch
   push       Update remote refs along with associated objects
   rebase     Forward-port local commits to the updated upstream head
   reset      Reset current HEAD to the specified state
   rm         Remove files from the working tree and from the index
   show       Show various types of objects
   status     Show the working tree status
   tag        Create, list, delete or verify a tag object signed with GPG

See 'git help COMMAND' for more information on a specific command.

Repository

  • Repository
    • neu anlegen (Unterordner .git wird erstellt):
      git init
    • clonen (von einem vorhandenen):
      git clone ADRESSE

      als Adresse kann z. B. ein entfernter Git-Server dienen

      git clone URL
  • Änderungen in anderes Repo übertragen (git-push)
    • den lokalen Branch „localbranch“ in den entfernten master-branch:
      git push URL localbranch master
    • oder kürzer (master lokal → master entfernt):
      git push URL master

URL entfernter Repositories

  • SSH:
    git clone ssh://domain.tld/local/path/to/git/repo
  • HTTP/HTTPS: git clone

Änderungen vornehmen und tracken

  • Dateien hinzufügen:
    git add Datei/Verzeichnis
  • Commit (=Änderungen übertragen) absetzen:
    • beim ersten mal:
      git commit -m "Kommentar"; danach:
    • Fall 1: Datei hingekommen?
      git add neueDatei
    • Fall 2: nur vorhandene Dateien geändert?
      git commit -a -m "Kommentar"
  • Konflikte beheben
  • Anzeige der Änderungen
    • Commit-Historie:
      git log
    • seit letztem Commit (bzw. dem aktuellen Stand, also der letzten Aktualisierung des Repository-Index):
      git diff
    • seit letztem Commit und Stand:
      git diff HEAD
    • Änderungen zwischen dem letzten Commit und dem Tag „TestTag“:
      git diff TestTag HEAD
    • Commit-Vergleich vom letzten Commit zum vorletzten Commit:
      git show
  • lokale Änderungen zurücknehmen (wie svn revert):
    git checkout PFAD_ODER_DATEI
  • Dateien ignorieren: Guides: Ignore for Git

Branches

  • Branches (master ist der standard-branch; aktiver Branch mit „*“ gekennzeichnet)
    • Liste der Branches ausgeben:
      git branch
    • neuen Branch anlegen:
      git branch BRANCHNAME
    • Wechsel in (diesen) neuen Branch:
      git checkout BRANCHNAME
    • zurückführen in master:
      • zuerst zurück in master wechseln:
        git checkout master
      • Änderung aus BRANCHNAME in master mergen:
        git pull . BRANCHNAME

gemeinsamer Zugriff

  • Mehrbenutzerzugang (zentral erreichbarer Datei-Speicher)
    • Benutzerberechtigungen in Datei „allowed-users“ in Verzeichnis: .git/info/
  • Patches austauschen (geht auch per eMail die sich als mbox-Datei wieder einzupflegen gehen); Beispiel: alle Änderungen als Patch die NICHT in „original“ enthalten sind:
    git format-patch original

Einrichtung Apache + Git und webdav (Debian)

Server konfigurieren

  1. Git installieren (als root bzw. mit sudo):
    aptitude install git-core
  2. Verzeichnis für das Repository anlegen:
    mkdir /srv/git/git-repos
  3. optional:
    1. Gruppe für git-Benutzer erstellen:
      groupadd gitusers
    2. Benutzer hinzufügen:
      addgroup [USER] gitusers
  4. Leeres git-Repository erzeugen:
    cd /srv/git/git-repos/REPO1 && git --bare init
  5. Verzeichnis-/Dateirechte erteilen, Beispiel mit umask 027 (Gruppe ggf. von gitusersändern falls sie oben nicht angelegt wurde):
    chmod 770 /srv/git/git-repos && chown -R www-data:gitusers /srv/git/git-repos/* && chmod g+wX /srv/git/git-repos/*
  6. Module für WebDAV aktivieren: a2enmod dav dav_fs
  7. Apache2 konfigurieren: in /etc/apache2/sites-available einen virtuellen Host konfigurieren und zusätzlich für die Git-Location folgendes konfigurieren:
    	<Location /git-repos >
    	DAV on
    	AuthType Basic
    	AuthName "Git Repository - consider using ssl to protect your credentials"
    	#AuthBasicProvider file
    	# (is default anyway; needs mod_authn_file which is loaded)
    	AuthUserFile /etc/apache2/git_passwd
    	Require valid-user
    	#for inital tests:
    	#Allow from all
    	</Location>
  8. Zugangsdaten in /etc/apache2/git_passwd hinterlegen:
    htpasswd -c /etc/apache2/git_passwd USER
  9. Syntax überprüfen:
    apache2 -t
  10. Apache2 neustarten:
    apache2ctl restart

    ODER

    /etc/init.d/apache2 restart

Client konfigurieren

  1. Verzeichnis für unser neues Repository anlegen:
    mkdir REPO1
  2. ins Verzeichnis wechseln und leeres Repo anlegen:
    cd REPO1 && git init
  3. die Adresse des Server hinterlegen (der abschließende Slash “/“ ist wichtig und notwendig!)
    git-config remote.upload.url http://<username>@<servername>/REPO1/
  4. Den ersten Push unseres lokalen Master-Branches vornehmen:
    git push upload master

Verzeichnisaufbau

  • Aufbau des internen .git Verzeichnissses:
    • config (Datei): Konfiguration, sehr einfaches Beispiel:
      [core]
      	repositoryformatversion = 0
      	filemode = true
      	bare = false
      	logallrefupdates = true
    • index (Datei): Metadaten, auch als „Staging Area“ bezeichnet
    • info (Unterverzeichnis):
      • exclude : enthält Dateinamen von Dateien die von der Versionverwaltung ausgeschlossen sind
    • logs (Unterverzeichnis): Historie
    • objects (Unterverzeichnis): Repository Struktur
    • refs (Unterverzeichnis): Verweise innerhalb des Repository

Objektypen

  • Objektypen (zlib-komprimiert; mit SHA-1 Hash ansprechbar)
    • Commit - bestimmter Änderungszeitpunkt, besteht aus diesen Elementen:
      1. Kommentar (auch „Commit-message“)
      2. Information über Zeit und Autor
      3. Verweise auf (beliebig viele) übergeordnete Commits („parents“)
      4. Zeiger auf einen Tree
    • Tree - Liste von Dateien
    • Blob - speichert beliebige Dateinhalte
    • Tag - Beschriftung oder Etikett (Verweis auf ein Commit-Objekt das mit Namen und Kommentar „tag message“). Nützlich für Versionbezeichnung und auch GPG-Signatur möglich.

Fehlerbehebung

src refspec master does not match any

Dieser Fehler tritt bei ersten push auf, wenn lokal noch gar kein master-branch existiert. Lösung: Den ersten commit machen und dann den push.

SSL-Verifizierung schlägt fehl (return code 60)

Ein push schlägt mit folgender Fehlermeldung fehl:

error: Cannot access URL https://user@host.old/repo/, return code 60
error: failed to push some refs to 'https://user@host.old/repo/'

Der Grund ist eine fehlgeschlagene Verifizierung des SSL/TLS-Zertifikats u. a. in diesen Fällen:

  1. man hat ein selbst-signiertes Zertifikat erstellt bzw.
  2. eine eigene CA aufgesetzt hat, die dem System unbekannt ist.

Temporäre Lösung (für selbst-signierte Zertifikate)

  1. in der Datei ~./bashrc folgendes eintragen
    export GIT_SSL_NO_VERIFY=true
  2. oder in ~/.gitconfig
    http.sslVerify=false 

Permanente Lösung

  1. linux: eigene CA im System anmelden
  2. Windows: FIXME Lösung bei msysgit?
  • http.sslCAInfo: File containing the certificates to verify the peer with when fetching or pushing over HTTPS. Can be overridden by the GIT_SSL_CAINFO environment variable.
  • http.sslCAPath: Path containing files with the CA certificates to verify the peer with when fetching or pushing over HTTPS. Can be overridden by the GIT_SSL_CAPATH environment variable.
 
versionsverwaltung/git.txt · Zuletzt geändert: 2011/09/26 14:08 von st
 
Backlinks: [[versionsverwaltung:git]]