Ein Rust-CLI-Tool, das rekursiv Git-Repositorys entdeckt, Zustandsänderungen erfasst, Diffs generiert, Code-Elemente mit vollständigen Snippets extrahiert und sicherheitsorientierte Berichte für Code-Review- und Audit-Workflows erstellt.
Wenn dieses Projekt Ihre Arbeit unterstützt, tragen Sie zur laufenden Wartung und zu neuen Funktionen bei.
ETH-Spenden-Wallet
0x11282eE5726B3370c8B480e321b3B2aA13686582
Scannen Sie den QR-Code oder kopieren Sie die obige Wallet-Adresse.
Ein Rust-CLI-Tool, das rekursiv Git-Repositorys findet, Zustandsänderungen erfasst, Diffs erstellt, Code-Elemente mit vollständigen Snippets extrahiert und sicherheitsorientierte Berichte für Code-Review- und Audit-Workflows erzeugt.
Warum nicht einfach Bash?
Ein Einzeiler wie
ls | while read line; do git -C "$line" diff HEAD~1 HEAD || true; donezeigt nur rohe Diffs. DiffCatcher bietet rekursive Erkennung, Code-Element-Extraktion, Sicherheitsmustererkennung, SARIF-Ausgabe für CI/CD, parallele Verarbeitung und Repo-übergreifende Sicherheits-Aggregation. Siehe den vollständigen Vergleich unten.
git clone https://github.com/Teycir/DiffCatcher.git
cd DiffCatcher
cargo build --release
./target/release/diffcatcher --help
# Alle Repos in einem Verzeichnis scannen (nur fetch, keine Änderungen)
diffcatcher ~/projects
# Updates pullen und Sicherheitsbericht erstellen
diffcatcher ~/projects --pull -o ./report
# Zwei Branches in einem einzelnen Repo difffen (PR-Review-Modus)
diffcatcher ./my-repo --diff main..feature/auth -o ./pr-report
# SARIF-Ausgabe für GitHub Code Scanning erzeugen
diffcatcher ~/projects --summary-format sarif,json -o ./report
# Trockenlauf, um zu sehen, was gescannt würde
diffcatcher ~/projects --dry-run
# Schnelles Scannen mit 8 parallelen Arbeitern
diffcatcher ~/projects -j 8 --quiet
# Standard-Scan (nur fetch)
diffcatcher <ROOT_DIR>
# Benutzerdefiniertes Ausgabeverzeichnis
diffcatcher ~/projects -o ./my-report
# Verschachtelte Repos einbeziehen und Symlinks folgen
diffcatcher ~/projects --nested --follow-symlinks
# Versteckte Verzeichnisse überspringen
diffcatcher ~/projects --skip-hidden
# Nur fetch (Standard – keine Arbeitsverzeichnis-Änderungen)
diffcatcher ~/projects
# Änderungen tatsächlich pullen
diffcatcher ~/projects --pull
# Force pull mit stash/pop für schmutzige Repos
diffcatcher ~/projects --pull --force-pull
# Rebase-Strategie verwenden
diffcatcher ~/projects --pull --pull-strategy rebase
# Fetch/Pull komplett überspringen (nur historische Diffs)
diffcatcher ~/projects --no-pull
# Element-Extraktion überspringen (nur rohe Diffs)
diffcatcher ~/projects --no-summary-extraction
# Elemente extrahieren, aber Code-Snippets überspringen
diffcatcher ~/projects --no-snippets
# Snippet-Kontext und -Grenzen anpassen
diffcatcher ~/projects --snippet-context 10 --max-snippet-lines 300
# Elemente pro Diff begrenzen
diffcatcher ~/projects --max-elements 1000
# Sicherheits-Tagging überspringen
diffcatcher ~/projects --no-security-tags
# Testdateien in die Sicherheitsanalyse einbeziehen
diffcatcher ~/projects --include-test-security
# Benutzerdefinierte Sicherheitsmuster verwenden
diffcatcher ~/projects --security-tags-file ./custom-patterns.json
DiffCatcher kann automatisch eine projektspezifische Konfiguration laden von:
<ROOT_DIR>/.diffcatcher.toml (Standard)--config <FILE>--no-configBeispiel:
output = "reports-local"
no_pull = true
history_depth = 2
summary_formats = ["json", "txt"]
no_security_tags = false
[plugins]
security_pattern_files = ["plugins/security-extra.json"]
extractor_files = ["plugins/extractors.json"]
CLI-Flags überschreiben Konfigurationswerte, wenn sie explizit gesetzt sind.
DiffCatcher unterstützt zwei Plugin-Typen:
--security-plugin-file <FILE> (wiederholbar)--extractor-plugin-file <FILE> (wiederholbar)Das Sicherheitsplugin-Format entspricht dem --security-tags-file JSON (version, mode, tags).
Extraktor-Plugin-Format:
{
"version": 1,
"extractors": [
{
"name": "policy-rule",
"kind": "Config",
"regex": "^policy\\s+([A-Za-z_][A-Za-z0-9_]*)"
}
]
}
# Zwei Branches in einem einzelnen Repo difffen
diffcatcher ./my-repo --diff main..feature/auth
# Bestimmte Commits difffen
diffcatcher ./my-repo --diff abc123..def456
# Diff mit SARIF-Ausgabe für CI-Integration
diffcatcher ./my-repo --diff origin/main..HEAD --summary-format sarif -o ./pr-report
Das Flag --diff BASE..HEAD überspringt die Repository-Erkennung und Fetch/Pull – es erstellt direkt ein Diff zwischen zwei Referenzen (Branches, Tags oder Commit-SHAs) und führt die vollständige Pipeline aus Extraktion und Sicherheits-Tagging auf dem Ergebnis aus.
# SARIF zusammen mit anderen Formaten erzeugen
diffcatcher ~/projects --summary-format sarif,json,md
# Nur SARIF für CI/CD-Upload
diffcatcher ~/projects --summary-format sarif -o ./report