From 29fe898723dcda3a6eb96c3065f76feff66513c1 Mon Sep 17 00:00:00 2001 From: megamichi Date: Mon, 7 Apr 2025 14:03:17 +0200 Subject: [PATCH] ADDING OLD TIPPS --- README.md | 10 +- tipps_und_tricks/git/git.md | 80 ++++++++++++ tipps_und_tricks/git/michi_git.md | 188 +++++++++++++++++++++++++++++ tipps_und_tricks/python/oneline.md | 103 ++++++++++++++++ 4 files changed, 380 insertions(+), 1 deletion(-) create mode 100644 tipps_und_tricks/git/git.md create mode 100644 tipps_und_tricks/git/michi_git.md create mode 100644 tipps_und_tricks/python/oneline.md diff --git a/README.md b/README.md index 5800a3e..687719f 100644 --- a/README.md +++ b/README.md @@ -4,4 +4,12 @@ Mal gucken, hoffentlich wird das hier das neue Gulmwiki. Wiki-Admin: [[The Wobbler]] -Blubb (test) \ No newline at end of file + +## Tipps und Tricks zu verschiedenen Sachen + +### Git +- [Git README](./tipps_und_tricks/git/git.md "Git ist doof") +- [YT Tutorial (Morpheus)](https://youtube.com/playlist?list=PLNmsVeXQZj7rbmmqb1Lt_RGU4DEhelTrR&si=U-ldkXilfRgSsBYn) + +### Python +- [One Line Python Scripts](./tipps_und_tricks/python/oneline.md) \ No newline at end of file diff --git a/tipps_und_tricks/git/git.md b/tipps_und_tricks/git/git.md new file mode 100644 index 0000000..c746d5c --- /dev/null +++ b/tipps_und_tricks/git/git.md @@ -0,0 +1,80 @@ +# Alles rund um Git + +## Readme's +- [Michis Git Verstännis](michi_git "Git ist doof") + + +## Weiteres: +### Der Reponame "main" ist voreingestellt, es gehen auch andere. +> Am Beispiel dieses Readme.md: +> _Setup:_ +> ``` +> git checkout -b main +> git add README.md +> git commit -m "first commit" +> git remote add origin git@teapot.informationsanarchistik.de:Wobbl/tipps_und_tricks.git +> git push -u origin main +> ``` +> _Bash:_ +> ``` +> $ vi README.md +> $ git push -u origin main +> Branch 'main' folgt nun Remote-Branch 'main' von 'origin'. +> Everything up-to-date +> $ git commit README.md +> [main a0d4d5c] geändert: README.md +> 1 file changed, 11 insertions(+), 1 deletion(-) +> ॐ wn@magma:~/python/tipps_und_tricks→git:(main) git push -u origin main +> >> Objekte aufzählen: 5, fertig. +> Zähle Objekte: 100% (5/5), fertig. +> Delta-Kompression verwendet bis zu 4 Threads. +> Komprimiere Objekte: 100% (2/2), fertig. +> Schreibe Objekte: 100% (3/3), 535 Bytes | 535.00 KiB/s, fertig. +> Gesamt 3 (Delta 0), Wiederverwendet 0 (Delta 0), Pack wiederverwendet 0 +> remote: . Processing 1 references +> remote: Processed 1 references in total +> To teapot.informationsanarchistik.de:Wobbl/tipps_und_tricks.git +> 83c741e..a0d4d5c main -> main +> Branch 'main' folgt nun Remote-Branch 'main' von 'origin'. +> ``` + +## SSH Setup + +Ein Zugriff auf den Teetopf über https ist komplexer und unsicherer als über **ssh** +ssh ist ein unverzichtbare universelles "Schweizermesser" für professionelles und sicheres Arbeiten im Netz. +Um _forgejo_ auf teapot mit ssh zu bedienen, muss mensch einen zweiteiligen Schlüssel generieren. +Das vom Server bevorzugte, weil am schwersten zu knackende Verschlüsselungssystem ist ed25519. +Einfach zu erzeugen: +``` +ssh-keygen -t ed25519 +``` +Das zum Entsperren des Schlüssels notwendige lokale Passwort sollte böse und gemein sein, sonst ist die Übung im Falle eines geklauten Rechners fürn A... +Je nach verwendetem Desktopsystem bietet Linus natürlich an, sich die Passphrase wegzuspeichern. +Um damit das remote System zu bedienen, muss der öffentliche Teil des Schlüssels dort abgelegt werden. Lokal ist das zumeist die Datei +``` +~/.ssh/id_ed25519.pub +``` +Die klappste in die Zwischenablage und bunkerst sie in deinem Profil im _forgejo_ +**Auf keinen Fall den privaten Schlüssel hochladen oder überhaupt jemals irgendwo durch irgendwelche Leitungen schicken!** +Sollte das versehentlich passiert sein, kannste den Schlüssel löschen und nen neuen anlegen. +Der Publickey darf im Fernsehen gesendet werden, das schadet nix. + +Eine prima Seite mit Infos zu git und ssh schrieb der Patrick Asmus, klixdu hier: [SSH-Keys für gitea](https://www.media-techport.de/2023/08/howto-ssh-schluessel-fuer-gitea-einfache-einrichtung/ "HP Patrick Asmus") + +Wenn alles passt, kannst du mit der Befehlsverbindung **&&**, was soviel bedeutet wie "If Exitcode=OK then" die nötigen Kommandos zusammenfassen: + +``` +vi README.md && git commit -m "Mein Kommentar" README.md && git push -u origin main +``` + +und du hast die aktuelle Version im lokalen und im entfernten Repo. +Das funktioniert nicht bei nicht eigenen Repos, wenn die auf "privat" geschaltet sind. + + +## Bei dem Error `fatal: refusing to merge unrelated histories` +den Befehl `git pull origin master --allow-unrelated-histories` verwenden und das Problem ist gelöst. + +## Dateien komplett aus der History löschen + +Wenn man mal Dateien comittet hat, diese aber aus allen Commits wieder entfernen möchte: \ +https://www.baeldung.com/ops/git-remove-file-commit-history diff --git a/tipps_und_tricks/git/michi_git.md b/tipps_und_tricks/git/michi_git.md new file mode 100644 index 0000000..957f421 --- /dev/null +++ b/tipps_und_tricks/git/michi_git.md @@ -0,0 +1,188 @@ +# Git + +Git ist nen Versionverknalltütenprogramm was eder brauch oder auch nicht. + +## Inhaltsverzeichniss +1. [Git Configurieren](#git-cofigurieren) +2. [Start](#start) +3. [Daten hinzufügen und entfernen](#daten-hinzufügen-und-entfernen) +4. [Neue Version an Git geben und überprüfen](#neue-version-an-git-geben-und-überprüfen) +5. [Mit Git Servern arbeiten](#mit-git-servern-arbeiten) +6. [push und pull](#push-und-pull) +7. [Branches](#branches) +8. [Grafisches Git](#grafisches-git) + +## Git Cofigurieren + +>### Nutzername +>``` +>git config user.name "" +>``` +>>- Setzt den Nutzername für das Aktuelle Repo +>>- Wenn kein Name angegeben ist wird der aktuelle Festgelegter Name ausgegeben +>>- Wen nach config ein --global gesetzt wird dann wird das für die ganze git installation des Benutzer festgelegt oder usgegeben + +>### E-Mail +>``` +>git config user.name "" +>``` +>>- Setzt die E-Mail für das Aktuelle Repo +>>- Wenn keine E-Mail angegeben ist wird der aktuelle Festgelegte E-Mail ausgegeben +>>- Wen nach config ein --global gesetzt wird dann wird das für die ganze git installation des Benutzer festgelegt oder usgegeben + +## Start: +Ein Repo ist ein Ding wo deine Projektdaten gespeichert sind. + +>### Initialisieren deines Repos: +>``` +>git init +>``` + +>### Downloade ein existierenes Repo: +>``` +>git clone +>``` +Nun kannst du mit Git arbeiten z.b. Daten Erstellen und bearbeiten + +## Daten hinzufügen und entfernen: + +>### Füge Daten zum Repo hinzu: +>``` +>git add +>``` +>>Beispiel: +>>``` +>>git add README.md +>>git add . +>>git add ./README.md +>>``` + +>### Entferne Daten von Repo: +>``` +>git rm +>``` +>>Beispiel: +>>``` +>>git rm README.md +>>git rm . +>>git rm ./README.md +>>``` + +## Neue Version an Git geben und überprüfen: +>### Commit erstellen: +>``` +>git commit +>``` +>> eine Message ist Pflicht! + +>### Log anschauen +>``` +>git log +>``` +>> Zeigt dir deine commits an und auch was du geändert hast + + +>### Status ansehen +>``` +>git status +>``` +>> Zeigt dir deine Aktuellen Änderungen an und den aktuelen Branch + +## Mit Git Servern arbeiten: +>### Füge ein entferntes Repo hinzu: +>``` +>git remote add origin +>``` +>>- Die adresse muss mit .git enden +>>- origin ist die Bezeichnung des entfernen Repos + +>### Entferne ein entferntes Repo : +>``` +>git remote rm origin +>``` + +## push und pull: +>### push ladet den Branch auf den Server: +>``` +>git push origin main +>``` +>>- origin ist die Beschreibung des Remote Servers +>>- main Ist Der Branch der gepusht werden soll +>>- push(en) = drücken(de) + +>### pull ladet den Branch von Server: +>``` +>git pull origin main +>``` +>>- origin ist die Beschreibung des Remote Servers +>>- main Ist Der Branch der gepusht werden soll +>>- pull(en) = ziehen(de) + +## Branches + +Branches auch Zweige sind einfach mehrere Arbeitsflächen. + +>### Neuen Branch erstellen +>``` +>git branch +>``` +>>- Erstellt einfach ein Abbild von den aktuellen Branch +>>- Du bist aber immer noch auf den Aktuellen Branch + +>### Branch wecheln +>``` +>git checkout +>``` +>> Nun hast du den Branch gewechselt + +>### Branches zusammenführen +>``` +>git merge +>``` +>>- Nimmt die Änderungen von den angegebenen Branch und Schiebt sie auf den aktuellen Branch + +>### Branches loschen +>``` +>git branche -d +>``` +>>- Du darfst blos nicht in diesen Branch sein also mit checkout in ein anderen Branch wechseln + +## Forks und Pull Requests + +ein Fork ist eine unabhängige Kopie eines Repos. + +Ein Pull Request ist eine aufforderung an Die Mittarbeiter des original Repos und den Fork zu mergen also um alle änÄderungen des Forkes in das original Repo zu übernehmen. + +>### Fork erstellen und bearbeiten +>1. In der Weboberfläche oben rechts auf Fork klicken +>2. Den erstellten Fork in Profil suchen und git url oder ssh kopieren +>3. In der Konsole git clone ausführen +>4. Änderungen machen +>5. Pushen + +>### Pull Request erstellen +>1. In er Weboberfläche das original Repo öffnen +>2. In Tab Pull Request ein Pull Request erstellen und den passenden Start und as passende Ziel Repo auswählen und passende Infos hinzufügen +>3. Auf erstetellen klicken und Mit en Entwicklern besprechen was man damit nun tut + +## Grafisches Git + +Falls man den überblick verliehrt ist es hilfreich sich Das Repo grafisch anzusehen. + +>### Git Gui +>``` +>git gui +>``` +>> Grafische Benutzeroberfläche mit vielen Features + +>### Gitk +>``` +>gitk +>``` +>> Eher um die Vergangenheit des Projetes anzuschauen + +>### Entwicklerplattformen +>Viele Entwicklerplattformen haben eine git intigration +>>- Visual studio Code +>>- Jetbrains IDE +>>- ... diff --git a/tipps_und_tricks/python/oneline.md b/tipps_und_tricks/python/oneline.md new file mode 100644 index 0000000..7eadafa --- /dev/null +++ b/tipps_und_tricks/python/oneline.md @@ -0,0 +1,103 @@ +# Python Programme in einer Zeile code schreiben + +Wenn du Scripte bis zur einer Zeile Code verkürzen möchtest; Hab ich hier ein paar Möglichkeite aufgeschrieben. +Eine ist Lambda, weiteres findest du in Inhaltsverzeichniss: + +## Inhaltsverzeichnis: +1. [Lambda](##-lambda-funktionen-grundlage) +2. [Semikolons](##-semikolon) +3. [Listen definieren](#-list-comprehension) +4. [Mehrfachzuwesungen](##-variablen-mehrfachzuwesungen) + +## Lambda Funktionen Grundlage +Lambda wird benutzt um eine **Anonyme Funktion** zu definieren +> Beispiel: +> ``` +> funcbla = +> funcbla() +> ``` + +Oder du kannst eine lambda Funktion direkt ausführen: +> `()()`oder `")` <-- **locale variablen werden genutzt** +### Lambda Ausdrücke: +man definiert eine Ausdruck so: +> ``` +> lambda : if else +> ``` + +> Beispiel: +> ``` +> print((lambda x : "ungerade" if x%2 else "gerade")(123)) +> ``` +> Output: `ungerade` +> +> **Wenn du eine Funktion in einen Lambda Ausdruck verwendest, muss sie eine Variable zurückgeben. +> Lambda gibt entweder `ungerade` oder `gerade` im Beispiel and print() zurück.** + + +## Semikolon +Nutze ein `;` um mehrere Funktionen in einer Zeile zu verketten +> Beispiel: +> ``` +> func1() +> func2() +> ``` +> wird zu: +> ``` +> func1();func2() +> ``` + + +# List Comprehension +Mit List Comprehensions kann man Listen in einer zeiler definieren und darüber iterieren: +> Beispiel: +> ``` +> list1 = [] +> for x in range(10): +> list1.append(x) +> ``` +> wird zu: +> ``` +> list1 = [ for x in range(10)] +> ``` + +Mann kan auch if statements in Comprehentions nutzen: +``` +newlist = [expression for item in iterable if condition == True] +``` +> Beispiel: +> ``` +> list1 = ["a", "b", "c", "d", "e"] +> list2 = [x for x in fruits if "a" in x] +> ``` +> ^ Addiert Das Objekt x zu list2 wenn `if "a" in x` also eine "a" in den String Objekt ist. + + +## Variablen Mehrfachzuwesungen +variablen sind was sehr nützliches was nicht fehlen darf! +Man kann sie auf verschiedene arten zuwei?en, eine davon ist mit Mehrfachzuweisungen: +> ``` +> var1 = 1 +> var2 = 2 +> var3 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] +> ``` +> wir zu: +> ``` +> var1, var2, var3 = 1, 2, [x for x in range(10]``` + +### Stapel = Stapel +In Grunde kann man mit Mehrfachzuweisungen Stapel(Tuple) entpacken oder packen: +> Packen eines Tupels in eine Variable +> ``` +> var1 = a,b,c +> ``` +> soviel wie: +> "var = tulple" +> ^ "Anfenger Hinweiss: Wenn man das untenstehenliegene Prinzip verstanden hat ist man flexibler" + +> Packen eines Tupels in einen Tuple: +> ``` +> var1, var2, var3 = 1, 2, 3 +> ``` +> soviel wie: +> "tuple = tulple"