Fryboyter

Github mit Mercurial nutzen

Vor ein oder zwei Wochen habe ich mir eines meiner Git-Repository zerlegt. Da mich die Lösung viel Zeit, zu viele Nerven und zwei Commits gekostet hat, bin ich nun wieder bei Mercurial gelandet. Dieses Werkzeug mag zwar nicht so mächtig wie Git sein, die Fehlermeldungen sowie die Dokumentation sind meiner Meinung nach viel besser verständlich.

Allerdings will ich auch weiterhin Github aufgrund dessen weiter Verbreitung nutzen. Sei es nun um dort selbst etwas zu veröffentlichen oder um mich an Projekten Dritter zu beteiligen. Mercurial bietet hierfür ein Plugin, dass sich hg-git nennt. Damit kann man ein Git-Repository herunterladen und es wird lokal automatisch in ein Mercurial-Repository umgewandelt. Nimmt man nun Änderungen vor, werden diese dann vor dem Hochladen in ein Git-Repository so geändert, dass sie mit Git kompatibel sind. Die Einrichtung von hg-git ist zudem ziemlich einfach.

Ich gehe bei folgender Anleitung davon aus, dass sowohl Mercurial als auch python-dulwich auf dem Rechner installiert ist und das im Home-Verzeichnis das Verzeichnis Projekte existiert. Dem Verzeichnis kann man natürlich einen anderen Namen geben.

Zuerst wechselt man im Terminal Emulator seiner Wahl in das Verzeichnis Projekte und lädt dort die Dateien von hg-git herunter.

cd ~/Projekte
hg clone https://foss.heptapod.net/mercurial/hg-git hg-git

Alternativ kann man hg-git auch über die Paketverwaltung seiner Distribution installieren.

Als nächstes erweitert man die Datei .hgrc im Home-Verzeichnis um folgenden Inhalt. Falls die Datei noch nicht vorhanden ist, einfach anlegen und die drei Zeilen eintragen.

[extensions]
hgext.bookmarks =
hggit = ~/Projekte/hg-git/hggit

Zeile zwei aktiviert das Plugin Bookmarks das in diesem Fall Branches simuliert. Zeile drei aktiviert das eben heruntergeladene Plugin hg-git.

Im Verzeichnis Projekte laden wir nun mit folgendem Befehl ein Git-Repository herunter (die Github-Adresse sowie das Zielverzeichnis fryboyter.git bitte entsprechend an die eigenen Gegebenheiten anpassen).

hg clone git@github.com:Fryboyter/Hugo.git fryboyter.hg

Da hierbei von Git zu Merurial umgewandelt wird, kann dies je nach Größe des Repository etwas dauern.

Als nächstes wechselt man in das Verzeichnis in dem das nun erstellete Mercurial-Respository liegt. In diesem Beispiel also fryboyter.hg. Dort führt man abschließend noch den Befehl hg bookmark -f main aus. Anstelle von main muss man die Bezeichnung des Haupt-Branch angeben. Ansonsten erkennt Mercurial bei einem Push keine Änderungen.

Nun sollte alles funktionieren. Bei meinen Tests konnte ich zumindest problemlos von Github pullen und zu Github pushen. Mehr brauche ich in meinem Fall eigentlich auch nicht. Was mir bei der ganzen Aktion aufgefallen ist, dass das lokale Mercurial-Repository weniger als 30 MB groß ist. Das lokale Git-Repository hingegen belegt etwas mehr als 60 MB. Davon geht die Welt jetzt nicht unter aber es ist trotzdem ein interessantes Detail.

OSBN | Allgemein

Heptapod - Gitlab mit Unterstützung von Mercurial

Bei Heptapod handelt es sich um eine Plattform zur Versionsverwaltung ähnlich Github. Im Gegensatz zu Github basiert diese allerdings auf Gitlab und unterstützt dank der Entwickler auch Mercurial. Vor ein paar Jahren hatte ich bereits in einem Artikel, bei dem es um die Einstellung der Unterstützung von Mercurial bei Bitbucket ging, schon einmal auf Heptapod hingewiesen. Damals war die Plattform allerdings noch neu und unfertig.

Da ich vor ein paar Tagen mir ein Git-Repository zerschossen habe (Layer-8-Problem) und mich die Lösung viel Zeit und Nerven gekostet hat, habe ich mich mal wieder im Bereich der Versionsverwaltung Mercurial umgesehen. Heptapod gibt es immer noch und inzwischen ist es auch öffentlich nutzbar. Neben heptapod.host was hauptsächlich für Unternehmen gedacht ist, gibt es auch noch das kostenlose Angebot https://foss.heptapod.net/public das sich an FOSS-Projekt wendet.

Wer selbst hosten will, findet alle nötigen Informationen unter https://heptapod.net/pages/get-heptapod.html#get-heptapod.

Intern werde ich vermutlich wieder auf Mercurial wechseln. Git ist mir zu mächtig und zu kompliziert. Zudem finde ich die Dokumentation von Mercurial deutlich besser.

