当我在subversion项目的子目录中时,svn st
之类的命令只能在当前工作目录上运行。例如:
$ 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
答案 0 :(得分:0)
SVN没有项目概念。它有目录和文件,您可以根据需要在存储库中组织项目。但SVN并不知道某个特定目录是项目的根目录。
因此,您必须位于正确的目录中(或将其作为svn st
的参数传递)才能完成项目的所有更改。
答案 1 :(得分:0)
一个简单的解决方法是将$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