Archiv des Autors: Juergen Schulze

Git und GitHub für Windows mit Sourcetree, Teil 1: Grundlagen

Ich möchte hier eine Schnell-Anleitung (eventuell mit Fortsetzung) zur Nutzung von Git (und GitHub) allein mit Windows-Tools aufzeigen, wobei bewusst auf Linux-Mitteln wie z.B. die Konsole, wo möglich und zweckdienlich, verzichtet wird.

Die Software

Wir benötigen: Sourcetree

Sourcetree ist ein Git-Client, der eine grafische Benutzeroberfläche bereitstellt. Mit Sourcetree können Benutzer Repositories erstellen, klonen, committen und pushen sowie alle Änderungen protokollieren und vergleichen. (Git-)Repositories sind Speicherorte, in denen Git-Projekte verwaltet werden, einschließlich aller Dateiversionen und des Projektverlaufs.

Die Installation gestaltet sich einfach. Einen Bitbucket-Account benötigen wir nicht, daher drücken wir „Skip“.

SourceTree Installation

Im nächsten Schritt deaktivieren wir „Mercurial“, das ebenfalls nicht benötigt wird. Aber ich würde empfehlen, den Haken bei „Configure automatic line handling …“ zu setzen. Das ist praktischer, falls wir irgendwann einmal zwischen dem Windows- und Linux-Universum Dateien austauschen möchten. Ansonsten würden sich bei jedem Auschecken von Code die Zeilenumbrüche verdoppeln, das liegt an der Art und Weise, wie Windows Zeilenumbrüche speichert und würde jetzt en détail zu weit führen.

SourceTree Installation

In den Preferences geben Sie zum Schluss noch ihre Daten ein.

SourceTree Installation

Die Startseite der Software sollte sich uns folgendermaßen präsentieren:

SourceTree
Sourcetree

Um nun weiterzukommen, müssen wir unbedingt verstehen, was es mit SSH-Schlüsseln auf sich hat, daher an dieser Stelle ein kleiner Exkurs über das Thema. Kenner können darüber hinweglesen.

Exkurs: SSH und SSH-Schlüsselpaare

SSH steht für „Secure Shell“ und ist ein Verschlüsselungsprotokoll, das für die Kommunikation zwischen zwei Computern verwendet wird.

Zur Anwendung kommen dabei SSH-Schlüsselpaare, die jeder Nutzer zunächst individuell erzeugen muss. Dieses Schlüsselpaar ist weltweit einzigartig. Ein Schlüsselpaar besteht immer aus einem privaten und einem öffentlichen Schlüssel. Nur der öffentliche und der private Schlüssel desselben Schlüsselpaares passen zusammen. Besitzt man nur einen von beiden Schlüssel, kann man nichts damit anfangen, man benötigt immer beide.

Der öffentliche SSH-Schlüssel ist für alle zugänglich (so verrät es ja der Name) und sollte allen Parteien, mit denen man kommunizieren möchte, zur Verfügung gestellt werden, indem man ihn zum Beispiel auf der eigenen Website veröffentlicht.

Der private Schlüssel hingegen – auch das verrät schon der Name – darf unter keinen Umständen in fremde Hände geraten, denn sonst wäre das gesamte Schlüsselpaar kompromittiert.

Möchte man also mit einem Server kommunizieren, muss man dafür sorgen, dass der Server den öffentlichen Schlüssel erhält (wie das funktioniert, erkläre ich gleich). Man selbst identifiziert sich dann mit dem auf dem eigenen Rechner verbliebenen privaten Schlüssel. Wenn man alles richtig eingestellt hat, erfolgt die weitere Arbeit bzw. Kommunikation von da an reibungslos und automatisch.

Wir erzeugen ein Schlüsselpaar

Ich empfehle, auch wenn man dafür mit der Kommandozeile arbeiten muss, das Schlüsselpaar mit Windows-Bordmitteln zu erzeugen, da es mit Sourcetree meinem Erachten nach zu kompliziert ist.

