Benutzer-Werkzeuge

Webseiten-Werkzeuge


developer:github

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
developer:github [2015/01/21 11:05]
hofer [git tag -a nameDesTags]
developer:github [2019/08/13 13:48] (aktuell)
Zeile 31: Zeile 31:
  
 Damit man mit den lokalen Änderungen nicht durcheinander,​ kommt sollte vorher alles lokale **commited** werden. Damit man mit den lokalen Änderungen nicht durcheinander,​ kommt sollte vorher alles lokale **commited** werden.
 +
 +Falls bereits lokale Änderungen im Master vorhanden sind wird automatisch ein Merge Commit erzeugt. Um das zu verhindern kann <​code>​git pull --rebase</​code>​ verwendet werden.
  
 ===== Alternative zu merge commit: git rebase ===== ===== Alternative zu merge commit: git rebase =====
Zeile 60: Zeile 62:
 </​code>​ </​code>​
  
-In diesem Fall wird die gesamte history (alle commits) vom branch in den master mitgenommen. Wenn das nicht gewollt ist, kann man dem merge-Befehl noch den Parameter ''​--squash''​ mitgeben. Muss dann aber noch einen extra commit durchführen. Git befüllt in diesem Fall die commit message bereits mit allen möglichen Infos.+In diesem Fall wird die gesamte history (alle commits) vom branch in den master mitgenommen. Wenn das nicht gewollt ist, kann man dem merge-Befehl noch den Parameter ''​%%--%%squash''​ mitgeben. Muss dann aber noch einen extra commit durchführen. Git befüllt in diesem Fall die commit message bereits mit allen möglichen Infos.
  
 <​code>​ <​code>​
Zeile 68: Zeile 70:
 git push git push
 </​code>​ </​code>​
 +
 +Wenn man danach mit dem branch noch weiter arbeiten möchte, muss man den Startpunkt ändern (wo zweigt der branch ab).
 +
 +<​code>​
 +git checkout master
 +git branch -f mein-feature-branch <​letzterCommit>​
 +</​code>​
 +
 +Oder branch einfach löschen.
 +
 +<​code>​
 +git branch -D mein-feature-branch
 +</​code>​
 +
 +Soll ein neuer lokaler Branch für alle zur Verfügung stehen, kann dieser mit folgendem Befehl auf Github gepusht werden
 +<​code>​
 +git push origin mein-feature-branch
 +</​code>​
 +
 +Damit danach ein status/​pull/​push korrekt funktioniert muss noch folgender Befehl ausgeführt werden
 +<​code>​
 +git branch --set-upstream-to=origin/​mein-feature-branch mein-feature-branch
 +</​code>​
 +
 ===== git checkout (-b) nameDesBranches ===== ===== git checkout (-b) nameDesBranches =====
  
Zeile 95: Zeile 121:
 </​code>​ </​code>​
  
-''​apply''​ wendet die Änderungen nur an. +  * ''​apply''​ wendet die Änderungen nur an 
-''​pop''​ wendet die Änderungen an und löscht den Eintrag vom stash. +  ​* ​''​pop''​ wendet die Änderungen an und löscht den Eintrag vom stash. 
-Der Parameter ''​--index''​ stellt dann auch die "​staging area" genauso wieder her wie sie vorher war.+  ​* ​Der Parameter ''​%%--%%index''​ stellt dann auch die "​staging area" genauso wieder her wie sie vorher war. 
 + 
 +===== commit rückgängig machen ===== 
 + 
 +Jeder commit hat einen Hash (vergleichbar mit Revisionsnummer). Sehen kann man diese hashes über ''​git log''​. 
 + 
 +<​code>​ 
 +commit 1ece8a2f6be4429b3b9ddc934da5030389f7ecb1 
 +Author: Robert Hofer <​robert.hofer@technikum-wien.at>​ 
 +Date:   Tue Jan 20 10:34:08 2015 +0100 
 + 
 +    erster commit 
 +</​code>​ 
 + 
 +Um zu einem vorigen commit zu springen benötigt man diesen: 
 + 
 +<​code>​ 
 +git checkout 1ece8a2f6be4429b3b9ddc934da5030389f7ecb1 
 +</​code>​ 
 + 
 +Das Ganze geht auch kürzer: 
 + 
 +<​code>​ 
 +$ git log --oneline 
 +8d9a142 Squashed commit of the following:​ 
 +6121e0e acht 
 +08d267d Squashed commit of the following:​ 
 +37fa721 drei 
 +274478b zwei 
 +1ece8a2 erster commit 
 +$ git checkout 1ece8a2 
 +</​code>​ 
 + 
 +Vom hash reichen also auch die ersten 7 Stellen aus. 
 +===== Working Copy zurücksetzen ===== 
 +Wenn bereits lokale Commits vorhanden sind die verworfen werden sollen kann der aktuelle stand des Remote repositorys geholt werden mit: 
 +<​code>​ 
 +Auf Branch ci 
 +Ihr Branch ist vor '​origin/​ci'​ um 30 Commits. 
 +  (benutzen Sie "git push", um lokale Commits zu publizieren) 
 +nichts zu committen, Arbeitsverzeichnis unverändert 
 +</​code>​ 
 +Diese können mit folgenden Befehl verworfen werden: 
 +<​code>​ 
 +git reset --hard origin/ci 
 +</​code>​ 
 +wobei ci der name des Remote Branch ist. 
 + 
 +===== Branch Merge ===== 
 +Wenn die Entwicklung in einem eigenen Branch stattfindet können die Änderungen vom Master in den Branch übernommen werden damit der Branch wieder am aktuellen Stand ist.\\ 
 +1. Schritt: Master aktualisieren 
 +<​code>​ 
 +git checkout master 
 +git pull 
 +</​code>​ 
 +2. Schritt: Branch aktualisieren 
 +<​code>​ 
 +git checkout ci 
 +git pull 
 +</​code>​ 
 +3. Schritt: Änderungen vom Master in den Branch mergen 
 +(Man muss sich im Branch befinden) 
 +<​code>​ 
 +git merge master 
 +</​code>​ 
 + 
 +Wenn es zu Konflikten kommt müssen diese aufgelöst werden. 
 +Mit 'git status'​ bekommt man eine Übersicht über den aktuellen Stand. 
 +\\ 
 +Soll bei einem Konflikt die Version des Branches übernommen werden kann das mit folgendem Befehl gemacht werden: 
 +<​code>​ 
 +git checkout --ours datei.php 
 +</​code>​ 
 +Soll stattdessen die Version aus dem Master übernommen werden: 
 +<​code>​ 
 +git checkout --theirs datei.php 
 +</​code>​ 
 +Anschließend wird die korrigierte Datei hinzugefügt:​ 
 +<​code>​ 
 +git add datei.php 
 +</​code>​ 
 +Wenn alle Konflikte behoben sind werden die Änderungen commited: 
 +<​code>​ 
 +git commit 
 +</​code>​ 
 +Und nach dem testen gepusht: 
 +<​code>​ 
 +git push 
 +</​code>​
 ===== Andere interessante Befehle ===== ===== Andere interessante Befehle =====
  
