MIT GITHUB PUSH & PULL · 1.1 MIT GITHUB PUSH & PULL Git und GitHub, wie spielt das zusammen und...

Post on 11-Sep-2020

14 views 0 download

Transcript of MIT GITHUB PUSH & PULL · 1.1 MIT GITHUB PUSH & PULL Git und GitHub, wie spielt das zusammen und...

1 . 1

MIT GITHUB PUSH & PULL

Git und GitHub, wie spielt das zusammen und

wie nutze ich das.Glen Langer

Contao Stammtisch Berlin (24.07.2016)

Version: 1.2.0 vom 01.08.2016

2 . 1

QuellenOnline Doku von Git / GitHubErfahrung durch AusprobierenBücher (die Dinger aus Papier)

Lizenz

Dieses Werk ist lizenziert unter einer

.

Creative CommonsNamensnennung - Weitergabe unter gleichen Bedingungen

3.0 Deutschland Lizenz

3 . 1

ÜBER MICHContao seit 2.5.8PHP ZCEForum: BugBusterhttp://contao.ninja/

4 . 1

WORUM GEHT ES?Die Arbeit mit Git und Github, Branches erstellen, Pull

Requests erzeugen, Versionierung, Push und Pull und einigesmehr.

"Stash mal deinen Working-Tree, sonst gibt's einen Conict,wenn du den Dev-Branch pullst."

5 . 1

UNTERSCHIEDE SVN <-> GITEs gibt Unterschiede die man als Umsteiger von SVN nach Git

vielleicht wissen sollte.

5 . 2

Subversion hat ein zentrales Repository

5 . 3

Git lokale Arbeitskopien sind selbst RepositoriesEinigung auf ein zentrales „upstream“ Repository

5 . 4

Subversion Leere Verzeichnisse werden vollständig aufgezeichnet.

Git Zeichnet nur Inhalte auf, wodurch leere Verzeichnisse

verloren gehen.

5 . 4

6 . 1

GIT INSTALLATION⇓

6 . 2

Git für Windows

Installiert die Kommandozeilenversion (inklusive eines SSHClients) als auch die Standard GUISSH Key entweder über Git Bash, Homeverzeichnis, mkdir.ssh ; ...., oder über Git Gui - Hilfe - SSH Schlüssel anzeigen,dort kann auch einer generiert werden. Wird später fürGitHub benötigt bzw. Git Server über SSH

http://msysgit.github.com/

6 . 3

Git für MacAb Mavericks (10.9) einfach im Terminal "git" eintippen,falls nicht installiert erfolgt die Frage zur InstallationAlternative: http://git-scm.com/download/mac

6 . 4

Git für Linux$ sudo apt­get install git­all

Alternative: SSH Key für Git Server über SSH / GitHub:

http://git-scm.com/download/linux

$ ssh­keygen ­t rsa ­b 4096

7 . 1

GIT KONFIGURATION⇓

7 . 2

Deine Identität$ git config ­­global user.name "Max Mustermann"

$ git config ­­global user.email max@mustermann.de

Ohne '--global' gelten die Angaben nur für das aktuelleProjekt.

7 . 3

Dein EditorNormalerweise verwendet Git den Standard-Texteditor

deines Systems

$ git config ­­global core.editor emacs

$ git config ­­global core.editor "'C:/Program Files (x86)/Notepad++/notepad++.exe' ­multiInst ­nosession"

7 . 4

FormatierungenHier geht es um das Zeilenende Kennzeichen, im Besonderenwenn mit Windows und Linux/Mac gemeinsam gearbeitetwird. Git kann hier automatisch eingreifen.

$ git config ­­global core.autocrlf true

konvertiert bei Commit CRLF in LF, und von LF zurück zuCRLF bei einem Checkout (für Windows Nutzer)

$ git config ­­global core.autocrlf input

konvertiert bei Commit CRLF in LF, aber nicht in die andereRichtung bei einem Checkout (für Linux/Mac Nutzer)

7 . 5

Etwas FarbeUm die Lesbarkeit zu erhöhen, werden die Ausgaben

eingefärbt

$ git config ­­global color.diff "auto" $ git config ­­global color.status "auto" $ git config ­­global color.branch "auto" $ git config ­­global color.interactive "auto" $ git config ­­global color.ui "true"

