Web-basierte Anwendungen 1

19. Oktober 2017

Studiengang Medieninformatik an der Technischen Hochschule Köln
Campus Gummersbach

Sascha Lemke B.Sc.

Basierend auf den Folien von Jan Kus M.Sc.

Ziele dieses Abschnitts

  • Einführung in Git
  • Zu wissen was ein Versionierungssystem ist
  • Den Unterschied zwischen Git und Github verstehen
  • Zu verstehen wie ein Git Workflow funktioniert
  • Was Commit Messages sind
  • Was ist ein Versionierungssystem
  • Entstehung von Git
  • Unterschied zwischen Git & Github
  • Worschatz beim Umgang mit Versionierungssystemen
  • Praktische Übung
  • Der einfachste Git Workflow
  • Git Grundlagen & Basisbefehle

Frage an das Publikum

Wer weiss was ein Versionierungssystem ist?

Git Command

Frage an das Publikum

Wer kennt Git?

Git Command

Frage an das Publikum

Wer kennt github?

Github Artefact

Frage an das Publikum

Wer kennt andere Versionierungssysteme?

Github Artefact

Was ist Versionierung und ein Versionierungssystem?

[...] is the management of changes to documents, computer programs, large web sites, and other collections of information. Changes are usually identified by a number or letter code, termed the "revision number," "revision level," or simply "revision."

Ein Beispiel für Versionierung ist z.B.: Time Machine auf dem Mac oder z.B. Reinigungsprotokolle auf Toiletten die im nachhinein archiviert werden

Quelle: https://en.wikipedia.org/wiki/Version_control, Stand: 18.10.2017

Versionierungssystem (VCS)

A version control system is a piece of software that helps the developers on a software team work together and also archives a complete history of their work.
  1. We want people to be able to work simultaneously, not serially
  2. When people are working at the same time, we want their changes to not conflict with each other
  3. We want to archive every version of everything that has ever existed — ever. And who did it. And when. And why.

Quelle: Version Control by Example, Eric Sink, Stand: 18.10.2017

  • Git wurde 2005 von Linus Torvalds initieert nachdem Bitkeeper (bis dahin das genutzte SCM von der Linux Community) kommerzialisiert wurde und keine kostenlosen Zugang mehr angeboten hat
  • Linus Torvalds wollte ein dezentrales und performantes Versionierungs Software - seiner Ansicht nach gab es zu dem Zeitpunkt keine die seine Wünsche erfüllte
    • Dezentralität: Jeder Entwickler besitzt die Historie des ganzen Source Codes bei sich und verteilt nur seine Änderungen an andere Entwickler. Es gibt kein zentralen Server mehr der für den Ableich der einzelnen Entwicklungstände sorgt
    • Performance: 2005 brauchten Versionierungssysteme ca. 30 Sekunden um einen Patch zu versionieren und damit alle Metadaten zu aktualisieren. Bei dem Linux Core Team hätte es 250 solcher Aktionen zum gleichen Zeitpunkt gegeben - somit skalierten die ehmals auf dem Markt verfügbaren Versionierungssysteme nicht
Git ist ein verteiltes Versions-Kontrollsystem mit dem Hauptaugenmerkmal auf Geschwindigkeit, Daten Integrität und der Unterstützung von verteilten und nicht-linearen Versionierungsvorgängen.

Git

Charakteristiken von Git:
  • Speed
  • Strong support for non-linear development (thousands of parallel branches)
  • Fully distributed development
  • Able to handle large projects like the Linux kernel efficiently (speed and data size)
  • Compatibility with existing systems/protocols

Quelle: Pro Git, Scott Chacon & Ben Straub, Second Edition, 2015

Eine weitere wichtige Eigenschaft ist, dass Git, als ein dezentrales Versionierungssystem direkt sowohl einen Client als auch einen Server bereitstellt. Somit kann der Code zwischen den einzelnen Team-Mitgliedern weitergegeben werden ohne ihn auf eine zentrale Instanz zu besitzen. Jedoch können Git-Server Implementierungen nützlich sein um z.B.: erweiterte Zugriffskontrollen, Anzeige von Inhalt und das Verwalten von mehreren Repositories anzubieten.
  • Remote file store and shell access
  • Git daemon, instaweb
  • GitLab
  • Bitbucket
  • GitHub
  • Weitere komerzielle Anbieter

Was ist Github?

GitHub is a website where you can upload a copy of your Git repository. It is a Git repository hosting web service, which offers all of the distributed revision control functionality of Git as well as adding its own features. Unlike Git, which is strictly a command-line tool, GitHub provides a web-based graphical interface and desktop as well as mobile integration. It also provides access control and several collaboration features such as wikis, task management, and bug tracking and feature that can be helpful for projects.
GitHub ist NICHT Git - GitHub benutzt Git
  • Git: Git is ein dezentrales System zur Versionskontrolle
  • Github: Github ist eine Webseite die Gitfunktionalitäten zugänglich macht und erweitert

