Durchsuchen der Bash-History

Bei der Nutzung der Bourne-again shell, kurz Bash, wird über die eingegebenen Kommandos Buch geführt. Dies ermöglicht es auf Befehle zurückzugreifen, welche bereits eingeben wurde. Auf die History kann mit den Cursor-Tasten Hoch und Runter zugegriffen werden.

Diese Vorgehensweise ist natürlich nur solange praktisch, wenn der gesuchte Befehl in letzter Zeit eingegeben wurde. Gespeichert wird die History im Home-Verzeichnis des jeweiligen Nutzers in einer Datei mit dem Namen .bash_history. Nun könnte der geneigte Nutzer auf die Idee kommen diese Datei einfach nach dem gesuchten Befehl zu durchforsten:

cat .bash_history | grep "befehl123"

Einfacher ist es allerdings auf die eingebaute Suchfunktion der Bash zurückzugreifen. Aktiviert wird diese mittels der Tastenkombination Strg + R. Danach kann der Suchbegriff eingeben werden und dem Nutzer werden Vorschläge aus der Bash-History angezeigt. Sagt einer dieser Vorschläge zu, kann er mit einem Druck auf die Enter-Taste bestätigt werden. Abgebrochen werden kann die Suche mittels der Tastenkombination Strg + C.

Git-Branch ohne History erstellen

Eine wichtige Eigenschaft moderner Versionskontrollsysteme ist die Möglichkeit Branches zu erstellen. Ein neu erstellter Branch stellt aus Anwendersicht eine Kopie des Quellbranches da. Manchmal soll allerdings ein Branch erstellt werden, welcher nicht von der Versionsgeschichte eines Quellbranches beeinflusst ist. Unter Git kann ein solcher Branch mit dem Befehl:

git checkout --orphan branchName

erstellt werden. Dadurch wird ein Branch ohne Elternteil erstellt. Dies wiederum führt dazu das der Branch keinerlei Versionsgeschichte verfügt und unabhängig von anderen Branches des gleichen Repository existiert.

Verzeichnis von einem Git Repository in ein anderes verschieben

Unter Git möchte man manchmal ein Verzeichnis von einem Repository zu einem anderen verschieben. Natürlich soll dabei die Revisionsgeschichte nicht verloren gehen. In diesem Fall hilft folgendes Bashskript:

#!/bin/sh
# moves a folder from one git repository to another
# moveFolder <absolute repository one path> <repository one folder> <absolute repository two path>

# prepare repository one
cd $1
git clean -f -d -x
git checkout -b tmpBranch
git filter-branch --subdirectory-filter $2 HEAD
mkdir $2
mv * $2
git add .
git commit -a -m "Move files into folder"

#import in repository two
cd $3
git remote add repositoryOne $1
git pull repositoryOne tmpBranch
git remote rm repositoryOne

#cleanup
cd $1
git checkout master
git branch -D tmpBranch

#remove folder with history from repository one
cd $1
git filter-branch -f --index-filter "git rm -rf --cached --ignore-unmatch $2" HEAD

Genutzt wird das Skript dabei wie folgt:

./moveFolder /absolute/path/to/repo/one folderFromRepoOne /absolute/path/to/repo/two

Nachdem das Verzeichnis in das neue Repository mitsamt der Revisionsgeschichte übertragen wurde, wird es aus dem alten Repository entfernt. Das Skript funktioniert dabei unter Windows, Linux und Mac OS X. Die jeweils aktuellste Version ist auf GitHub zu finden.