Zeile 104: Zeile 218:
 git rm index.php</​code>​ git rm index.php</​code>​
  
 +===== Branch auf Commandline anzeigen =====
 +Um den aktuellen Branch direkt im Prompt auf der Commandline anzuzeigen kann die Variable %%$(__git_ps1)%% in der Datei ~/.bashrc gesetzt werden:
 +<​code>​
 +PS1='​${debian_chroot:​+($debian_chroot)}\u@\h:​\w\[\033[0;​32m\]$(__git_ps1)\[\033[0m\]\$ '
 +</​code>​
 +Um zusätzlich anzuzeigen ob es dort Änderungen gibt kann folgende Zeile hinzugefügt werden:
 +<​code>​
 +export GIT_PS1_SHOWDIRTYSTATE=1
 +</​code>​
  
 +==== Alias ====
 +In der Datei ~/​.gitconfig können Alias Befehle gesetzt werden um zB formatierte Logeinträge leichter anzuzeigen:
 +<​code>​
 +[alias]
 +    ci = commit
 +    lc = log ORIG_HEAD.. --stat --no-merges
 +    st = status
 +    co = checkout
 +    lg = log --graph --pretty=format:'​%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<​%an>​%Creset'​ --abbrev-commit --date=relative
 +</​code>​
 ===== Workflow ===== ===== Workflow =====
  
Zeile 110: Zeile 243:
  
 Die Grafiken in der [[http://​git-scm.com/​book/​en/​v2/​Git-Branching-Basic-Branching-and-Merging|git doku]] sagen mehr als 1000 Worte. Und [[https://​guides.github.com/​introduction/​flow/​index.html|der Guide]] schaut auch übersichtlich aus. Die Grafiken in der [[http://​git-scm.com/​book/​en/​v2/​Git-Branching-Basic-Branching-and-Merging|git doku]] sagen mehr als 1000 Worte. Und [[https://​guides.github.com/​introduction/​flow/​index.html|der Guide]] schaut auch übersichtlich aus.
 +
 +===== Aktuelle git Version installieren =====
 +
 +Für debian gibt es nur relativ alte git Versionen (max. 1.9 über backport). Aktuell sind sie aber bei 2.3.0. Die Version muss man selbst kompilieren. Und zwar so:
 +
 +<​code>​
 +sudo apt-get install autoconf libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev
 +sudo apt-get remove git
 +wget https://​www.kernel.org/​pub/​software/​scm/​git/​git-X.Y.Z.tar.gz
 +tar -zxf git-X.Y.Z.tar.gz
 +cd git-X.Y.Z
 +make configure
 +./configure --prefix=/​usr
 +make all doc info
 +sudo make install install-doc install-html install-info
 +cd ..
 +rm -r git-X.Y.Z
 +</​code>​
 +
 +Siehe auch [[http://​git-scm.com/​book/​en/​v2/​Getting-Started-Installing-Git|Installing Git]]
 +
 +===== git url alias =====
 +
 +Um zum Beispiel https URLs auf ssh URLs umzuschreiben kann man in ''​~/​.gitconfig''​ folgenden Eintrag machen:
 +
 +<​code>​
 +[url "​git://​git@github.com:"​]
 +    insteadOf = https://​github.com/​
 +</​code>​
 +
 +''<​nowiki>​https://​github.com/</​nowiki>''​ wird jetzt immer durch ''<​nowiki>​git://​git@github.com:</​nowiki>''​ ersetzt.
 +
 +Damit dieses Alias bei ''​git submodule''​ greift, müssen vorher in ''​.git/​config''​ die submodule gelöscht werden. Beispiel:
 +
 +<​code>​
 +[submodule "​submodules/​tablesorter"​]
 +    url = git@github.com:​christianbach/​tablesorter.git
 +</​code>​
 +
 +Diesen Eintrag entfernen. Den Ordner samt submodule (sicherheitshalber) löschen. Und dann
 +
 +<​code>​
 +git submodule init
 +git submodule update
 +</​code>​
 +
 +''​.git/​config''​ kontrollieren,​ hier sollten jetzt die ssh URLs eingetragen sein.
/var/www/wiki/data/attic/developer/github.1421834729.txt.gz · Zuletzt geändert: 2019/08/13 13:49 (Externe Bearbeitung)