7 . 6

Git AliaseLange Befehle abkürzen? Kein Problem

$ git config ­­global alias.co checkout $ git config ­­global alias.br branch $ git config ­­global alias.ci commit $ git config ­­global alias.st status

Nutzung dann beispielsweise für 'git status':git st

7 . 7

Git AliaseAuch eigene Befehle bauen ist möglich

$ git config ­­global alias.unstage 'reset HEAD ­­' $ git config ­­global alias.last 'log ­1 HEAD' $ git config ­­global alias.visual '!gitk'

Statt 'git log -1 HEAD' kann nun ausgeführt werden:

$ git last

7 . 8

ProzessorkerneFür Computer mit mehreren Prozessorkernen (optional)

$ git config ­­global pack.threads "0"

Git nimmt dann soviele Threads wie im System zur Verfügungstehen. Achtung: Eventuell Speicherprobleme [1], Git RAMVerbrauch:

(pack.deltaCacheSize + pack.windowMemory) × pack.threads

Notbremse (z.B. bei Shared Hoster):

$ git config ­­global pack.windowMemory "100m" $ git config ­­global pack.packSizeLimit "100m" $ git config ­­global pack.threads "1"

[1]: Ist dem Autor noch nie passiert, aber gut zu Wissen.

7 . 9

Einstellungen überprüfenAlle Einstellungen anzeigen, die Git an dieser Stelle (z.B.

innerhalb eines Projektes) bekannt sind:

$ git config ­­list

oder mal schauen in der Datei:

~/.gitconfig

8

JETZT SEID IHR DRANZeit zur Installation und Konguration von Git.

9 . 1

GIT REPOSITORY ANLEGEN(es gibt mehrere Möglichkeiten, es folgen zwei)

9 . 2

Verzeichnis als Git Repository initialisierenIn das zu versionierende Verzeichnis wechseln und eingeben:

$ git init

Ein Unterverzeichnis .git wird erzeugt, darin sind allerelevanten Git Repository Daten, also ein Git RepositoryGrundgerüst.

Zu diesem Zeitpunkt sind noch keine Dateien versioniert.Wie das durchgeführt wird, folgt in den nächsten Folien.

9 . 3

Existierendes Repository klonenUm das (fremde) GitHub Repository "Spielwiese" von"BugBuster1701" zu klonen, führst Du den folgenden Befehlaus:

$ git clone https://github.com/BugBuster1701/spielwiese.git

Es wird ein Verzeichnis "spielwiese" angelegt und eineArbeitskopie der letzten Version abgelegt. (checkout)

Soll beim Klonen ein anderes Verzeichnis angelegt werden,kann dies als Parameter mit angegeben werden:

$ git clone https://github.com/BugBuster1701/spielwiese.git meinewiese

9 . 4

Existierendes Repository klonenAuf eigene Repositories kann über SSH zugegriffen werden,ein klonen sähe dann so aus:

$ git clone git@github.com:BugBuster1701/spielwiese.git

Entsprechende Kongurationen für den SSH Zugang sindvorher nötig. (Stichwort: Public Key)

Sollte kein SSH Zugang möglich sein, aber ein Proxy existiert,wäre das auch möglich: (Passwort wird benötigt)

$ git clone https://BugBuster1701@github.com/BugBuster1701/spielwiese.git

10 . 1

LEBENSZYKLUS DER DATEIENBevor nun mit dem Repository gearbeitet wird, eine kleineLehre über die Zustände die eine Datei haben kann, auchLebenszyklus genannt.

10 . 2

LEBENSZYKLUS DER DATEIEN

Es gibt dann noch "deleted", Datei wurde dabei ohne GitBefehl gelöscht.

10 . 3

LEBENSZYKLUS WORKING DIR -REMOTE REPOSITORY

11 . 1

DIE WICHTIGSTEN BEFEHLE(BEGINNER)

git status, git add, git commit, git tag

git log, git diff, git rm, git mv

11 . 2

git statusGibt den Zustand der Dateien im Working Dir aus:

$ git status On branch master Your branch is ahead of 'origin/master' by 2 commits. (use "git push" to publish your local commits)

Changes to be committed: (use "git reset HEAD ..." to unstage)

new file: stage

