Benutzer-Werkzeuge

Webseiten-Werkzeuge


git

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
git [2014/03/11 11:41] – fixws alias olligit [2023/02/19 20:34] (aktuell) – [Alle Commits eines Autors anzeigen] olli
Zeile 91: Zeile 91:
 benutzen. Diese Datei ist dann automatisch im Staging-Bereich. benutzen. Diese Datei ist dann automatisch im Staging-Bereich.
  
 +===== Inhalt des Stash anzeigen =====
 +Um den Inhalt des Stash anzuzeigen, kann der Befehl
 +<code bash>
 +git stash show -p
 +</code>
 +verwendet werden.
 +Ältere Stashes können mit 
 +<code bash>
 +git stash show -p stash@{1}
 +</code>
 +angezeigt werden.
 ===== Grafisches git blame ===== ===== Grafisches git blame =====
 Mit Mit
Zeile 130: Zeile 141:
 <code> <code>
 *       text=auto *       text=auto
-</code>  +</code> 
 + 
 +===== Wortbasierter Diff ===== 
 +Mit  
 +<code bash> 
 +git diff --word-diff  
 +</code> 
 +lässt sich ein wortbasierter Diff durchführen. Für viele Sprachen enthält Git angepasste Parser. Um diese auszuwählen muss in .gitattributes für die Dateieindung die entsprechene Sprache ausgewählt werden, z.B.:    
 +<code> 
 +*.m diff=matlab 
 +</code> 
 +Dabei dürfen keine Leerzeichen zwischen diff, dem Gleichheitszeichen und der Sprache stehen. 
 +Eine Liste der unterstützten Sprachen findet sich im [[https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html|Abschnitt "Defining a custom hunk-header"]]. 
 + 
 +===== Editor für Commit-Message setzen ===== 
 +Der Editor, den Git zum Bearbeiten der Commit-Messages aufruft, kann auf mehrere Arten konfiguriert werden. Mit der Konfigurationsvariablen core.editor 
 +<code bash> 
 +git config --global core.editor "nano" 
 +</code> 
 +oder den Umgebungsvariablen GIT_EDITOR, VISUAL, EDITOR 
 +<code bash> 
 +export GIT_EDITOR=nano 
 +export VISUAL=nano 
 +export EDITOR=nano 
 +</code> 
 +Die Reihenfolge der Auswertung ist GIT_EDITOR, core.editor, VISUAL, EDITOR. 
 + 
 +===== Mehrere Remotes ===== 
 +git kann mehrere remotes verwalten. Das ist für das Pushen auf mehrere Server praktisch. 
 + 
 +Remote hinzufügen: 
 +<code bash> 
 +git remote add <name> <url> 
 +</code> 
 +Pushen: 
 +<code bash> 
 +git push <name> 
 +</code> 
 + 
 +===== Dateien, die nicht im Repo sind, entfernen  ===== 
 +Dateien, die nicht im Repository sind (untracked), können mit ''git clean'' entfernt werden. Mit  
 +<code bash> 
 +git clean -n 
 +</code> 
 +wird ein Trockenlauf durchgeführt. Mit dem Parameter ''-f'' statt ''-n'' wird dann tatsächlich gelöscht. Um ungetrackte Verzeichnisse zu entfernen, muss das Argument ''-d'' hinzugefügt werden. 
 + 
 +===== Alle Commits eines Autors anzeigen ===== 
 +Um alle Commits eines bestimmten Autors aufzulisten, kann man folgenden Befehl verwendet: 
 +<code bash> 
 +git log --author="name" 
 +</code> 
 +Der Name muss nicht vollständig angegeben werden. 
 +Statt des Namens kann auch eine Email-Adresse (oder ein Teil davon) angegeben werden. 
 +Um nicht nur den aktuellen Branch, sondern alle zu durchsuchen, kann der Parameter ''%%--%%all'' hinzugefügt werden.   
 + 
 +===== Prüfen, ob Branch einen Commit enthält ===== 
 +Um zu prüfen, ob ein Branch einen gegebenen Commit enthält kann man den folgenden Befehl verwenden: 
 +<code bash> 
 +git branch -a --contains <commitish> 
 +</code> 
 + 
 +<WRAP important round> 
 +Commits, die über einen Rebase oder Cherry-Pick ins Repo gekommen sind, werden so nicht gefunden.   
 +</WRAP> 
 + 
 +===== Autor nachträglich ändern ===== 
 +Um den Autor oder die Emailadresse nachträglich zu korrigieren, müssen folgendene Schritte durchgeführt werden: 
 +   * [[https://gist.github.com/octocat/0831f3fbd83ac4d46451|Skript]] herunterladen und ausführbar machen 
 +   * Emailadressen im Skript anpassen 
 +   * Skript ausführen 
 +   * Änderungen pushen 
 + 
 +<WRAP important round> 
 +Diese Operation schreibt die History neu. 
 +Wenn die Commits schon öffentlich sind, sollte man dies nur in Ausnahmefällen tun. 
 +</WRAP> 
 + 
 +===== Sparse Checkout ===== 
 +Um nur Teile (z.B. ein Unterzeichnis) eines Repositories auszuchecken, kann ein sog. Sparse Checkout gemacht werden: 
 +  * https://unix.stackexchange.com/a/468182 
 +  * https://github.blog/2020-01-17-bring-your-monorepo-down-to-size-with-sparse-checkout/ 
 + 
 +===== Branch in eigenes Repository ===== 
 +Um einen Branch ''branch-to-move'' in ein eigenes Repository zu kopieren kann folgendes verwendet werden: 
 +<code bash> 
 +git push url://to/new/repository.git branch-to-move:new-branch-name 
 +</code> 
 +''new-branch-name'' ist der Name, den der Branch im neuen Repository gekommen soll. 
 +''url%%://%%to/new/repository.git'' ist der Pfad zum git-Repository, dies kann auch ein lokaler Pfad sein. 
 + 
 +===== Leere Verzeichnisse commiten ===== 
 +Leere Verzeichnisse lassen sich nicht einchecken, der [[https://stackoverflow.com/questions/115983/how-can-i-add-an-empty-directory-to-a-git-repository/932982#932982|hier]] empfohlenen Workaround ist eine ''.gitignore''-Datei in dem Verzeichnis mit folgendem Inhalt: 
 +<code> 
 +# Ignore everything in this directory 
 +
 +# Except this file 
 +!.gitignore 
 +</code> 
 +Andere Möglichkeit sind leere Dateien wie ''.keep'' oder ''.gitkeep'' in dem Verzeichnis. 
 +Eine Diskussion dazu findet sich auch in obigem Link. 
 + 
 +===== git pull  oder fetch hängt ===== 
 +Wenn ''git pull'' oder ''fetch'' hängt, kann man ''git'' mit 
 +<code bash> 
 +GIT_TRACE=true git pull 
 +</code> 
 +ein Trace einschalten. 
 +Auch die Verwendung des von Github deaktivierten, unverschlüsselten [[https://github.blog/changelog/2022-03-15-removed-unencrypted-git-protocol-and-certain-ssh-keys/| ''git://''-Protokolls]] ruft dieses Verhalten hervor (dies lässt sich im o.g. Trace allerdings nicht erkennen). 
 + 
 ===== Nützliche Aliases ===== ===== Nützliche Aliases =====
 Diese Aliases können in die ~/.gitconfig eingetragen werden: Diese Aliases können in die ~/.gitconfig eingetragen werden:
-<code>+<code bash>
 [alias] [alias]
  st = status  st = status
Zeile 144: Zeile 264:
         # List all aliases.         # List all aliases.
         aliases = config --get-regexp alias         aliases = config --get-regexp alias
-        # Fix whitespace from here: http://code.google.com/p/nathan-collins--conf/source/browse/dot.gitconfig+        # Fix whitespace from here:  
 +        # http://code.google.com/p/nathan-collins--conf/source/browse/dot.gitconfig
  # Fix whitespace in the index while preserving a dirty tree, if  # Fix whitespace in the index while preserving a dirty tree, if
  # any.  # any.
Zeile 188: Zeile 309:
  git rebase --whitespace=fix HEAD~ && \  git rebase --whitespace=fix HEAD~ && \
  git reset --soft HEAD~ ; \  git reset --soft HEAD~ ; \
- fi"  + fi"  
 +        #resets binary permission to the ones in the repo 
 +        # from https://gist.github.com/jtdp/5443498 
 +        permission-resetb = "!git diff -p --no-ext-diff --no-color --diff-filter=d | grep -E \"^(diff|old mode|new mode)\" | sed -e \"s/^old/NEW/;s/^new/old/;s/^NEW/new/\" | git apply"
 </code> </code>
  
-git sed ersetzt in allen Dateien im Repository old-name durch new-name (siehe Bespiel). Dies ist sicherer als die entsprechende Lösung mit "find .", da dabei Verwaltungsdateien von Git mit verändert werden können.+''git sed'' ersetzt in allen Dateien im Repository old-name durch new-name (siehe Bespiel). Dies ist sicherer als die entsprechende Lösung mit "find .", da dabei Verwaltungsdateien von Git mit verändert werden können.
  
 Beispiel: Beispiel:
Zeile 200: Zeile 324:
 ===== Links ===== ===== Links =====
   * [[http://git-scm.com/|Git Homepage]]   * [[http://git-scm.com/|Git Homepage]]
-  * [[https://www.atlassian.com/de/git/tutorial|Git Tutorials]]+  * [[https://www.atlassian.com/git/tutorials|Git Tutorials]] 
 +  * [[https://chrisjean.com/git-submodules-adding-using-removing-and-updating/|Git Submodule Tutorial]]
  
  
  
git.1394534477.txt.gz · Zuletzt geändert: 2014/03/11 11:41 von olli