zur Startseite

git

git 2.0

git-push simple / matching

Git 2.0 hat das Verhalten von git-push geändert.

git config --global push.default simple

Es wird nun nur mehr der aktuelle Zweig ins Repository hoch geladen. Entwickler Zweige bleiben auf dem Arbeitsplatz.

Um das alte Verhalten wieder herzustellen muss man die Variable push.default auf matching setzen.

git config --global push.default matching

Weitere Informationen zu den Änderungen findet man auf der Seite http://www.heise.de/ix/meldung/Was-sich-mit-Git-2-0-aendert-2141147.html.

github.com einrichten

git init
git config user.name"muster.mann"
git config user.email"muster@mann.tdl"
 # Merkt sich das Passwort für 15 Minuten
git config credential.helper cache
 # Merkzeit auf eine Stunden erweitert
git config credential.helper 'cache --timeout=3600'
git add README.md
git commit -a -m "start"
git remote add origin https://github.com/name/repro.git
git push -u origin master

Jetzt wird nach dem Benutzernamen und dem Passwort gefragt

Vorhandenes Repository erneut auschecken.

git clone https://github.com/name/repro.git

Es wird nach keinem Passwort gefragt

.gitignore Global einrichten

Bestimmte Dateien will man einfach nicht in der git Verwaltung habe. Um solche Dateien gleich von Anfang a:n auszuschließen kann man sich eine globale .gitignore Datei einrichten.

git config --global core.excludesfile ~/.USER_gitignore

git Archiv erstellen

git archive --format=tar.gz  --output=Download/PROGRAMM_1.1.tar.gz --prefix=/opt/PROGRAMMNAME/ HEAD

Mit einen nicht --bare Repository arbeiten

Eigentlich sollte man nur mit einem --bare Repository arbeiten. Aber wie das im Leben so ist braucht man evtl. auch mal die andere Möglichkeit. Wie diese Funktioniert will ich an einem Beispiel erklären.

Zu erste wird das Arbeits-Repository erstellt (Orig.)

mkdir orig
cd orig
git init
echo "orig" >> test.txt
git add .
git commit -a -m"start"

Dann der Clone. Für den Test verwende ich hier das /tmp Verzeichnis.

cd /tmp
git clone ~/orig
cd orig
git commit -a -m"clone"

Will man nun die Änderung, wie gewohnt, mit git push zurück spielen bekommt man eine Fehlermeldung.

remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
remote: error: the work tree to HEAD.
remote: error: 

...............

Mit dem Befehl im Original Repository

git config receive.denyCurrentBranch ignore

kann man es doch erlauben. Nach dieser Einstellung funktioniert dann auch der push Befehl beim Clone.

Im Original wird jetzt angezeigt dass sich die Datei geändert hat.

git status
 # On branch master
 # Changes to be committed:
 #   (use "git reset HEAD <file>..." to unstage)
 #
 #  modified:   test.txt
 #

Um diese Änderung des Clons in die Original Datei zu bekommen kann der gewohnte pull Befehl nicht verwendet werden. Man muss einen Befehl verwenden der die Änderung rückgängig macht. Hier muss man ein bisschen um die Ecke denken um es zu verstehen.

Für das Rückgängig machen stehen zwei Befehle zur Verfügung.

  1. git checkout -f
  2. git reset --hard

Clone Version nach Orig. einspielen.

cat test.txt
-> orig

git checkout -f
cat test.txt
-> orig
-> clone

Auf der Clone Seite funktioniert alles wie gewohnt.

Änderung auf der Original Seite.

echo "orig" >> test.txt 
git commit -a -m"orig2"

Einspielen der Änderung auf der Clone Seite.

git pull
cat test.txt 
-> orig
-> clone
-> orig

GIT Repository durchsuchen

Mit de Befehl

git grep SUCHWORT $(git rev-list --all)

kann das Repository durchsucht werden. Dabei kann das SUCHWORT auch als <regex> definiert werden.

Tag Verwaltung

Tags anzeigen

git tag

Tag Erstellen

git tag -a tagname bzw. git -a tagname -m "Beschreibung"

Tag nachträglich erstellen

git tag -a tagname commitnummer

Tag hoch laden

git push --tags

Tag nach Muster suchen

git tag -l "*.1", Sucht alle Tags die mit .1 enden.

Tag Daten anzeigen

git show tagname

Git TAG im –bare Repro löschen

Will man einen Tag, den man lokal mit

git tag -d wegdamit

gelöscht hat, auch im bare Repository löschen kann man folgenden Befehl verwenden:

git push origin :refs/tags/wegdamit

Dateien aus anderen Branches kopieren

Folgende Befehle kopiert die readme.md aus dem gh-pages Zweig in den master Zweig und übernehmen die neue Version.

git checkout master
git checkout gh-pages readme.md
git commit -a -m"readme.md aus gh-pages übernommen"
git checkout gh-pages

Amerkung zu git und texstudio

Um mit TexStudio git statt svn zu verwenden muss man unter Optionen TeXStudion Konfigurieren den Befehl svn in git ändern. TeXstudio verwendet aber zum einchecken den Befehl svn ci .... Diesen Befehl kennt git aber nicht. Man kann aber git dazubringen diesen Befehl zu lernen.

git config –global alias.ci "commit"

qgit

qgit ist eine grafische Oberfläche für git. Verschiedene git Kommandos müssen aber erst definiert werden. Dieses macht man unter dem Menü Punkt. Actions -> Setup Actions… Hier noch ein paar Beispiel:

Die Tabelle bildet das Dialogfenster “Actions bulider” ab.
Name Insert commands to run
holen git pull
hochladen git push
rel_hochladen git push –tag
fetch git fetch

Links


Copyright(c) 2013, 2014 Stefan Blechschmidt. Texte und Bilder dieser Seite sind frei im Sinne der CC BY-SA 3.0 Lizenz. Texte, Bilder und Zitate aus anderen Quellen sind von dieser Lizenz ausgenommen. Kommentare und Anmerkungen senden Sie bitte an sb AT it-bayer PUNKT de.

Oben
Unten

Home
Suche