Untracked files: (use "git add ..." to include in what will be committed)

neu.txt

11 . 3

git addEine neue Datei zur Versionskontrolle hinzufügen bzw. einegeänderte Datei für den nächsten Commit vormerken (Stage)

$ git add . $ git add ­­all $ git add dir/ $ git add <file>

11 . 4

git commitErzeugt einen Änderungseintrag in einem Branch allerDateien aus dem Stage inklusive Beschreibung.

$ git commit <­­ Editor geht auf für die Beschreibung $ git commit ­m "Beschreibung für diesen Commit" $ git commit ­a ­m "Beschreibung für diesen Commit"

Letzteres überspringt die Stage Area und übernimmt alleÄnderungen direkt in den Commit.

11 . 5

git tagVorhandene Tags anzeigen oder Tags anlegen, um z.B. eineRelease Version zu markieren (z.B. 1.0.0).

$ git tag $ git tag 1.0.0 $ git tag ­a 1.0.0 ­m "Version 1.0.0" $ git tag ­a 0.5.3 ­m "Version 0.5.3 beta" 9fceb02

alle Tags anzeigenneuen einfachen Tag anlegenneuen kommentierten Tag anlegennachträglich neuen kommentierten Tag anlegen fürCommit Hash

11 . 6

git logZeigt die letzten Änderungen (Commits) an. Hier einigewenige Varianten:

$ git log$ git log ­p ­2$ git log ­4 ­­oneline $ git log ­4 ­­pretty=format:"%h ­ %an, %ar : %s" $ git log ­­all ­­grep='Hotfix #33'

"git log" ist sehr sehr mächtig, hat haufenweise Optionen.Hilfe mit "git help log" zeigt Manual mit 1300 Zeilen!

Der Output im Einzelnen:

11 . 7

Ausgabe: git logcommit 5bca2e5d64275f13c63def522b2909d7547024b8 Author: Glen <mail@no.name> Date: Thu Jun 23 23:41:43 2016 +0200

im stage

commit 2768012ecfd142a385bea8e11203476a775d6c5f Author: Glen <mail@no.name> Date: Sun Sep 27 00:03:03 2015 +0200

Test

Hash, Datum, Commit Beschreibung ist hier zu sehen, nichtjedoch welche Dateien es betraf.

11 . 8

Ausgabe: git log -p -2commit 5bca2e5d64275f13c63def522b2909d7547024b8 Author: Glen <mail@no.name> Date: Thu Jun 23 23:41:43 2016 +0200

im stage

diff ­­git a/commi b/commi new file mode 100644 index 0000000..e69de29

commit 2768012ecfd142a385bea8e11203476a775d6c5f Author: Glen <mail@no.name> Date: Sun Sep 27 00:03:03 2015 +0200

Test

diff ­­git a/.gitignore b/.gitignore new file mode 100644

Option "-p" bedeutet Patch Format, "-2" die letzten zweiCommits.

11 . 9

Ausgabe: git log -4 --oneline5bca2e5 im stage 2768012 Testc4e3d80 composer angepasst 41e2e78 extra in composer.json

Kurzer Hash und Commit Nachricht

11 . 10

Ausgabe: git log -4 --pretty=format...$ git log ­4 ­­pretty=format:"%h ­ %an, %ar : %s" 5bca2e5 ­ Glen , 2 hours ago : im stage 2768012 ­ Glen , 9 months ago : Test c4e3d80 ­ Glen , 2 years, 8 months ago : composer angepasst 41e2e78 ­ Glen , 2 years, 8 months ago : extra in composer.json

Kurzer Hash, Autor Name, relatives Autor Datum undCommit Nachricht

11 . 11

Ausgabe: git log --all --grep...$ git log ­­all ­­grep='Hotfix #33' commit fc9e6dc4963ae22f6b645b202ade9729800c9375 Author: Glen <mail@no.name> Date: Tue Jul 5 11:42:24 2016 +0200

Hotfix #33, update composer.json

Sucht in allen (--all) Branches in den commit-Nachrichtennach dem Text 'Hotx #33' und gibt das vollständige Log aus

11 . 12

git diffZeigt die Unterschiede in der Patch Notation an zwischenzwei Commits. Hier einige Varianten:

