我有一个自定义的linux提示符,显示各种有用的信息块。当我在日常工作中使用SVN时,我认为使用有关当前工作空间URL的信息进一步自定义我的提示会很好。这主要是由于最近一个案例,我已经切换到一个分支,然后忘了我已经这样做了。混乱是如此,为了避免再次发生这种情况,我认为这似乎是一个好主意。
其他人已经实现了这一点,所以我可以按照他们的例子,但我也喜欢从基本原则中解决问题。我观察到的关于其他人解决方案的一件事是他们倾向于执行“svn info'不考虑背景。本身并不是问题,但我认为测试无处不在的“.svn”的存在可能会很好。在调用' svn info'。
之前的目录我到达了这个部分解决方案:
if [ -d './.svn' ] ; then svn info | sed -n -e '/^URL/ s/.*svn//p' ; fi;
存在' .svn'我调用的目录' svn info'然后使用sed吐出我感兴趣的URL部分。
然而,问题来自于,因为svn 1.7,' .svn'并不是无处不在!我以为我可能会通过调用' find'来替换目录的测试。执行反向目录搜索以搜索目录树...除非似乎没有这样的能力。
除了放弃测试' .svn'完全可以,有人建议我如何测试当前位置和所有父文件夹中是否存在所述文件夹?
非常感谢。
答案 0 :(得分:1)
首先。不要为多个分支/主干使用工作副本。根本没有理由。签出特定项目的特定分支通常不到五分钟。而且,在这个千兆字节和太字节大小的硬盘驱动器的时代,没有理由挽救房间。 (我的第一个硬盘驱动器是40个 mega 字节。而且,我主宰了我的同事只有10和20 mega 字节硬盘)。
当您第一次意外使用错误的分支时,您丢失的时间和磁盘空间会丢失,因为您忘记了已切换。
检查您是否在Subversion工作副本中的最佳方法是运行svn info
并查看退出值是什么。如果它不为零,则您不在Subversion工作目录中。
如果你真的想在你的提示符中有repo root(或类似的东西),我建议在你的提示命令中使用这样的序列:
PS1="\u@\h:\w (\$(svn info --xml 2> /dev/null | sed -n '/<relative-url>/s/<.*>\(.*\)<.*>/\1/p'))\n$ "
答案 1 :(得分:0)
此功能将从当前目录向上走树,寻找&#34; .svn&#34;目录:
is_svn () {
local dir=$PWD
while [[ $dir != "/" ]]; do
[[ -d "$dir/.svn" ]] && return 0
dir=$(dirname "$dir")
done
return 1
}
然后,您的提示可以包含类似
的内容$( is_svn && svn info | ... )