Wir öffnen die Kommandozeile auf Windows und geben folgende Befehle ein:

cd %USERPROFILE%
mkdir .ssh
cd .ssh
ssh-keygen

Kurze Erklärung: Wir legen in unserem Benutzer-Verzeichnis den Ordner „.ssh“ an. Bitte den Punkt nicht vergessen! Wir wechseln in das Verzeichnis und legen ein Schlüsselpaar an.

Als Ergebnis erhalten wir zwei Dateien:

  • id_rsa – das ist der private Schlüssel
  • id_rsa.pub – das ist der öffentliche Schlüssel

Wer möchte, kann den privaten Schlüssel mit einem Passwort absichern (siehe roter Pfeil). Dies verschafft zusätzliche Sicherheit, falls der private Schlüssel doch einmal in die falschen Hände geraten sollte. Allerdings hat das auch den Nachteil, dass fortan bei jeder verschlüsselten Kommunikation nach dem Passwort gefragt wird, was den Arbeitsfluss unterbrechen kann. Das zusätzliche Passwort ist keine Pflicht, jeder muss für sich selbst darüber entscheiden.

Der öffentliche Schlüssel erhält die Endung „.pub“, der private gar keine.

WICHTIG: Denken Sie daran, für beide Schlüssel Backups anzulegen. Denn sollten Sie einen von beiden verlieren, müssen Sie wieder ein neues Paar anlegen.

Was ist denn jetzt GitHub und was haben wir damit zu tun?

GitHub ist eine Webplattform, die auf das Git-basierte Versionskontrollsystem spezialisiert ist. Mit GitHub können Entwickler, Teams und Organisationen ihre Softwareprojekte hosten, verwalten und mit anderen teilen. Die Funktionen von GitHub erleichtern die Zusammenarbeit zwischen Entwicklern und die Fehlerbehebung und Verbesserung von Softwareprojekten. GitHub bietet Entwicklern und Teams eine Plattform zur Verwaltung von Code, zur Zusammenarbeit und zur Integration in Workflow-Tools.

Damit wir jetzt mit GitHub kommunizieren können, müssen wir dort unseren öffentlichen Schlüssel hinterlassen. Dazu können Sie entweder selbst ein Konto bei GitHub anlegen oder Sie nutzen ein bereits bestehendes Konto, z.B. ein Konto ihres Unternehmens. Im letzten Fall müssen Sie ihren öffentlichen Schlüssel an den Administrator des Kontos schicken, damit dieser die folgenden Schritte erledigt.

GitHub bekommt unseren öffentlichen Schlüssel

Um einen öffentlichen SSH-Schlüssel Ihrem GitHub-Konto hinzuzufügen, können Sie die folgenden Schritte ausführen:

Kopieren Sie den Inhalt der öffentlichen Schlüsseldatei (hier: .ssh/id_rsa.pub) komplett in die Zwischenablage. Das können Sie wie gewohnt mit der Maus erledigen: Markieren und mit STRG+C kopieren.

type id_rsa.pub

Gehen Sie zu Ihrem GitHub-Konto und klicken Sie auf das Dropdown-Menü in der oberen rechten Ecke. Wählen Sie „Settings“ aus.

Klicken Sie im linken Menü auf „SSH and GPG Keys“.

Klicken Sie dann auf „new SSH key“

Geben Sie einen Titel für den Schlüssel ein (z.B. „RSA Schüssel von Martin Mustermann für Maschine 1“). Behalten Sie die Auswahl „Authentication key“ bei. Fügen Sie den Inhalt des öffentlichen Schlüssels in das Feld „Key“ ein. Klicken Sie auf „Add SSH key“.

Danach sollten Sie folgenden Bildschirm erhalten:

Mehr Informationen zum Thema SSH und GitHub

Der private Schlüssel für Sourcetree