$ git diff <­­ alle Änderungen, die nicht im Stage sind $ git diff ­­cached <­­ alle Änderungen die im Stage sind *1 $ git diff ­­staged <­­ alle Änderungen zw. Stage und lokalem Repo *1 $ git diff <hash> <hash/tag/HEAD> <­­ Änderungen zwischen zwei Commits $ git diff <hash>/HEAD! <file> <­­ Unterschied zum Vorgänger $ git diff <tag> HEAD >local.patch <­­ Patch erzeugen *2

*1: In der Demo testen wo da der Unterschied ist. (Ergebnis: --staged ist ein Synonym für --cached)

*2: Einspielen mit:

$ git apply local.patch; git commit ­m "applied patch"

11 . 13

git rmLöscht eine Datei aus dem Repository (beim nächstenCommit) und im Normalfall auch gleich aus dem Working Dir

$ git rm <file> <­­ entfernt Datei aus dem Repo und Working Dir $ git rm ­f <file> <­­ Force wenn Datei geändert im Stage liegt $ git rm ­­cached <file> <­­ entfernt Datei aus dem Repository, bleibt im Working Dir vorhanden

11 . 14

git mvDatei verschieben oder umbenennen (mit Commitbestätigen)

$ git mv <file_from> <file_to>

Kurzform für:

$ mv file_from file_to $ git rm file_from $ git add file_to

Verschiebung / Umbenennung verfolgen:

$ git log ­­summary ­M90% | grep ­e " rename"

12 . 1

TIPP: .GITIGNORENicht alles muss versioniert werden im Projektverzeichnis.Dateien und Verzeichnisse können davon ausgenommenwerden.

Dazu wird eine Datei angelegt .gitignore

12 . 2

Tipp: .gitignore# Transifex /.tx/#for development in vbox /vendor/ composer.lock #IDE.buildpath .project .settings/ #Cachesrc/cache/largebrowscap_*/largebrowscap.iniparts.* src/cache/largebrowscap_*/largebrowscap.patterns.*

12 . 3

Tipp: .gitignoreGit ignoriert leere Verzeichnisse, kann aber überredetwerden mit einer .gitignore Datei in das entsprechendeVerzeichnis:

# Dummy file to make Git create the folder *!.gitignore

13 . 1

DEMOAusprobieren der gezeigten Befehle.

git status, git add, git commit, git tag git log, git diff, git rm, git mv

14 . 1

DIE WICHTIGSTEN BEFEHLE(FORTGESCHRITTENE)

git branch, git checkout, git merge

git remote, git push, git fetch, git pull

14 . 2

git branchIn Git ist ein Branch ein Zeiger auf einen der Commits. Der

Standardname eines Git-Branches lautet "master".

$ git branch develop

Legt ein Branch an mit Namen "develop", bzw. erzeugt einenneuen Zeiger mit Namen "develop" der auf den aktuellen

Commit zeigt.

14 . 3

git branch

Im Bild sind drei Commits zu sehen, zeitlich von links nachrechts. Die Pfeile der Commits zeigen auf den jeweiligenVorgänger.

14 . 4

git branchÜber den Zeiger "HEAD" weiß Git, welchen Branch Du

momentan verwendest.

14 . 5

git checkoutIn einen anderen Branch wechseln, hier nach "develop"

$ git checkout develop $ git checkout ­b develop master <­­ Branch anlegen und wechseln

Dadurch zeigt HEAD nun auf den Branch "develop".

14 . 6

git checkoutNach einer Dateiänderung mit Commit verschieben sich danndie Zeiger.

14 . 7

git checkoutWechsel zurück nach Master und Änderung committen,bewirkt ein auseinander laufen der Historie.

14 . 8

git mergeZusammenführen von Branches, beide haben Änderungen

$ git checkout master $ git merge develop

14 . 9

git merge (fast forward)Zusammenführen von Branches, master ohne Änderung

$ git checkout master $ git merge develop

14 . 10

git merge --no-ffZusammenführen von Branches, master ohne Änderung

$ git checkout master $ git merge ­­no­ff develop <­­ kein fast forward bitte!

14 . 11

