Ich bezweifle, dass ein einzelner Befehl ausgeführt werden muss. Sie benötigen hier eine Kombination von Werkzeugen, die nacheinander ausgeführt werden.
Git enthält ein Argument, um alle Dateien im Repo aufzulisten: git ls-files
Wenn Sie nur die nicht protokollierten und geänderten Dateien auflisten möchten, können Sie die Argumente -o
und verwenden -m
:
git ls-files -o -m
Wenn Sie dies in eine PowerShell-Funktion pipeln, wird diese als Array angezeigt, und Sie können alle diese Dateien durchlaufen und mit ihnen machen, was Sie möchten. (Ich kenne SVN nicht gut, aber vermutlich sollte es dort einen ähnlichen Befehl geben.)
Hier ist eine Skriptdatei, die nach einer .git
Datei in Ihrem aktuellen Arbeitsverzeichnis sucht, Aufrufe git ls-files -o -m
und Pipes ausgibt, die an eine andere Funktion ausgegeben werden, die jede Datei durchläuft und ihren vollständigen Pfad ausgibt. Sie können mit jeder Datei kopieren oder verschieben oder was auch immer Sie möchten:
function DoSomethingForGitLsFiles { param( [array]$FileList ) Write-Host $FileList.count 'files found:' foreach ($FilePath in $FileList) { # This is where you could copy your files out somewhere else. Write-Host "FILE: $(Get-Location)\$FilePath" } } function FindGitRepo { param( [string]$searchPath ) if (Get-ChildItem -Name -Path "$searchPath\*.git") { DoSomethingForGitLsFiles (git ls-files -o -m) } else { Write-Host "No .git repo found." } } FindGitRepo -SearchPath (Get-Location)
Wenn sich Ihre Dateien an einem anderen Ort befinden, können Sie 7-zip für den Ordner usw. problemlos ausführen.
Das heißt, es klingt wie das, was Sie stattdessen möchten, entweder ein Zweig mit nur den erforderlichen Änderungen, die Sie auf einem anderen Changeset auswählen könnten, oder vielleicht ein Versteck, den Sie auf einem Changeset erneut anwenden und dann nach Belieben wiederherstellen können.
https://git-scm.com/docs/git-stash
(Abhängig von Ihrem Anwendungsfall reicht Stash möglicherweise nicht aus, aber es ist weniger bekannt, daher ist es möglicherweise nützlich.)