`根svn目录的svn st`

`根svn目录的svn st`,svn,version-control,Svn,Version Control,当我在subversion项目的子目录中时,诸如svnst之类的命令将仅在当前工作目录中工作。例如: $ svn co svn://example.com/trunk example $ cd example $ vi #editing files $ svn st M base.c M s/inner.c $ cd s $ svn st M inner.c 我希望,就像在git或hg中一样,我能够看到所有已签出项目的状态。我没有找到任何类似于hg-C的选项,因此我可以: $

当我在subversion项目的子目录中时,诸如
svnst
之类的命令将仅在当前工作目录中工作。例如:

$ svn co svn://example.com/trunk example
$ cd example
$ vi #editing files
$ svn st
M    base.c
M    s/inner.c
$ cd s
$ svn st
M    inner.c
我希望,就像在
git
hg
中一样,我能够看到所有已签出项目的状态。我没有找到任何类似于
hg-C
的选项,因此我可以:

$ svn -C ../
M    base.c
M    s/inner.c

SVN没有项目的概念。它有目录和文件,您可以根据需要在存储库中组织项目。但是SVN不知道特定目录是项目的根目录


因此,您必须位于正确的目录中(或将其作为
svn st
的参数传递),才能对项目进行所有更改。

一个简单的解决方法是将
$BASE
定义为根签出目录,然后使用
svn st$BASE
。当您处理两个subversion子目录时,它将不起作用

我想出了下面的bash脚本来或多或少地完成我正在寻找的任务,注意
pwd
周围的背景标记:

$ cat svnb
#!/bin/sh
PREVDIR=`pwd`
while true; do
    if [ ! -d .svn ]; then break; fi
    PREVDIR=`pwd`
    cd ..
    if [ "`pwd`" == "$PREVDIR" ]; then break; fi
done
cd "$PREVDIR"
if [ -d .svn ]; then svn $@;
else echo Not in an version controlled directory
fi
用法示例:

$ cd example/s
$ svnb st
M    base.c
M    s/inner.c
$ cd / && svnb st
Not in an version controlled directory

如果您喜欢使用Git功能,但必须使用Subversion服务器,我建议。好的,那么我是否有与
hg-C
并行的东西,以便
svn-C$MyProj
hg-cd-args
相当于
cd-d&&hg-args&&cd-