add Tutorial für checkout Repo for Msty

This commit is contained in:
Joachim Happel 2025-03-11 09:55:31 +01:00
parent b5079bdfda
commit 288541121e
7 changed files with 1352 additions and 1144 deletions

5
.gitignore vendored
View file

@ -10,6 +10,7 @@ __pycache__
*.pyc
*.log
/forgejo_issues/*.md
/forgejo_issues/
.env
/FOERBICO/*
/FOERBICO/

104
CHECKOUT_Repo_for_MSTY.md Normal file
View file

@ -0,0 +1,104 @@
# Git Repositorium für RAG nutzen
Wenn du ein Repositorium für RAG etwa in Mstys Knowledge Stacks nutzbar machen willst, darf es keine binären Daten enthalten. Hier eine ausführliche Anleitung:
## Option A: Nutze das Checkout-Script
Kopiere die Scriptdatei in ein beliebiges Verzeichnis, in das du die textbasierten Repodateien kopieren willst.
### Für Windows:
```bash
checkout.bat https://git.rpi-virtuell.de/Comenius-Institut/FOERBICO.git
```
Hinweis: Bei geschützten Repositories musst du Benutzernamen und Passwort in der URL angeben:
```bash
checkout.bat https://username:passwort@git.rpi-virtuell.de/Comenius-Institut/geschuetztes_repo.git
```
### Für Linux/Mac:
Mache das Script zuerst ausführbar:
```bash
chmod +x checkout.sh
```
Dann führe es aus:
```bash
./checkout.sh https://git.rpi-virtuell.de/Comenius-Institut/FOERBICO.git
```
### Was die Skripte machen:
1. Überprüfen, ob bereits ein Verzeichnis mit dem Repository-Namen existiert und löschen es gegebenenfalls
2. Klonen das komplette Repository
3. Entfernen alle bekannten binären Dateiformate (Bilder, Videos, Audio, Archive) aus dem Arbeitsverzeichnis
4. Belassen nur die Textdateien im Repository
Folgende Dateiformate werden entfernt:
- Bilder: JPG, JPEG, PNG, GIF, WEBP
- Videos: MP4, MOV, AVI, MKV
- Audio: MP3, WAV, OGG
- Archive: ZIP, TAR
Dies ist ein pragmatischer Ansatz, der zwar zunächst alle Dateien herunterlädt, aber anschließend die binären Dateien zuverlässig entfernt.
## Option B: Alternative mit Sparse-Checkout (für fortgeschrittene Benutzer)
> **Hinweis:** Diese Methode funktioniert möglicherweise nicht zuverlässig bei allen Git-Versionen.
Um ein Repository **ohne die Mediendateien (Bilder, Videos, Audios)** direkt zu klonen, kannst du auch **Sparse-Checkout** verwenden. Hier ist die Schritt-für-Schritt-Anleitung:
---
### 1. Klone das Repository **ohne automatischen Checkout**:
```bash
git clone --no-checkout https://git.rpi-virtuell.de/Comenius-Institut/FOERBICO.git
cd FOERBICO
```
---
### 2. Aktiviere Sparse-Checkout und konfiguriere die Dateiausschlüsse:
```bash
# Aktiviere Sparse-Checkout
git config core.sparseCheckout true
# Erstelle/Editiere die sparse-checkout-Datei
echo "/*" > .git/info/sparse-checkout # Schließe erst ALLES ein
echo "!*.jpg" >> .git/info/sparse-checkout
echo "!*.jpeg" >> .git/info/sparse-checkout
echo "!*.png" >> .git/info/sparse-checkout
echo "!*.gif" >> .git/info/sparse-checkout
echo "!*.webp" >> .git/info/sparse-checkout
echo "!*.mp4" >> .git/info/sparse-checkout
echo "!*.mov" >> .git/info/sparse-checkout
echo "!*.avi" >> .git/info/sparse-checkout
echo "!*.mkv" >> .git/info/sparse-checkout
echo "!*.mp3" >> .git/info/sparse-checkout
echo "!*.wav" >> .git/info/sparse-checkout
echo "!*.ogg" >> .git/info/sparse-checkout
echo "!*.zip" >> .git/info/sparse-checkout
echo "!*.tar" >> .git/info/sparse-checkout
```
---
### 3. Führe den Checkout für den gewünschten Branch durch (z.B. `main` oder `master`):
```bash
git checkout main # oder dein Ziel-Branch
```
---
### Erklärung:
- Mit `/*` schließt du **alle Dateien und Ordner** zunächst ein.
- Die Zeilen mit `!*.jpg`, `!*.mp4` usw. **schließen spezifische Dateitypen aus**.
- Die ausgeschlossenen Dateien werden **nicht** in deinem Arbeitsverzeichnis erscheinen, sind aber weiterhin im Repository vorhanden (du kannst sie später bei Bedarf nachladen).

50
checkout.bat Normal file
View file

@ -0,0 +1,50 @@
@echo off
setlocal enabledelayedexpansion
if "%~1"=="" (
echo Bitte Repository-URL als Parameter angeben.
echo Beispiel: checkout.bat https://git.rpi-virtuell.de/Comenius-Institut/FOERBICO.git
echo Hinweis: bei einigen URLs muss der Benutzername und das Passwort in der URL enthalten sein.
echo Beispiel: checkout.bat https://username:passwort@git.rpi-virtuell.de/Comenius-Institut/geschuetztes_repo.git
exit /b 1
)
set REPO_URL=%~1
REM Extrahiere den Repository-Namen korrekt aus der URL
for %%i in (%REPO_URL:/= %) do set REPO_NAME=%%i
set REPO_NAME=%REPO_NAME:.git=%
echo Klone Repository: %REPO_URL% in Ordner: %REPO_NAME%
REM Überprüfe, ob das Verzeichnis bereits existiert
if exist %REPO_NAME%\ (
echo Verzeichnis %REPO_NAME% existiert bereits. Lösche es...
rmdir /s /q %REPO_NAME%
if %ERRORLEVEL% neq 0 (
echo Fehler beim Löschen des Verzeichnisses.
exit /b 1
)
)
REM Klone Repository mit Standard-Checkout (Vollständig)
git clone %REPO_URL%
if %ERRORLEVEL% neq 0 (
echo Fehler beim Klonen des Repositories.
exit /b 1
)
cd %REPO_NAME%
echo Entferne alle Binärdateien...
REM Entferne Binärdateien aus dem Arbeitsverzeichnis
for %%e in (JPG jpg jpeg png gif webp mp4 mov avi mkv mp3 wav ogg zip tar) do (
echo Entferne Dateien mit Endung: %%e
for /r %%f in (*.%%e) do (
del "%%f"
)
)
echo Repository erfolgreich geklont und Binärdateien entfernt.
echo Repository-Verzeichnis: %REPO_NAME%

46
checkout.sh Normal file
View file

@ -0,0 +1,46 @@
#!/bin/bash
if [ -z "$1" ]; then
echo "Bitte Repository-URL als Parameter angeben."
echo "Beispiel: ./checkout.sh https://git.rpi-virtuell.de/Comenius-Institut/FOERBICO.git"
echo "Hinweis: bei einigen URLs muss der Benutzername und das Passwort in der URL enthalten sein."
echo "Beispiel: checkout.sh https://username:passwort@git.rpi-virtuell.de/Comenius-Institut/geschuetztes_repo.git"
exit 1
fi
REPO_URL=$1
# Extrahiere den Repository-Namen korrekt aus der URL
REPO_NAME=$(basename "$REPO_URL" .git)
echo "Klone Repository: $REPO_URL in Ordner: $REPO_NAME"
# Überprüfe, ob das Verzeichnis bereits existiert
if [ -d "$REPO_NAME" ]; then
echo "Verzeichnis $REPO_NAME existiert bereits. Lösche es..."
rm -rf "$REPO_NAME"
if [ $? -ne 0 ]; then
echo "Fehler beim Löschen des Verzeichnisses."
exit 1
fi
fi
# Vollständiges Klonen des Repositories
git clone "$REPO_URL"
if [ $? -ne 0 ]; then
echo "Fehler beim Klonen des Repositories."
exit 1
fi
cd "$REPO_NAME"
echo "Entferne alle Binärdateien..."
# Entferne Binärdateien aus dem Arbeitsverzeichnis
for ext in JPG jpg jpeg png gif webp mp4 mov avi mkv mp3 wav ogg zip tar; do
echo "Entferne Dateien mit Endung: $ext"
find . -name "*.$ext" -type f -delete
done
echo "Repository erfolgreich geklont und Binärdateien entfernt."
echo "Repository-Verzeichnis: $REPO_NAME"

View file

@ -194,8 +194,14 @@ class ForgejoMarkdownExporter:
# Erstelle einen sicheren Dateinamen
safe_title = ''.join(c if c.isalnum() or c in [' ', '-', '_'] else '_' for c in title)
filename = f"{repo_full_name.replace('/', '_')}__issue_{issue_number}_{safe_title[:50]}.md"
filepath = os.path.join(self.output_dir, filename)
# Erstelle einen Unterordner für das Repository
repo_dir = os.path.join(self.output_dir, repo_full_name.replace('/', '_'))
os.makedirs(repo_dir, exist_ok=True)
# Neuer Dateiname ohne Repo-Präfix
filename = f"issue_{issue_number}_{safe_title[:50]}.md"
filepath = os.path.join(repo_dir, filename)
# Hole Kommentare
comments = self.fetch_comments(repo_full_name, issue_number)
@ -314,13 +320,15 @@ class ForgejoMarkdownExporter:
updated_issues += 1
else:
new_issues += 1
# Relativen Pfad zur Ausgabedatei speichern
file_rel_path = os.path.relpath(filepath, self.output_dir)
issue_hashes[issue_id] = {
"hash": current_hash,
"number": issue.get('number'),
"repo": repo_full_name,
"title": issue.get('title'),
"file": os.path.basename(filepath),
"file": file_rel_path,
"updated_at": issue.get('updated_at'),
"state": issue.get('state')
}

View file

@ -1 +0,0 @@
.

File diff suppressed because it is too large Load diff