Ich stoße auf ähnliche Probleme. Mein Ansatz war es, Shell-Aliase oder -Funktionen für die häufigsten Aktionen zu schreiben, die ich ausführe. Als Referenz sind dies ZSH-Shell-Funktionen. Die Funktionen selbst sollten auch in Bash funktionieren, aber die Shell-Vervollständigung wäre anders.
Bei der Überprüfung Ihrer Nutzung unterscheidet sich die Aktion "Einige auswählen", die Sie ausführen möchten, von meiner Nutzung, und es gibt keine Vorkehrungen dafür. Ich würde Ihnen tatsächlich vorschlagen, Ihre Verwendung der Revisionskontrolle zu ändern, um häufigere Commits durchzuführen und mehrere Arbeitskopien oder Zweige in einem Repository zu nutzen, um selektive Änderungssätze zu verfolgen. Wenn Sie in einem Verzeichnis arbeiten, sollte alles, was Sie dort tun, entweder festgeschrieben oder selektiv zurückgesetzt werden, aber es sollte nicht viel übrig bleiben. Legen Sie fest, was Sie zu einem bestimmten Zeitpunkt haben, und verwenden Sie die Funktionen zur Revisionskontrolle, um zu handhaben, was in das Produkt einfließt oder nicht.
Damit dies funktioniert, würden Sie den Code in Ihre ~/.zshrc
Datei einfügen (oder ~/.bashrc
für Bash).
Hier ist die Hauptfunktion, die ich (jeden Tag) benutze:
function svnlist () {
if [ -z "$2" ]; then
case $1 in
clobered)
svn status | grep '^~' | cut -c9-
;;
missing)
svn status | grep '^\!' | cut -c0-
;;
unknown)
svn status | grep '^\?' | cut -c9-
;;
conflicted)
svn status | grep '^C' | cut -c9-
;;
esac
else
case $2 in
add)
$0 unknown | xargs -iX svn add "X"
;;
del)
$0 missing | xargs -iX svn del "X"
;;
revert) $0 conflicted | xargs -iX svn revert "X"
;;
resolved) $0 conflicted | xargs -iX svn resolved "X"
;;
unclober)
mkdir _tmp
$0 clobered | while read item; do
mv "$item" _tmp
svn del "$item"
done
svn ci -m "Unclobering files. (removing old)"
mv _tmp/* .
rmdir _tmp
$0 unknown add
svn ci -m "Unclobering files. (adding new)"
;;
esac
fi
}
alias svndiff="svn diff -x -b | colordiff"
compctl -x 'p[1]' -k '(missing unknown conflicted clobered)' - 'p[2]' -k '(add del revert resolved)' -- svnlist
Auf diese Weise sollten Sie so etwas wie ausführen können svnlist unknown
, um alle Dateien im aktuellen Verzeichnis zu finden, die nicht versioniert sind, und svnlist unknown add
um optional alle hinzuzufügen. svnlist clobered revert
würde alle Dateien finden, die nach einem Update gelöscht wurden, und sie zurücksetzen. svnlist conflicted resolved
würde alle Konflikte als gelöst markieren. svnlist missing del
würde alle in Aktion fehlenden Dateien als im Repository gelöscht markieren.
Auch wenn Sie darauf stoßen, finden Sie hier eine zum Bearbeiten der Protokollnachricht einer bestimmten Revision. Ich benutze das nicht mehr so oft, aber ich habe schon früh viele Fehler gemacht und ziehe es vor, die Protokollnachrichten aufgeräumt zu halten:
function svneditlog () {
rev=$1
if ! echo $rev | pcregrep '^[0-9]+$'; then
echo "Invalid usage. svneditlog REV"
return
fi
svn info | grep ^URL: | awk '{print $2}' | read url
svn propedit -r $rev --revprop svn:log $url
}
Wenn ich mir diesen Code anschaue, zeigt sich wirklich, dass ich diese vor vielen Jahren geschrieben habe, als ich gerade mit der Versionskontrolle angefangen habe und in einer Shell nicht sehr elegant war, aber es sollte trotzdem funktionieren.