Damit nun die verschlüsselte Kommunikation mit GitHub und Sourcetree erfolgen kann, müssen Sie in Sourcetree ihren privaten Schlüssel hinterlegen.

In Tools->Options->General nehmen Sie unter „SSH Client Configuration“ folgende Anpassungen vor:

Und natürlich geben Sie in „SSH Key“ ihren privaten Schüssel an, nicht den öffentlichen.

Das sollte es dann schon gewesen sein.

GitHub – der erste Kontakt

Wenn wir jetzt zum ersten Mal mit GitHub arbeiten möchten, gibt es zwei initiale Möglichkeiten, die den allergrößten Teil der Varianten abdecken. a) Entweder es existiert schon ein Repository auf GitHub, weil z.B. schon andere Kollegen damit arbeiten oder b) Sie legen selbst ein Repository dafür an, weil Sie selbst der Verantwortliche sind.

a) Das Repository existiert bereits.

Sollten Sie neu zu einem Projekt dazustoßen, so müssen Sie zunächst dafür sorgen, dass sie das entfernte Repository von GitHub (man sagt auch „remote Repository“) auf ihren lokalen Rechner kopieren. (Kleine Anmerkung: Sie können das auch auf mehrere ihrer Entwicklungs- und/oder Testrechner parallel machen, Git und GitHub koordinieren das automatisch.)

In der Sprache von Git heißt dieses Kopieren „Klonen“.

Der Verantwortliche für das Repository sollte Ihnen eine spezielle URL mitteilen, die in unserem Falle folgendermaßen aussieht:

git@github.com:martin-mustermann-firmenname/sourcetree-tutorial.git

Wenn Sie die URL nun in das Feld für „Source Path/URL“ eintragen, sollte Sourcetree keine Beanstandungen melden. Das lokale Verzeichnis auf ihrem Rechner wird automatisch vorgeschlagen, Sie können hier auch ein anderes wählen. (In diesem Beispiele sieht die URL etwas anders auf. Aber grundsätzlich ist der Aufbau identisch.)

Nach dem Klonen sollte ihr Bildschirm noch recht „jungfräulich“ aussehen.

Wie wir die ersten Dateien lokal verändern und zu GitHub hochladen, werden wir im nächsten Artikel besprechen. Kommen wir nun zu dem Fall, dass Sie das lokale Repository selbst anlegen.

b) Wir legen das Repository selbst an

Dazu wechseln wir zur Website von GitHub und wählen uns dort mit unseren Konto-Daten ein. In dem Menü rechts oben legen wir mit „New repository“ ein neues remote Repository an.

Den Namen des Projekts dürfen Sie frei wählen, sofern nicht schon ein gleichnamiges in ihrem Konto existiert.

Ich würde bei Projekten in Unternehmen auf jeden Fall die Option „Private“ aktivieren, weil sonst der Code jedem Nutzer weltweit zum Download bereitgestellt wird. Dieser Umstand rührt daher, dass GitHub ursprünglich eine Website zum gemeinschaftlichen Erstellen von Software-Projekten im Open-Source-Bereich war.

Damit wir wenigstens schon eine Datei im Repository haben, lassen wir die Datei „README.md“ automatisch anlegen. Diese können wir dann nachträglich noch anpassen.

Die README.md Datei ist eine zentrale Komponente eines jeden GitHub Repositories. Sie ist ein Markdown-Dokument, das im Hauptverzeichnis platziert wird, und dient dazu, eine Beschreibung des Projekts zu geben. Ferner kann sie als Einstiegspunkt in das Projekt dienen, indem sie den Benutzern Informationen zum Einrichten, Ausführen und Testen des Codes gibt. Die README.md Datei kann auch genutzt werden, um Links zu wichtigen Ressourcen wie Dokumentation, Demo-Videos, Support-Websites und anderen Projekt-Tools bereitzustellen.

Auf der Startseite des Projekts wird dann automatisch der Inhalt der README.md-Dateien angezeigt.