git merge: Konflikt :-(Hat man an der selben Datei an der selben Stelle in denbeiden Branches was geändert, ist der Merge nichtkoniktfrei möglich.

$ git checkout master $ git merge develop Auto­merging README CONFLICT (content): Merge conflict in README Automatic merge failed; fix conflicts and then commit the result.

Git hat hier keinen 'merge commit' erstellt. Der Prozesswurde gestoppt. In so einen Fall schauen wir uns die Datei

mal an:

14 . 12

git merge: Konflikt :-)<<<<<<< HEAD Hello World =======Hallo Welt >>>>>>> develop

Für eine Version entscheiden oder mixen, je nach Bedarf. DieAbschnittszeilen mit löschen und speichern.

Anschließend mit 'git add' die Änderung als bereinigtmarkieren und falls nötig die nächste Koniktdatei

bearbeiten. Zum Schluss dann mit 'git commit' den "mergecommit" abschließen.

14 . 13

git merge: Konflikte mit mergetoolEs ist möglich, die Konikte auch mit graphischen Tools zu

lösen. Dafür gibt es das "mergetool" welches man denierenkann. Ist es nicht deniert sieht das so aus:

$ git mergetool

This message is displayed because 'merge.tool' is not configured. See 'git mergetool ­­tool­help' or 'git help config' for more details. 'git mergetool' will now attempt to use one of the following tools: meld opendiff kdiff3 tkdiff xxdiff tortoisemerge gvimdiff diffuse diffmerge ecmerge p4merge araxis bc3 codecompare emerge vimdiff

Wird das 'merge' Werkzeug beendet, fragt Git nach, ob derKonikt gelöst wurde. Bei Antwort 'Ja' wird das Skript diese

Datei als gelöst markieren.

14 . 14

git remoteVorhandene Remote Repositories anzeigen oder RemoteRepositories anlegen

$ git remote $ git remote ­v $ git remote add [shortname] [url] $ git remote add forkedfrom git://github.com/BugBuster1701/visitors.git $ git remote rm [shortname]

alle Remote Repositories anzeigen, nur Kurzformebenso, "-v" Kurzform und hinterlegte URLRemote Repository hinzufügenRemote Repository hinzufügen, BeispielRemote Repository (Verknüpfung) löschen

14 . 15

git pushÄnderungen in ein Remote Repository veröffentlichen, einnicht existierender Branch wird angelegt

$ git push [remote­name] [branch­name] $ git push origin master $ git push ­­tags origin master $ git push ­­tags

SyntaxBeispiel, Änderungen vom lokalen Branch "master"veröffentlichenebenso, aber "Tags" mit veröffentlichennur "Tags" veröffentlichen

14 . 16

git push defaultHat man mehrere Branches im lokalen Repository und derpush-Befehl soll nur den aktiven Branch übertragen, ohne dasman Branch-Parameter angibt, kann man die push.defaultOption setzen:

$ git config push.default upstream

Bei dem Standardwert matching würden alle lokalenBranches übertragen werden, die einen gleichnamigenRemote Branch besitzen.

14 . 17

git fetchImportiert Commits vom Remote-Repository in das lokaleRepository als Remote-Branches

$ git fetch [remote­name] $ git fetch [remote­name] [branch­name]

Fetchen aller Branches aus dem RepositoryFetchen nur den Branch [branch-name]

Änderungen in origin/master gegenüber dem lokalen master:

$ git log ­­oneline master..origin/master

Manuell mergen:

$ git merge origin/master

14 . 18

git pullFetchen der spezizierten Remote-Kopie des aktuellenBranches und mergen direkt in die lokale Kopie.

$ git pull [remote­name]

Entspricht:$ git fetch [remote­name]; git merge [remote­name]/[current­branch]

Nur ein speziellen Branch fetchen und mergen:

$ git pull [remote­name] [remote­branch]

14 . 19

git pull (Beispiel)$ git checkout master

$ git pull origin

Fetched alle 'origin' Branches und merged den 'master'Branch. Entspricht also:

$ git fetch origin; git merge origin/master

14 . 20

git pullDie Option '--rebase' kann genutzt werden, um eine lineareHistory sicherzustellen, indem unnötige Merge-Commitsvermieden werden.

$ git pull ­­rebase [remote­name]

Statt 'git merge' für die Integration des Remote-Branchs mit dem lokalen Branch zu nutzen, wird 'gitrebase' angewendet.

15 . 1

