Einführung zu Git€¦ · Einführung zu Git Das Nötigste für die Studienarbeit im Modul...
Transcript of Einführung zu Git€¦ · Einführung zu Git Das Nötigste für die Studienarbeit im Modul...
EinführungzuGit
DasNötigstefürdieStudienarbeitimModulDatenkommunikation
Ege Inanc
WarumisteinVersionskontrollsystemfürdieStudienarbeitnützlich?• ArbeitetmanimTeam,kannesespassieren,dasseinEntwicklerdendurcheinenanderenEntwicklerverändertenSourcecodeversehentlichüberschreibt• EinVersionskontrollsystemoderimSpeziellenGit hilft,dieszuverhindern• KonfliktedurchnebenläufigeVeränderungenimSourcecode könnenerkanntwerdenundaucheinRücksetzenaufeinenvorherigenStandistmöglich
2
WasistGit?
• Git isteinverteiltesVersionskontrollsystemfürSoftwareprojekte(Distributes VersionControlSystem,DVCS)• JederProjektmitarbeiterlegtseineigeneslokalesRepositoryan• EinlokalesArbeitenaufdemEntwicklungsrechneristohnepermanenteVerbindungzueinemRepository-Servermöglich• EinAbgleichmitanderenRepositories istauchmöglich,Konfliktewerdenerkannt
Anm.:EinRepositoryisteineArtDatenbankfürdenSourcecode einesProjekts
3
VerschiedeneRepositories inGit
• Local Repository• VersionsverwaltunginnerhalbdeslokalenVerzeichnisses(mittels„git init“)
• Staging Area• Temporäre,lokaleLagerungenderfestgeschriebenenÄnderungeneinesEntwicklers
• RemoteRepository• VersionsverwaltungübereinezentraleSchnittstelle,inderalleArbeitenderEntwicklerzusammengeführtwerden
4
Zusammenhänge
5
WarumGit ?
• RelativschnellesVerständnisdereinzelnenVorgängeistmöglich
• DasArbeitenistofflinemöglich• ImGegensatzzuandereVersionskontrollsystemen,wiez.B.SVN,benötigtmanbeiGit keine ständigeVerbindungzumRemoteRepository
• GuteDokumentation
6
.gitignore (1)• DateieneinesProjektes,dielokaleBedeutunghabenunddahernichtversioniert werdensollen,könnenineiner.gitignore-Dateigespeichertwerden.SiewerdendannvondenGit-Befehlenignoriert• BeiTortoiseGit (spätergenauer)istdiessehreinfachgestaltet• Hierzuwirdeine.gitignore-DateiimlokalenRepoerstellt
Gitignore fürEclipse undIntelliJ:https://www.gitignore.io/api/eclipse%2Cintellij
7
.gitignore (2)
• Unterwww.gitignore.io könntihreinegitignore-DateifürdieIDEserstellenlassen• IhrkönntbestimmteDateinameneintragenoderaberauchwildcards• Beispiel:*.log->eswerdenalle.logDateienignoriert
• MiteinemEintrag<verzeichnisname>/*werdenalleDateienimVerzeichnisignoriert• verzeichnisname gibtdenNamendesVerzeichnissean
• MitdemZeichen„#“fügtihreinenKommentarhinzu
8
Git Bash
• ErforderlichesToolistdieGit Bash• Downloadunter:https://git-scm.com/downloads• ZurZeitinderVersion2.14.2
9
WichtigsteBefehle
• git init /git clone• git pull(=git fetch +git merge )• git push• git commit• git status• git add• git branch
10
Repositoryanlegen
GrundsätzlichzweiMöglichkeiten:
1. git init:EinneueslokalesRepositorywirdangelegt
2. git clone:EinbestehendesremoteRepositorywirdindaslokaleVerzeichnissystemgeklont
11
git init
• ImSystemverzeichniswirddieBash gestartet• DerBefehl„git init“initialisierteinGrundgerüstfüreinlokalesRepo• Aufwww.github.comeinentferntesRepo anlegen• AnschließendfolgendenBefehlaufrufen:
„git remoteadd origin https://github.com/username/reponame.git“mit• username =eigenerBenutzername• reponame =NamedesentferntenRepositories
• Erstenpushdurchführenmit„git push–uorigin master“
12¹Anleitungnachwww.github.com
git clone
• MitHilfedesBefehls„git clone“erstelltdannjedesweitereTeammitgliedeineArbeitskopieundeinlokalesRepo ausdementfernteRepo aufwww.github.com• „git clone https://github.com/pfad-zum-repo/reponame.git“
mit• reponame =NamedesentferntenRepositories
• Z.B.„git clone https://github.com/projekt/dako.git“
13
WasisteinBranch (1)?
• MiteinemBranch (Zweig)kanndieEntwicklungfortgesetztwerden,ohnedieaktuelleVersionzuverändern• JedesProjekthatinitialeinenMaster-Branch• WährendderEntwicklungwerdenweitereBranches angelegt• VeränderungendesSourcecodes inBranches könnenwiederzurückgeführtwerden.Dasnenntman„Merging“• Beispiel:
14
WasisteinBranch (2)?
• InBranches entwickeltmanalsoProjekterweiterungohnedenaktuellenMaster-Branch zuverändern• Beispielsweise:• SimpleChat wirdimMaster-Branch verwaltet• FürdenAdvancedChat wirdeinneuerBranch angelegt
• SomitwirdderSimpleChat nieberührt,dieTeilaufgabe2wirdimAdvancedChat-Branchentwickelt.• Achtung:Manmussimmerprüfen,aufwelchenBranchmangeradearbeitet!->DiessiehtmanindenKlammern
15
Branching amChat-Beispiel(1)• AufBasisdesSimpleChats wirdeinneuerBrancherstellt• „git checkout –bAdvancedChat“
• ErstelleneinesweiterenBranches aufBasisdesAdvancedChat,wenndieEntwicklungaufgeteiltwird(z.B.Client- undServerentwicklung),z.B.:• „git checkout –bAdvancedChatServer“• „git checkout -bAdvancedChatClient“
• HierarbeiteteinEntwickleramServeraufeinemeigenenBranchundeinweitereraufeinemeigenenBranchfürdenClient• DieBasisdesSimpleChat istsomitzujederZeitlauffähig• WechselninnerhalbderBranches dannmit• „git checkout <branchname>“
16
Branching amChat-Beispiel(2)
17
• AmEndedesProjektistessinnvollzurÜbungdanndieBranchesmiteinanderzumergen (spätermehr)
• UnteranderemauchumdieComboboxderGUIzuerweitern
git pull(=git fetch +git merge )
• Bevormananfängt,weiterzuarbeiten,solltederaktuelleStandausdemRepositorybesorgtwerden,umKonfliktemöglichstzuvermeiden• Mit„git pull“werdendieÄnderungenvomentferntenRepo indenlokalenbranch geladenundgemerged
• Merging istdasZusammenführenvonneuenCodeteilenindenlokalenStand
18
git status
• DieserBefehlzeigtalleÄnderungenimlokalenRepo imGegensatzzumRemoteRepo an
• Mitgit add <dateiname>(odergit add .füralleFiles)werdendiesefürdenCommitvorbereitet
19
git commit
• MitdemKommandogit commit –m„<commit message>“schreibtIhrEureÄnderungenfest• commit message =beliebiger,sinnvollerKommentar,umdenEntwicklungsstandzuerläutern.
• Dannistallesfürden„push“indasentfernteRepo vorbereiten
20
git push
• NachdemCommitwirdderBefehl„git push“ausgeführt,umdieÄnderungenfürdieanderenEntwicklerverfügbarzumachen
• DiesekönnensichdanndieseÄnderungenmit„git pull“aufihrlokalesRepo kopieren
21
AllgemeinerAblauf
22
git branch
• EinBranchisteinweitererSourccode-ZweigimProjekt• WirdeinRepo erzeugtwirdderMaster-Branch erstellt• Mit„git branch <branchname>“wirdeinneuerlokalerBrancherstellt• „git checkout <branchname>“wechseltindenneuenBranch• „git merge <branchname>“verschmelztdieInhaltederBranches• „git branch“listetallelokalenBranches auf• „git branch –a“listetallelokalenundremoteBranches auf• „git checkout –b<branchname>“erstellteinenneuenBranchundwechseltsofortindiesen
23
Branches mergen
• Beispiel:• IhrbefindeteuchimBranch „develop“habthierÄnderungengetätigt.• IhrwolltdieseÄnderungenindenMaster-Branch übernehmen:
• 1.git checkout master //WechselindenMaster-Branch
• 2.git merge develop //ÜberführeÄnderungenvon„develop“inden//Master-Branch
24
Konflikte• Konflikteentstehen,wennindergleichenDateidieselbeZeilegeändertwird• InderRegelerscheintbeimPush-VersuchdannfolgendeNachrichtinderBash
• Mit„git pull“wirddannautomatischgemerged,schlägtdiesfehl,mussvonHandeineKonfliktbereinigungdurchgeführtwerden
25
Merging
• NachdemderBefehl„git pull“ausgeführtwurdewirdderMerge-Modusgestartet.AlsBranchname wirddann„MERGING|master“ausgegeben• DiesenModuskannmanmit
„git merge -- abort“verlassen
• EsgibtvieleverschiedeneMerge ToolsdiesekannmanmitdemBefehl• „git mergetool -- tool-help“ausgebenlassen
26
Merging Tools
27
Tortoisemerge
28
• „git mergetool -- tool=tortoisemerge“
• BeidiesemToolwerdendieentfernteunddielokaleVersionangezeigt• UntenfindetIhrdie„gemergte“Version
Ergebnis(beiTortoise)
• Diegemergte DateiwirdmitdemgleichenNamenneuerstellt• DieinKonfliktstehendeDateiwirdmit<Dateiname>.orig imRepogespeichert• Mit„git status“kannmansichdannwiederdieDateienansehen
• SchließlichwirddanndiegemergteDateicommitted undindasRepo gepusht
29
NützlicheLinks
• http://ohshitgit.com/• https://git-scm.com/• https://www.gitignore.io/• http://rogerdudler.github.io/git-guide/• https://www.git-tower.com/blog/git-cheat-sheet/
30
VielenDankfüreureAufmerksamkeit
31
NochFragen?
Online:• https://entwickler.de/online/development/git-subversion-svn-versionskontrollsystem-579792227.html• https://www.git-tower.com/learn/git/ebook/en/command-line/advanced-topics/merge-conflicts• https://de.slideshare.net/RandalSchwartz/introduction-to-git-11451326/5-Why_git_Essential_to_Linux
Offline:• DailyGit:WieeinkompetenterKollegeIhnenGit erklärenwürde,MartinDilger(verfügbarinderBibliothekderHMunter00/ST 230 D576)
32