我有一个自定义的 linux 提示符,它显示各种有用的信息 block 。当我在日常工作中使用 SVN 时,我认为使用有关当前工作区 URL 的信息进一步自定义提示会很好。这主要是由最近的一个案例引起的,我切换到一个分支然后忘记了我已经这样做了。困惑无处不在,为了避免再次发生这种情况,我认为这似乎是个好主意。
其他人已经实现了这一点,所以我可以只效仿他们的例子,但我也喜欢从基本原则出发。关于其他人的解决方案,我观察到的一件事是他们倾向于在不考虑上下文的情况下执行“svn 信息”。这本身不是问题,但我认为在调用“svn info”之前测试普遍存在的“.svn”目录可能会很好。
我得出了这个部分解决方案:
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”的测试之外,有人可以建议我如何测试当前位置和所有父文件夹中是否存在所述文件夹吗?
非常感谢。
最佳答案
首先。不要将工作副本用于多个分支/主干。根本没有理由这样做。检查特定项目的特定分支通常需要不到五分钟的时间。而且,在这个千兆字节和 TB 大小的硬盘驱动器时代,没有理由节省空间。 (我的第一个硬盘驱动器是 40 兆字节。而且,我过去常常支配我的同事,他们只有 10 和 20 兆 字节硬盘)。
您第一次不小心使用了错误的分支时,您节省的一点时间和磁盘空间都会丢失,因为您忘记了您已经切换。
检查您是否在 Subversion 工作副本中的最佳方法是运行 svn info
并查看退出值是什么。如果它不为零,则说明您不在 Subversion 工作目录中。
如果你真的想在你的提示中有 repo 根(或类似的东西),我建议你在你的提示命令中使用这样的序列:
PS1="\u@\h:\w (\$(svn info --xml 2> /dev/null | sed -n '/<relative-url>/s/<.*>\(.*\)<.*>/\1/p'))\n$ "
关于linux - 在 linux 命令行上反向目录搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28241664/