WORKFLOWArbeiten mit lokalen und externen Branches die permanentbzw. temporär sind. Git ist im Prinzip ein Baukasten. Es kannjeder selber festlegen, wie das Git Ökosystem seinesProjektes auszusehen hat.

15 . 2

Workflow BranchesEin Beispiel wie es in den meisten Fällen ausreichend undauch empfohlen wird.

Permanente origin Branchesorigin/masterorigin/develop

Permanente lokale Branchesmasterdevelop

Temporäre lokale Brancheshotxfeature

15 . 3

Worflow Übersicht

16 . 1

EIGENER GIT SERVEREin eigener Git Server der über SSH zu erreichen ist, kannganz einfach eingerichtet werden.

In den nachfolgenden Folien wird davon ausgegangen, dassein Linux PC dafür zur Verfügung steht und öffentliche SSH-Schlüssel der Entwickler für den Login verwendet werden.

16 . 2

Nutzer anlegen für den Git Server$ sudo adduser git $ su git $ cd $ mkdir .ssh $ touch .ssh/authorized_keys $ chmod 700 .ssh

In das Unterverzeichnis legen wir nun die öffentlichen SSH-Schlüssel ab von den Entwicklern.

$ cat /tmp/id_rsa.kevin.pub >> ~/.ssh/authorized_keys $ cat /tmp/id_rsa.helen.pub >> ~/.ssh/authorized_keys $ cat /tmp/id_rsa.james.pub >> ~/.ssh/authorized_keys

16 . 3

Ein Repository anlegen$ cd /opt/git <­ ggf. vorher anlegen, einmalig $ mkdir project.git $ cd project.git $ git ­­bare init

Damit wird ein Repository ohne ein Arbeitsverzeichniserzeugt. Das muss dann für jedes neue Projekt auf dieseWeise angelegt werden.

16 . 4

Erster Entwickler legt los"gitserver" sei der Hostname des Servers auf dem wir geradedas Bare-Repository angelegt haben.

# Kevin Jones Computer $ cd myproject $ git init $ vim README $ git add . $ git commit ­m 'initial commit' $ git remote add origin git@gitserver:/opt/git/project.git $ git push origin master

16 . 5

Zweiter Entwickler legt losHier kann bereits durch klonen begonnen werden

# Helen Lewis Computer $ git clone git@gitserver:/opt/git/project.git myfirstproject $ cd myfirstproject $ vi README $ git add . $ git commit ­m 'fix a typo' $ git push origin master

16 . 6

Eigenen Git Server absichernDen angelegten Nutzer "git" sollte man einschränken, damitdieser nur für das Repository genutzt werden kann. Dazubekommt dieser eine eigene Shell von Git:

$ sudo chsh ­s /usr/bin/git­shell git

Damit versteht der Nutzer "git" nur noch Git Befehle undbietet keine normale Shell mehr an.

17 . 1

WEITERE BEFEHLE (1)git reset ... <-- lokale Änderungen rückgängig machen,

"merge" abbrechen

git stash [pop] ... <-- lokale Änderungen zwischenspeichernund zurückholen

git rebase <branch> <--Historie glätten, Branch verschieben

17 . 2

WEITERE BEFEHLE (2)git blame <le> <-- wer hat was geändert

git archive ... <-- Projektinhalt als Archiv anlegen

git cherry-pick <hash> <-- einzelnen Commit übernehmen

git reog <-- Historie der Commits der Branch-Referenzen

17 . 3

WEITERE BEFEHLE (3)git submodule ... <-- In einem Projekt ein weiteres Projekt

darin einbinden

git subtree... <-- In einem Projekt ein weiteres Projektimportieren

.... vieles mehr, z.B. "Hooks"

18 . 1

Git GUIsFür Git gibt es sowohl GUIs die Git selber mitbringt als auchvon externen Anbietern welche.

Diese gibt es als freie und kostenpichtige für Windows, Macund Linux.

Manche davon sind reine Anzeige Tools, andere können auchGit Befehle absetzen.

18 . 2

Git interne GUIsgitk (only browsing)git gui (for comitting, too)

Diese GUIs benötigen unter Linux eine X WindowsUmgebung bzw. eine gesetzte $DISPLAY EnvironmentVariable.

Hinweis: Unter Ubuntu ist "git gui" ein extra Paket,installierbar mit:

