Archiv der Kategorie: Webdev

Git cleanup

Problem ist folgende Meldung nach `git pull`:

Die Datenbank des Repositories wird für eine optimale Performance im Hintergrund komprimiert.
Siehe „git help gc“ für manuelles Aufräumen.
error: Die letzte Ausführung von „gc run“ enthielt die folgenden Meldungen.
Bitte beheben Sie das Hauptproblem und löschen Sie .git/gc.log.
Ein automatischer Cleanup wird nicht ausgeführt, bis diese Datei entfernt wurde.

fatal: bad object refs/remotes/origin/HEAD
error: failed to run repack

Lösungsansatz ist die Verwendung von `git fsck`.

Die Meldung `error: refs/remotes/origin/HEAD: invalid sha1 pointer 0000000000000000000000000000000000000000` gibt uns den Hinweis, dass eine Referenz nicht mehr passt. Prüfen lässt sich dies bspw. mittels `git branch -a`. Tatsächlich ist der Remote-Branch `master` nicht mehr vorhanden.

Lösen lässt sich dies durch editieren der Datei .git/refs/remotes/origin/HEAD. Deren Inhalt sollte von
`ref: refs/remotes/origin/master` zu `ref: refs/remotes/origin/develop` geändert werden. Nun sollte der Fehler verschwunden sein 🙂

Node.js unter Ubuntu / Linux Mint

Installation nach Anleitung auf nodejs.org.  Für Ubuntu-Derivate zusätzlich das Paket nodejs-legacy installieren, um node zur Verfügung zu haben (legt lediglich einen symbolischen Link unter /usr/bin/ an, der auf nodejs verweist). Danach node.js verifizieren:

$ nodejs -v
$ node -v

Nach einem nodejs-Update (v5 auf v6) und (vorher) installiertem (und vergessenem) nvm laufen beide Skripte allerdings auseinander:
Grund ist eine per nvm festgelegte node-Version. Die Lösung ist ziemlich einfach:

$ nvm list


default zeigt auf 5

$ nvm alias default system


=> $ node -v entspricht nun $ nodejs -v

Sollte

$ nvm -v

einen Fehler werfen, dann wurde die NVM-Installation nicht erkannt

Als Lösung muss ein Snippet in .zshrc oder .bashrc eingefügt werden:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm

Publish Angular2-App using Webpack

$ npm run build:prod

This creates a folder called dist. This folder has to be copied to the webserver. I ran into the issue that an error appeared on reloading a page.

I’m not using the hash for routing ({useHash: false}), so all links appear as real paths like ibse-fehse.de/services.
But so reloading a sub-page leads to a 404-server-error „Page not found“ because the current path could not be located server-side.
Solution is to add some lines to .htaccess:

RewriteEngine On
# If an existing asset or directory is requested go to it as it is
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^ - [L]
# If the requested resource doesn't exist, use index.html
RewriteRule ^ /index.html

Thanx to Dan Mindru.

Using git-hooks

Um den Entwicklungs-Workflow zu vereinfachen, können git-hooks eingesetzt werden. Dadurch können vor speziellen git-Befehlen automatisch  Skripte gestartet werden. Eine entsprechende Lösung bietet z.B. pre-commit. Die Installation erfolgt mittels GEM (the frontend to RubyGems):

$ sudo gem install pre-commit

Zur projektspezifischen Einrichtung sid folgende Schritte notwendig:

$ cd path/to/git/repo
$ pre-commit install
$ git config pre-commit.checks "[console_log, debugger, jshint, js_lint, merge_conflict, json]"

Nähere Informationen zur Konfiguration finden sich auf https://github.com/jish/pre-commit. Eventuell muss noch execjs installiert werden:

$ sudo gem install execjs

Upgrade Git

Seit kurzem arbeite ich mit Visual Studio Code als IDE. Nachdem dessen Update auf Version 1.6 kam die Meldung, dass Git 1.9.1 installiert sei, aber VSCode mit Git 2.x besser zusammenarbeiten würde. Also warum nicht auch Git aktualisieren?!

$ sudo apt install git

brachte erstmal keinen Erfolg, weil die aktuellste Version bereits installiert sei. Mmh.. Eine kurze Recherche ergab, dass noch ein passendes PPA-Repository hinzugefügt werden muss:

$ sudo add-apt-repository ppa:git-core/ppa

Danach die Paketquellen aktualisieren und die Installation erneut starten. Voila!

$ sudo apt update
$ sudo apt install git
$ git --version
git version 2.10.1

Midnight Commander Color Scheme

Ein dunkles Farbschema empfinde ich als wesentlich angenehmer. Daher hier ein kurzes HowTo, wie ich das Standard-Theme des MC  ersetzt habe.

  1. close mc
  2. Download von darkened.ini nach ~/.local/share/mc/skins/
  3. Anpassen von ~/.config/mc/ini: skin=darkened
  4. start mc and enjoy

Hier noch einige interessante Links, die mir weitergeholfen hatten:

  • https://sinustrom.info/2014/03/23/midnight-commander-dark-color-scheme/
  • http://www.zagura.com/index.php/2008/01/09/midnight-commander-color-themes/
  • https://www.midnight-commander.org/wiki/doc/common/skins

Git-Merge schlägt fehl

$ git checkout develop
$ git pull

Branch develop wird geladen und von remote aktualisiert. Soweit so gut.. Während unseres weiteren codens ergänzt jemand origin/develop. Nun  können unsere Änderungen nicht ohne weiteres nach remote geschoben werden:

$ git push => Fehler beim Versenden einiger Referenzen

screenshot_20160317

Dies lässt sich durch folgende Befehle beheben:

$ git fetch
$ git rebase

Nun kann mittels git push auch origin/develop aktualisiert werden.

Reset deleted file from git-index

Die Datei test.txt ist neu erstellt und wird dem git-index (staging area) hinzugefügt:

$ git add test.txt

Warum auch immer wird diese Datei gelöscht:

$ rm test.txt

Ein manuelles Entfernen der Datei test.txt aus der Staging-Area mittels dem bei „git status“ vorgeschlagenem „git reset“ schlägt fehl: „unknown revision or path not in the working tree.“ Es hilft „git remove“:

$ git rm --cached test.txt

SSH-Login ohne Passwort

Ziel ist das (sichere) Anmelden per SSH von Host A (Benutzer a) an Host B (Benutzer b), allerdings ohne Passwort. Zuerst den SSH-Schlüssel erstellen (auf Rechner A):

a@A: $ ssh-keygen -C "$(whoami)@$(hostname)-$(date -I)"
a@A: $ ssh-add -l

Sollte auf Host B noch kein Verzeichnis ~/.ssh vorhanden sein, dies erstellen:

a@A: $ ssh b@B mkdir .ssh

Den gerade erstellten öffentlichen Schlüssel nach Host B kopieren:

a@A: $ cat .ssh/id_rsa.pub | ssh b@B 'cat >> .ssh/authorized_keys'

Nun sollte eine Anmeldung ohne Passwort möglich sein:

a@A: $ ssh b@B

Weiterführende Links: