如何找到给定的subversion工作副本的根文件夹

Dav*_*ean 24 svn repository

我经常坐在颠覆工作副本的中间,我想快速svn status找出自上次检查以来我所做的改变.但是svn status只适用于当前文件夹及其子项.(同样svn up也是)

我想快速更改到subversion工作副本的根文件夹,这样我就可以运行svn status并查看所有已更改的文件,可能是签入或更新,然后返回到以前工作的地方.

Dav*_*ean 15

这是我的第一个回答:我写了一个小的bash脚本,名为svnbase:

#!/bin/bash -u

# this command outputs the top-most parent of the current folder that is still 
# under svn revision control to standard out

# if the current folder is not under svn revision control, nothing is output
# and a non-zero exit value is given

parent=""
grandparent="."

while [ -d "$grandparent/.svn" ]; do
    parent=$grandparent
    grandparent="$parent/.."
done

if [ ! -z "$parent" ]; then
    echo $parent
else
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)

所以现在我可以这样做:

[~/work/scripts/XXX/code/speech-detection/framework]$ cd $(svnbase)
[~/work/scripts/XXX]$ svn status
?      code/speech-detection/framework/output.old
[~/work/scripts/XXX]$ cd -
/home/XXXX/work/scripts/XXX/code/speech-detection/framework
[~/work/scripts/XXX/code/speech-detection/framework]$ 
Run Code Online (Sandbox Code Playgroud)

  • 这仅适用于最高1.6的Subversion版本.1.7及更高版本只在根文件夹中有一个`.svn`文件夹. (5认同)
  • 如果你更喜欢绝对路径而不是相对路径,则初始化:`grandparent = $(pwd)`,每个循环:`grandparent = $(dirname parent) (2认同)

Gre*_*ill 7

如果您使用git-svnSubversion客户端,那么您可以在本地使用Git命令与Subversion存储库进行透明交互.当您使用git status树中任何位置的命令时,Git会自动显示整个存储库中的待处理状态.


EM0*_*EM0 7

在Windows上:

svn info . |findstr /C:"Working Copy Root Path:"
Run Code Online (Sandbox Code Playgroud)

在Linux上:

svn info . |grep -F "Working Copy Root Path:"
Run Code Online (Sandbox Code Playgroud)

可以使用一点字符串操作将其分配给变量.Windows版本:

FOR /F "delims=" %%i IN ('svn info . ^|findstr /C:"Working Copy Root Path:"') DO SET SOME_TEMP_VAR=%%i
SET WORKING_COPY_ROOT=%SOME_TEMP_VAR:~24%
Run Code Online (Sandbox Code Playgroud)

  • 在非英语系统上,这可能会失败,因为文本将被本地化。为了防止在 Linux 上出现这种情况,请将行 `export LC_ALL=C` 添加到您的脚本中。 (2认同)

med*_*idi 5

在使用SVN版本1.9.3(r1718519)的Linux,我运行以下命令: svn info --show-item wc-root