mit github push & pull · 1.1 mit github push & pull git und github, wie spielt das...
TRANSCRIPT
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
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 aptget install gitall
Alternative: SSH Key für Git Server über SSH / GitHub:
http://git-scm.com/download/linux
$ sshkeygen 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 [email protected]
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 [email protected]: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://[email protected]/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 <[email protected]> Date: Thu Jun 23 23:41:43 2016 +0200
im stage
commit 2768012ecfd142a385bea8e11203476a775d6c5f Author: Glen <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 noff 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 Automerging 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 toolhelp' 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 [remotename] [branchname] $ 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 [remotename] $ git fetch [remotename] [branchname]
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 [remotename]
Entspricht:$ git fetch [remotename]; git merge [remotename]/[currentbranch]
Nur ein speziellen Branch fetchen und mergen:
$ git pull [remotename] [remotebranch]
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 [remotename]
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
15 . 4
Vergleich von Workflow Modellen
(Centralized, Feature, Gitow, Forking),
, , ,
,
Comparing Workows
Der zentralisierte Workow Teil 1 Teil 2Der Feature Branch Workow Teil 1 Teil 2Der Forking-Workow Teil 1 Teil 2Der Gitow-Workow Teil 1 Teil 2Der Pull Request Workow Teil 1 Teil 2
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/gitshell 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 aptget install gitgui
⇓
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.