Aufgrund der weiten Verbreitung werde ich aber auch weiterhin Github nutzen, da es hierfür inzwischen funktionierende Lösungen gibt. Aber das ist ein Thema für einen weiteren Artikel.

OSBN | Allgemein

Raspberry Pi Images schrumpfen

Nehmen wir an, man hat einen Raspberry Pi mit einer SD-Karte mit 120 GB komplett eingerichtet und will ein Image erstellen um dies auf andere Raspberry Pi zu installieren. Die meisten Nutzer werden hierfür Befehle wie dd if=/dev/mmcblk0 of=/home/username/raspberry.img bs=4M nutzen. Das ist einfach. Hat allerdings einen Nachteil. Die Image-Datei ist 120 GB groß egal wie viel Speicherplatz tatsächlich genutzt wird. Auch wenn Speicherplatz nicht mehr sehr teuer ist verschwendet man diesen in dem Fall. Man müsste das Image also schrumpfen. Was manuell durchaus machbar ist. Oder man nutzt PiShrink.

Damit lassen sich mittels dd erstellt Image-Dateien auf die tatsächlich genutzte Größe schrumpfen. In meinem Fall hatte ursprünglich 120 GB große Image nur noch eine Größe von 13 GB. Hierfür reicht der einfach Befehl pishrink.sh rasberry.img aus.

Erstelle man nun mittels dd den Inhalt des geschrumpften Image auf eine andere SD-Karte und bootet von dieser, passen sich die Partitionen automatisch an die Größe der SD-Karte an, so dass der gesamte Speicherplatz zur Verfügung steht. Hierfür baut PiShrink einen entsprechenden Befehl in die Image-Datei ein.

OSBN | Linux

Git - Bereits gesendete Commits zusammenfassen

Ich habe an mehreren Dateien in einem Git-Repository jeweils die gleiche Änderung durchgeführt. Hierfür habe ich pro Datei einen Commit erstellt und diese bereits zu Github übermittelt. Ein Commit hätte es in dem Fall auch getan. Wie kann man nun nachträglich die betreffenden Commits zu einem Commit zusammenfassen?

Als erstes führt man im lokalen Arbeitsverzeichnis git rebase -i HEAD~X aus. Anstelle von X gibt man die Anzahl der letzten Commits an die man zusammenfassen möchte.

Nun sollte automatisch ein Editor geöffnet werden und in den ersten Zeilen sollte man beispielsweise folgendes vorfinden.

pick 67426ab Commit-Nachricht
pick 56432tz Commit-Nachricht
pick 45643io Commit-Nachricht

Um aus diesen drei Commits einen Commit zu machen ersetzt man in Zeile 2 und 3 das pick mit squash. Das “pick” in der ersten Zeile wird nicht geändert. Abschließend speichert man das ganze ab.

Nun sollte erneut ein Editor geöffnet werden in dem man bei Bedarf die Commit-Nachricht anpassen kann. Da ich für alle drei Commits die gleiche Nachricht genutzt hatte, habe ich keine Änderungen vorgenommen.

Abschließend führt man noch git push –force origin HEAD aus um die Änderungen an Github zu senden. Sollte man einen anderen Alias für das Repository genutzt haben (origin ist Standard) muss man den Befehl entsprechend anpassen. Wer sich nicht sicher ist, kann in der Datei config im Verzeichnis .git nachsehen das im lokalen Arbeitsverzeichnis zu finden ist.

Sofern man nicht die einzige Person ist, die an den Dateien Änderungen vornimmt, sollte man anstelle –force besser –force-with-lease nutzen.

Schaut man sich nun die Historie des Repository an, wurden die betreffenden Commits zu einem Commit zusammengefasst.

OSBN

Claws Mail - Shortcuts ändern

Auf den ersten Blick ist es leider nicht so einfach ersichtlich, wie man die Shortcuts im E-Mail-Client Claws Mail ändern kann.

Als erstes öffnet man die Einstellungen (Menü Konfiguration -> Einstellungen…) und wählt dort in der linken Spalte ganz unten bei “Sonstiges” den Punkt “Vermischtes” aus. Dort aktiviert man dann “Benutzerdefinierte Tastenkürzel möglich” aus und klickt abschließend auf “Anwenden”.

Nehmen wir nun einmal an, man möchte den Menüpunkt “Löschen” einen Shortcut zuweisen (in der Standardkonfiguration gibt es, vermutlich aus Sicherheitsgründen, keine Zuweisung). Hierzu wählt man eine beliebige E-Mail mit einem Rechtsklick aus, so dass das Kontextmenü erscheint. Nun bewegt man den Maus-Cursor über das Wort Löschen und betätigt dann den gewünschten Shortcut. Dieser sollte dann neben dem jeweiligen Menüpunkt angezeigt werden.

Das ganze funktioniert auch in den normalen Menüs wie “Datei”. Nur das hierbei keine E-Mail ausgewählt werden muss.

Um eine versehentliche Änderung zu vermeiden, kann man abschließend den Punkt “Benutzerdefinierte Tastenkürzel möglich” wieder deaktivieren.

OSBN