Unter dem grün hinterlegten Knopf „Code“ können wir jetzt die URL aufrufen, wie wir sie aus dem Kapitel „c) Das Repository existiert bereits“ schon kennen. Bitte verfahren Sie damit analog, um das neue Repository auf ihren lokalen Rechner zu klonen.

Zusammenfassung: Wir haben jetzt gelernt, wie wir für Git und GitHub eine einfache Software (Sourcetree) installieren, die zur verschlüsselten Kommunikation wichtigen SSH-Schlüssel nutzten und wie wir ein erstes Repository anlegen und mit GitHub verknüpfen.

Vorschau: In den nächsten Beiträgen wird es darum gehen, Dateien im Repository zu ändern, sie in der History mit Kommentaren abzulegen und für unsere Kollegen auf GitHub zur Verfügung zu stellen, und das möglichst konfliktfrei und automatisch.

Bash Script Vorlage mit Parameter-Verarbeitung

Wer Skripte für die Bash auf Linux selbst erstellt, wird früher oder später den Wunsch verspüren, Parameter und Argumente verarbeiten zu können, um die Skripte flexibler zu gestalten.

Ich nutze dazu diese Vorlage:

#!/bin/bash
# /usr/local/bin/.../...
# Handy one-liner that explains what the program does.

function usage()
{
   cat << HEREDOC
   
   Handy one-liner that explains what the program does.
   
   Usage: $progname [--parameter1 NUM] [--parameter2 STR] [--parameter3 TIME_STR] [--verbose] [--dry-run]
          argument1 [argument2] [argument3] [ ... ]
   
   Example: $progname -d=5 /tmp/folder1/ /tmp/folder2/
            explain the example in detail

   optional parameter:
     -p, --parameter1 NUM        explain this parameter
     -q, --parameter2 STR        explain this parameter
     -r, --parameter3 TIME_STR   explain this parameter
     -h, --help                  show this help message and exit
     -v, --verbose               increase verbosity
     --dry-run                   dry run, dont change any files, folders or values

HEREDOC
}  

# parse the arguments before getopts, otherwise they will be lost
for i in "$@"; do
	if [[ $i = "-"* ]]; then
		:
	else                
		arguments+=("$i") # append the arguments to array
	fi
done

# initialize default parameter
progname=$(basename $0)
verbose=0
dryrun=0
parameter1=10
parameter2="Hello World!"
parameter3="2023-01-22 17:40:33"

# use getopt and store the output into $OPTS
# note the use of -o for the short options, --long for the long name options
# and a ":" for any option that takes a parameter
OPTS=$(getopt -o "p:q:r:hv" --long "parameter1:,parameter2:,parameter3:,help,verbose,dry-run" -n "$progname" -- "$@")
if [ $? != 0 ] ; then echo "Error in command line arguments. See '$progname -h/--help'." >&2 ; exit 1 ; fi
eval set -- "$OPTS"

while true; do
  # echo "\$1:\"$1\" \$2:\"$2\""
  case "$1" in
    -h | --help ) usage; exit; ;;
    -p | --parameter1 ) parameter1="$2"; shift 2 ;;
    -q | --parameter2 ) parameter2="$2"; shift 2 ;;
    -r | --parameter3 ) parameter3="$2"; shift 2 ;;
    --dry-run ) dryrun=1; shift ;;
    -v | --verbose ) verbose=$((verbose + 1)); shift ;;
    -- ) shift; break ;;
    * ) break ;;
  esac
done

if (( $verbose > 0 )); then

   # print out all the parameters we read in
   cat <<EOM
   p/parameter1=$parameter1
   q/parameter2=$parameter2
   r/parameter3=$parameter3
   verbose=$verbose
   dryrun=$dryrun
   arguments=${arguments[@]}
EOM
fi

# Now starts the magic

Wie nutzt man mehrere GitHub-Accounts auf einem Rechner?