sudo apt­get install git­gui

18 . 3

Git externe GUIs: ein text-mode (ncurses) Interface für Git

(Win/Mac) (Win/Max/Linux)

(Win/Mac)Weitere

tig SourceTreeGitKrakenGitHub Desktop

Git-GUI Clients

19 . 1

PRAXISAusprobieren der GUIs mit dem Bare-Server?

Oder später mit GitHub?

20 . 1

GITHUB

Web-Interface, Wiki und Support-System für Entwickler

20 . 2

GitHubHostet kostenlos öffentliche OpenSource-Projekte

Private Projekte kosten, siehe Preismodell

Reichert den Funktionsumfang von Git zusätzlich an ( Web 2.0 Features wie "Folgen" , "Beobachten" und "Stars",Fork, Pull Request (per Mausklick), Wiki , Issue Tracker, ...)

20 . 3

GitHub ForkJeder kann von den öffentlichen Git-Projekten einen eigenenAbleger eines Repositories, einen "Fork", starten. Dort kannjeder privat das Projekt weiter entwickeln. Anschließend istes möglich diese Weiterentwicklung dem ursprünglichenProjekt zurück zuführen (Pull Request einreichen) – oder alseigenständige Variante zu veröffentlichen.

20 . 4

GitHub Pull RequestMöchte ein Entwickler die Weiterentwicklung in dasursprüngliche Projekt einießen lassen, kann ein "PullRequest" eingereicht werden an den Administrator desjeweiligen Projektes. Dieser sieht sich die Änderungen an undentscheidet, den Pull durchzuführen, oder nicht.

Beachte: Follow-up-Commits

20 . 5

GitHub und SSHAnmelden auf GitHub, dann:

Settings -> SSH and GPG Keys oderAufruf der URL: neuen SSH Key anlegen

https://github.com/settings/ssh

20 . 6

GitHub Commit SecretGitHub reagiert auf Schlüsselwörter gefolgt von der TicketNummer in der Commit Nachricht. (erste Zeile)

Schlüsselwörter sind: fix/fixes/fixed, close/closes/closedoder resolve/resolves/resolved

$ git commit ­m "Fixed #42, CSS korrigiert"

Schließt das Ticket sobald dieser Commit sich im masterBranch bendet.

21 . 1

PRAXISGitHub anschauen und ausprobieren.

22 . 1

GITHUB ALTERNATIVENNeben GitHub gibt es noch , ursprünglich fürMercurial entwickelt wurde es später um Git Funktionalitäterweitert und gehört zu Atlassian.

Bitbucket

Es gibt auch Alternativen zum selber installieren mit mehroder weniger identischen Funktionen.

Nachfolgend sind einige aufgelistet, es gibt sicherlich nochmehr davon.

22 . 2

GitHub Alternativen zum Installieren (CE), Ubuntu, Debian, CentOS,

Raspbian, Java8 (gitbucket.war), LDAP

- Go Git Service; Go; Windows, Linux, Mac, Docker,Vagrant, Binary

GitLab Community Edition

GitBucketGogs

23 . 1

Literatur- Linkliste - OfflineBuch:

(3., aktualisierte und erweiterte Auage (29. Oktober2015)) Blog dazu:

- Tower (PDF als ZIP-Download mitverschiedenen Designs)

Git: Dezentrale Versionsverwaltung im Team -Grundlagen und Workows

https://kapitel26.github.io/archiveGit Cheat Sheet

23 . 2

Literatur- Linkliste - OnlineOnline Buch: , 1st Edition 2009Online Buch: , 2nd Edition 2014Git online interaktiv über Browser: (en)

- Lerne Git Commit für CommitYoutube: - Tobias Günther (de, 1h), sehr guter und verständlicher Einstieg

ProGIT deutschProGIT englisch

TryGitgit ready

Git Crash-Kurs

24 . 1

FRAGEN?Tipp:

Repository Spielwiese / Playground anlegen und einfach allesausprobieren.

Bonus:GitHub -> Packagist.org (Composer) Verknüpfung

(wenn noch Zeit ist)

25 . 1

FERTICH!

Diese Präsentation wurde erstellt mit

reveal.js-for-Contao

Danke an den Contao-Stammtisch München.