Donnerstag, Januar 08, 2015

Maven Problem

Die aktuelle Maven Version 3.2.5 hat ein Problem mit dem Download von Artefakten aus Remote-Repositories. Genauer: In der Deployment-Phase, wenn die Datei maven-metadata.xml zu dem entsprechendem Artefakt geladen wird. Die dafür verantwortliche Bibliothek Wagon erwartet zu viele Bytes und hängt in einer Warteposition fest. Hier ein Beispiel:

[INFO] --- maven-deploy-plugin:2.8.2:deploy (default-deploy) @ master-pom ---
Uploading: scp://maven.gluehloch.de/var/www/maven.gluehloch/repository/de/awtools/master-pom/2/master-pom-2.pom
Uploaded: scp://maven.gluehloch.de/var/www/maven.gluehloch/repository/de/awtools/master-pom/2/master-pom-2.pom (16 KB at 13.1 KB/sec)
Downloading: scp://maven.gluehloch.de/var/www/maven.gluehloch/repository/de/awtools/master-pom/maven-metadata.xml
293/292 B
Wagon erwartet 293 Bytes. Die Datei ist aber nur 292 Bytes groß. Die Lösung sieht so aus, dass man die JARs wagon-*-2.8 aus dem LIB Verzeichnis der Maven Installation entfernt und diese durch die Version 2.4 ersetzt. Diese sind z.B. Bestandteil von Maven-3.1.1 und können von dort kopiert werden. Ein Test in dieser Konstellation war auf meinem System erfolgreich (Maven 3.1.5).

Zu diesem Thema gibt es bereits ein Issue: MDEPLOY-177

Samstag, November 29, 2014

Ubuntu Terminal Fenster anpassen

Neulich, nach dem Update meiner Ubuntu Installation von Version 12 auf 14, öffnete sich nach drücken der Tastaturkombination ctrl+alt+t ein häßliches, kleines Terminal Fenster. Das läßt sich zum Glück ändern. Unter Systemeinstellungen->Tastatur->Tastaturkürzel->Eigene Tastaturkürzel habe ich für das Tastaturkürzel ctrl+alt+t folgenden Befehl hinterlegt:
gnome-terminal --profile=Default --geometry=95x35+250+60
Herrlich.

Freitag, November 28, 2014

GIT: Mehrere Commits zu einem Zusammenfassen

Aufgabe: Fasse mehrere Commits aus einem Branch zu einem Commit zusammen. Das kumulierte Commit landet am Ende auf dem Master-Branch. Im ersten Schritt wird auf den Master-Branch gewechselt und dieser aktualisiert:
git checkout master
git fetch origin
git pull
Die Commits werden per Merge aus dem Commit-Branch in den Master-Branch überführt.
git merge feature_branch
Und hier kommt jetzt der Trick:
git reset origin/master
Damit sind alle Änderungen im Modus 'unstaged'. Mit git add werden alle Änderungen eingesammelt und abschließend mit einem Commit versehen.
git add --all
git commit -m "bla bla bla"
Fertig.

Freitag, Mai 23, 2014

Alltags GIT

Hier eine Zusammenstellung meiner häufigsten GIT Alltagsoperationen: In der Regel geht es mit dem Clonen eines Repositories los:
git clone <url> <local_directory>
Im Anschluss fange ich mit der Arbeit an und editiere einige Dateien. Diese werden mit add und commit in das lokale Repository übernommen.
git add .
git commit -m "Sinnvoller(!) Kommentar."
Falls Dateien gelöscht wurden, dann lohnt sich der folgende Befehl. Dieser sammelt alle geänderten und gelöschten Dateien ein und fügt sie dem Änderungsindex zu.
git add -u
Nach dem commit ist im Anschluss eventuell ein push in das Remote Repository durchzuführen:
git push
Eventuell lege ich vor Arbeitsbeginn einen lokalen Branch an. Das ist vielleicht empfehlenswert, bevor man mit der Arbeit beginnt.
git branch <branch_name>
Oder das Wechseln auf einen bestimmten Branch.
git checkout <branch_name>
Beim Branch-Wechsel bleiben unter Umständen Dateien im Verzeichnisbaum liegen, die man dort nicht wünscht. Z.B. neu angelegte Dateien, die noch nicht unter Versionskontrolle stehen. Das folgende Kommando entfernt alle für GIT unbekannten Dateien und Verzeichnisse. Aber aufpassen: Die Dateien und Verzeichnisse sind dann gelöscht! GIT kann diese Dateien nicht wieder hervorholen.
git clean -f -d
Und falls die Arbeiten sich hinziehen, lohnt sich vielleicht ein Replizieren des Branchs in das Remote-Repository.
git push origin <branch_name>
Irgendwann, wenn das Arbeitsergebnis nach MASTER gemerged wurde, kann der lokale Branch gelöscht werden.
git branch -d <branch_name>
Im zweiten Schritt bietet sich vielleicht auch das Löschen des zugeordneten Remote-Branches an.
git push origin :v1.1.1_optimate
Einen Remote-Branch abholen:
git checkout -b <branch_name> origin/<branch_name>
Ein Tag vergeben (In diesem Fall mit einem sprechendem Kommentar):
git tag -a v1.2.0 -m 'Version 1.2.0'
Und im Anschluss wird das Tag, wenn gewünscht, auch Remote verfügbar gemacht:
git push origin --tags
Ein Tag kann gelöscht werden:
git tag -d v1.2.0
bzw. aus dem Remote-Repository entfernt werden:
git push origin :refs/tags/v1.2.0
Unter Windows hat sich die folgende Farbeinstellung bei mir bewährt. Die Standard-Farbe verschwimmt etwas bei einem eingestellten Zeichensatz Consolas mit Schriftgröße 12.
git config --global color.status.untracked "bold red"

UPDATE (27.11.2014 05:36 Uhr):
Falls die versionierten Dateien auf verschiedenen Plattformen editiert werden, empfiehlt sich die folgende Einstellung:
git config --global core.autocrlf true
Das ergänzt oder entfernt den passenden Zeilenumbruch.
UPDATE (20.09.2014 09:03 Uhr):
Das Umbenennen von Local- und Remote Branch:
#rename local branch
git branch -m old-branch-name new-branch-name

#delete remote branch with old name
git push origin :old-branch-name

#create remote renamed branch and setup remote branch tracking (-u flag)
git push -u origin new-branch-name

UPDATE (22.05.2014 21:18 Uhr):
Unter Github habe ich mir ein kleines Shell Skript zusammen gestellt. Den Command Line Prompt habe ich um den GIT Status erweitert. Weitere Highlights sind die Funktionen 'git_remove_missing_files', 'git_stats' und 'git_info'.

Dienstag, Dezember 17, 2013

git push and current branch

Bei der Ausführung von git push versucht GIT alle lokalen Branches auf das Remote-Repository zu schieben. Diese Funktion lässt sich abschalten oder besser begrenzen. Mit
git config --global push.default current
schiebt GIT nur die Änderungen des aktuellen Branches auf das Remote-Repository. Ab GIT 2.0 wird diese Einstellung der Standard sein.