Wenn Sie mehrere GitHub-Accounts haben und auf demselben Rechner arbeiten möchten, können Sie Ihre Git-Konfiguration anpassen, um sicherzustellen, dass die richtigen Anmeldeinformationen für die jeweiligen Repositories verwendet werden.

1. Legen Sie für jeden GitHub-Account, den Sie verwenden möchten, ein neues SSH-Schlüsselpaar an.

Zunächst prüfen wir, ob schon ein SSH-Schlüssel auf ihrem Rechner existiert:

ls -al ~/.ssh

Sollte kein Schlüssel angelegt sein, müssen wir eben einen erzeugen:

ssh-keygen -t rsa -b 4096 -C "Ihr Kommentar"

Es ist nicht unbedingt nötig, das Schlüsselpaar mit einem Passwort zu sichern – vorausgesetzt, Sie sind sich sicher, dass keine unbefugte Person Zugriff auf Ihr Home-Verzeichnis hat. Ich gehe folgendermaßen vor:

mkdir ~/.ssh
cd ~/.ssh
ssh-keygen -t rsa -b 4096 -C "Schlüssel 1 auf masch1"
ls -la

Das Schlüsselpaar nenne ich beispielhaft „id_rsa_01“

Im Verzeichnis befinden sich dann zwei zusammengehörende Dateien: „id_rsa_01“ und „id_rsa_01.pub“. Erstere beinhaltet den privaten und Letztere den öffentlichen Schlüssel.

Generierung eines RSA-Schlüsselpaares
ssh-keygen -t rsa -b 4096 -C "Schlüssel 1 auf masch1"
Generierung eines RSA-Schlüsselpaares

Man sollte sich den Inhalt beider Dateien einmal anschauen, um den Aufbau zu kennen.

cat id_rsa_01
cat id_rsa_01.pub
Der private RSA-Schlüssel
Der private RSA-Schlüssel
Der öffentliche RSA-Schlüssel
Der öffentliche RSA-Schlüssel

WICHTIG: Sie dürfen den privaten Schlüssel „id_rsa_01“ niemals an Dritte geben, schon gar nicht ohne eine Passwortsicherung. Ich werde nach dem Schreiben dieses Artikels das Schlüsselpaar löschen und ein neues anlegen, damit niemand es aus der Grafik kopieren kann.

2. Fügen Sie jeden öffentlichen SSH-Schlüssel Ihrem GitHub-Konto hinzu.

Um einen öffentlichen SSH-Schlüssel zu Ihrem GitHub-Konto hinzuzufügen, können Sie die folgenden Schritte ausführen:

Kopieren Sie den Inhalt der öffentlichen Schlüsseldatei (hier: ~/.ssh/id_rsa_01.pub) komplett in die Zwischenablage.

cat ~/.ssh/id_rsa_01.pub

Gehen Sie zu Ihrem GitHub-Konto und klicken Sie auf das Dropdown-Menü in der oberen rechten Ecke. Wählen Sie „Settings“ aus.

Klicken Sie im linken Menü auf „SSH and GPG Keys“.

Klicken Sie dann auf „new SSH key“

Geben Sie einen Titel für den Schlüssel ein (z.B. „RSA 1 Key für Maschine 1“). Behalten Sie die Auswahl „Authentication key“ bei. Fügen Sie den Inhalt des öffentlichen Schlüssels in das Feld „Key“ ein. Klicken Sie auf „Add SSH key“.

Danach sollten Sie folgenden Bildschirm erhalten:

Mehr Informationen zum Thema SSH und GitHub

Da wir mindestens zwei Schlüsselpaare für diese Aufgabe benötigen, legen Sie bitte gemäß Schritt 1 und 2 ein neues, zweites Paar an und nennen es „id_rsa_02“.

Anschließen öffnen Sie ihren zweiten GitHub-Account und fügen diesem den zweiten, privaten Schlüssel hinzu.

3. Konfigurieren Sie Git so, dass es den richtigen Schlüssel für jedes Repository verwendet.