Bitte merken!

  • Command Line: The computer program we use to input Git commands. On a Mac, it’s called Terminal. In both cases, you type text-based commands, known as prompts, into the screen, instead of using a mouse.
  • Repository: A directory or storage space where your projects can live. It can be local to a folder on your computer, or it can be a storage space on GitHub or another online host. You can keep code files, text files, image files, you name it, inside a repository.
  • Commit: This is the command that gives Git its power. When you commit, you are taking a “snapshot” of your repository at that point in time, giving you a checkpoint to which you can reevaluate or restore your project to any previous state.

Quelle: GitHub For Beginners: Don't Get Scared, Get Started, 18.10.2017

https://th-koeln.sciebo.de/index.php/s/QsZDomtF9OnjwsT
  1. Setup git
  2. Clone Repository
  3. Make Changes
  4. Commit Changes

Github Repository

Wie erstelle ich ein Repository auf Github?

Bitte https://github.com/new besuchen und wir gehen diese Schritte gemeinsam durch.

Gitub

  • git init oder git clone: Initieeren eines lokalen git-Repository oder das kopieren eines Remote-Repository in ein lokales Verzeichnis (z.B.: ein Github Repository)

[Änderungen am Code vornehmen]

  • git add: das Bekanntmachen der Veränderungen oder neuen Dateien an git. Ein so genanntes Snapshot. Es ist noch nicht fester Bestandteil der Repository.
  • git commit: Hinzufügen der Snapshots in die Repository.
  • git push : Eine Kopie der Repository an das Remote-Repository laden. Nur im Falle das ein existiert (wie z.B.: Github)
  • git config: Short for “configure,” this is most useful when you’re setting up Git for the first time.
  • git help: Forgot a command? Type this into the command line to bring up the 21 most common git commands. You can also be more specific and type “git help init” or another term to figure out how to use and configure a specific git command.
  • git status: Check the status of your repository. See which files are inside it, which changes still need to be committed, and which branch of the repository you’re currently working on.

Git Basisbefehle (2/4)

  • git init: Initializes a new Git repository. Until you run this command inside a repository or directory, it’s just a regular folder. Only after you input this does it accept further Git commands.
  • git clone: Importing a Git repository using the command line

Git Basisbefehle (3/4)

  • git add: This does not add new files to your repository. Instead, it brings new files to Git’s attention. After you add files, they’re included in Git’s “snapshots” of the repository.
  • git commit: Git’s most important command. After you make any sort of change, you input this in order to take a “snapshot” of the repository. Usually it goes git commit -m "Message here."" The -m indicates that the following section of the command should be read as a message.
  • git push: If you’re working on your local computer, and want your commits to be visible online on GitHub as well, you “push” the changes up to GitHub with this command.
  • git pull: If you’re working on your local computer and want the most up-to-date version of your repository to work with, you “pull” the changes down from GitHub with this command.

Git Basisbefehle (3/4)

  • git branch: Working with multiple collaborators and want to make changes on your own? This command will let you build a new branch, or timeline of commits, of changes and file additions that are completely your own. Your title goes after the command. If you wanted a new branch called "cats" you’d type git branch cats
  • git merge: When you’re done working on a branch, you can merge your changes back to the master branch, which is visible to all collaborators. git merge cats would take all the changes you made to the "cats" branch and add them to the master.
  • git checkout: Literally allows you to "check out" a repository that you are not currently inside. This is a navigational command that lets you move to the repository you want to check. You can use this command as git checkout master to look at the master branch, or git checkout cats to look at another branch.

One More Thing: Git Commit Messages

Wenn man im verteilten Team arbeitet, dann ist es sehr wichtig mit aussagekräftigen Commit Messages zu arbeiten. Ein unlesbares Beispiel:

$ git log --oneline -5 --author cbeams"
e5f4b49 Re-adding ConfigurationPostProcessorTests after its brief removal in r814. @Ignore-ing the testCglibClassesAreLoadedJustInTimeForEnhancement() method as it turns out this was one of the culprits in the recent build breakage. The classloader hacking causes subtle downstream effects, breaking unrelated tests. The test method is still useful, but should only be run on a manual basis to ensure CGLIB is not prematurely classloaded, and should not be run as part of the automated build.
22b25e0 Consolidated Util and MutableAnnotationUtils classes into existing AsmUtils

Git Commit und Messages

Wenn man im verteilten Team arbeitet, dann ist es sehr wichtig mit aussagekräftigen Commit Messages zu arbeiten. Ein lesbares Beispiel:

$ git log --oneline -5 --author pwebb
5ba3db6 Fix failing CompositePropertySourceTests
84564a0 Rework @PropertySource early parsing logic
e142fd1 Add tests for ImportSelector meta-data
887815f Update docbook dependency and generate epub
ac8326d Polish mockito usage

Literatur