Tom*_*far 7 osx bash subversion
如何使用 SVN CLI 提高自己的工作效率?我需要完成这样的重复性任务:
我习惯于 Windows 上的 TortoiseSVN,但是切换到 OSX(非常类似于 linux)迫使我使用 SVN 的 CLI,因为其他客户端很糟糕或非常昂贵。
我遇到了类似的问题。我的方法是为我执行的最常见操作编写 shell 别名或函数。作为参考,这些是 ZSH shell 函数。这些函数本身也应该在 bash 中工作,但 shell 完成的内容会有所不同。
在查看您的使用情况时,您想要执行的“选择某些”操作与我的使用情况不同,并且没有任何规定。实际上,我建议您修改修订控制的使用,以进行更频繁的提交,并利用存储库中的多个工作副本或分支来跟踪选择性更改集。如果您在目录中工作,那么您在那里所做的一切都应该选择性地提交或恢复,但不应留下太多内容。在任何给定时刻提交您所拥有的内容,并使用版本控制功能来处理产品中的内容或不包含的内容。
为了使其工作,您可以将代码放入您的~/.zshrc文件中(或~/.bashrcbash)。
这是我(每天)使用的主要功能:
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
Run Code Online (Sandbox Code Playgroud)
这应该允许您运行类似的操作svnlist unknown来查找当前目录中未版本控制的所有文件,并可svnlist unknown add选择将它们全部添加。svnlist clobered revert会找到更新后所有已被破坏的文件并恢复它们。svnlist conflicted resolved会将所有冲突标记为已解决。svnlist missing del会将操作中丢失的任何文件标记为已在存储库中删除。
另外,如果您遇到这种情况,这里有一个用于编辑特定修订版本的日志消息的方法。我不再使用它了,但我很早就犯了很多错误,并且更喜欢保持日志消息整洁:
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
}
Run Code Online (Sandbox Code Playgroud)
通过查看这段代码,它确实表明我在很多年前编写了这些代码,当时我刚刚开始使用版本控制,并且在 shell 中不太优雅,但它应该仍然可以工作。