Nun legen wir die Datei „~/.ssh/config“ an (wenn sie noch nicht existieren sollte) und bearbeiten sie.

nano ~/.ssh/config

Hier ein Beispiel

# Private github account: 1manfactory
Host github-private
   HostName github.com
   IdentityFile ~/.ssh/id_rsa_01
   IdentitiesOnly yes

# Company github account: Umbrella Corporation
Host github-umbrella
   HostName github.com
   IdentityFile ~/.ssh/id_rsa_02
   IdentitiesOnly yes

Falls Sie ihre Schlüsselpaare mit einem Passwort gesichert haben, sollten Sie beide Schlüssel dem SSH-Agenten hinzufügen. Somit werden Sie in dieser Session nur einmal nach dem Passwort gefragt, wenn Sie mit GitHub kommunizieren.

eval $(ssh-agent) # Sonderbefehl zum Start des SSH-Agenten
ssh-add ~/.ssh/id_rsa_01
ssh-add ~/.ssh/id_rsa_02
SSH-Agent: Schlüssel hinzufügen
SSH-Agent: Schlüssel hinzufügen

Damit es nicht zu einer Fehlermeldung kommt, müssen wir jetzt auch den öffentlichen Schlüssel von GitHub herunterladen. Der Befehl „ssh-keyscan“ sammelt öffentliche Schlüssel und speichert sie in der Datei „~/.ssh/known_hosts“, so dass Sie bei zukünftigen SSH-Verbindungen nicht mehr danach gefragt werden.

ssh-keyscan github.com >> ~/.ssh/known_hosts

Jetzt testen wir beide Verbindungen.

ssh -T git@github-private
ssh -T git@github-umbrella

4. Der Beweis: Wir klonen ein Repository und pushen eine Änderung

Wenn alles geklappt hat, sollte es inzwischen kein Problem mehr sein, ein Repository zu klonen.

eval $(ssh-agent) # den SSH-Agenten starten
cd ~
git clone git@github-private:1manfactory/demoprojekt.git # ein simples Demo
cd demoprojekt
dir
cat README.md
Ein Repository aus GitHub klonen per SSH-Schlüssel
Ein Repository aus GitHub klonen per SSH-Schlüssel

Bei Bedarf kann/sollte man noch die E-Mail-Adresse und den Namen für dieses lokale Repository anpassen:

git config user.email "name@domain.org"
git config user.name "Martin Mustermann"

Eine Datei können wir jetzt wie gewohnt ins Repository übernehmen (=commit) und zu GitHub übertragen (=push).

nano README.md # ein bisschen was ändern
git add .
git commit -m "zweites commit von lokal"
git push # und hochladen nach GitHub

Nginx & Ubuntu (+PHP-FPM)

NGINX ist ein sehr populärer Web-Server. Dafür gibt es einige Gründe:

  1. Leistung: NGINX ist bekannt für seine hohe Leistung und Skalierbarkeit, insbesondere im Vergleich zu anderen Web-Servern wie Apache.
  2. Stabilität: NGINX ist sehr stabil und robust, was bedeutet, dass es weniger anfällig für Ausfälle und Störungen ist.
  3. Anpassbarkeit: NGINX bietet eine Vielzahl von Modulen und Erweiterungen, die es Anwendern ermöglichen, den Server an ihre spezifischen Bedürfnisse anzupassen.
  4. Sicherheit: NGINX bietet eine Reihe von Sicherheitsfunktionen, wie z.B. SSL/TLS-Verschlüsselung, um die Übertragung sensibler Daten zu schützen.
  5. Ressourceneffizienz: NGINX ist ressourceneffizient und verwendet weniger Speicher und CPU-Ressourcen als andere Web-Server.

Ich mag Nginx auch, da es längst nicht so schwer zu konfigurieren ist wie Apache bzw. Apach2.

Nginx installieren

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install nginx
sudo systemctl status nginx # läuft der Server?

