Schlagwort-Archive: Git

How to clone a specific git branch

If you need to copy an already existing branch into a new or seperate repository just use this command:

cd ~/projects/
git clone --single-branch --branch <branchname> <remote-repo> project1
cd project1/
git branch

It will create a repo inside of projects/project1 inside your Home folder which contains a branch called <branchname> copied from <remote-repo>. This source <remote-repo> could be a remote reference (https..) but also a local folder.

Thanx to stackoverflow 😉

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 🙂

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

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