Bei Erfolg sollte man folgende (oder ähnlich) Ausgabe sehen:

Man kann überprüfen, ob die Nginx-Landingpage auf http://localhost:80 in einem Webbrowser angezeigt wird.

PHP-FPM installieren

NGINX und PHP-FPM werden oft zusammen verwendet, weil sie eine leistungsstarke und skalierbare Lösung für die Ausführung von PHP-basierten Web-Anwendungen bieten.

sudo apt-get install php8.1-fpm
sudo systemctl status php8.1-fpm # läuft der PHP-Service?
sudo nano /etc/nginx/sites-available/default

Folgendes muss angepasst werden:

  • index.php zur Indexliste hinzufügen (Zeile 8)
  • Entkommentieren der Zeilen 17, 18, 21, 24, 28, 29 und 30

Die Datei sollte dann so aussehen (sofern wir noch von einer unveränderten Grund-Installation ausgehen.):

server {
  # Example PHP Nginx FPM config file
  listen 80 default_server;
  listen [::]:80 default_server;
  root /var/www/html;

  # Add index.php to setup Nginx, PHP & PHP-FPM config
  index index.php index.html index.htm index.nginx-debian.html;

  server_name _;

  location / {
    try_files $uri $uri/ =404;
  }

  # pass PHP scripts on Nginx to FastCGI (PHP-FPM) server
  location ~ \.php$ {
    include snippets/fastcgi-php.conf;

    # Nginx php-fpm sock config:
    fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    # Nginx php-cgi config :
    # Nginx PHP fastcgi_pass 127.0.0.1:9000;
  }

  # deny access to Apache .htaccess on Nginx with PHP, 
  # if Apache and Nginx document roots concur
  location ~ /\.ht {
    deny all;
  }
} # End of PHP FPM Nginx config example
sudo nginx -t # um die Änderungen an der Konfiguration zu testen
sudo systemctl restart nginx # Neustart des Servers

PHPINFO() aufrufen

sudo echo "<?php phpinfo(); ?>" >> /var/www/html/info.php

Unter http://<hostname>/info.php erreichen wir dann die bekannte Übersicht mit allen wichtigen Angaben.

Weitere nützliche Informationen zum Finetuning findet man unter https://techexpert.tips/nginx/nginx-php-installation-ubuntu-linux/, https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-20-04

SHIFT+CTRL+V für Einfügen ohne Formatierungen in Office 365

Ich weiß nicht was MS dazu gebracht hat, das Einfügen von kopierten Werten ohne Formatierung über das Tastaturkürzel Shift+Ctrl+V aus dem alten Office zu entfernen. Stattdessen öffnet sich je nach Lust und Laune der Software mal ein Kontext-Menü, das kein Mensch auf Anhieb versteht.

Aber mithilfe eines Makros kann man dem begegnen:

Wir öffnen mit Alt+F11 den VBA-Editor.

Dort fügen wir folgenden Code ein:

Sub PasteValues()
    On Error Resume Next
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    ActiveSheet.PasteSpecial Format:="Text", Link:=False, DisplayAsIcon:=False
End Sub

So sollte das Ergebnis aussehen:

Excel CTRL+SHIFT+V without Formatting

Dann müssen wir diesen Code mit dem Tastaturkürzel Shift+Ctrl+V verbinden. Dazu öffnen wir mit Alt+F8 folgende Übersicht:

Excel CTRL+SHIFT+V without Formatting

Wir klicken auf “Options” bzw. “Optionen”.

Und jetzt aufgepasst, in das mit dem Pfeil gekennzeichnete Feld schreiben wir ein großes V (also Shift+F)

Excel CTRL+SHIFT+V without Formatting

Dann sollte man Folgendes sehen:

Excel CTRL+SHIFT+V without Formatting

Jetzt alles wieder mit “OK” schließen und das Tastaturkürzel Shift+Ctrl+V fügt nur noch die nackten Werte, ohne lästige Formatierungen ein.