Как я могу найти корневую папку заданной рабочей копии Subversion - PullRequest
24 голосов
/ 07 августа 2009

Довольно часто я сижу в середине рабочей копии Subversion и хочу быстро svn status узнать, какие изменения я внес со времени последней проверки. Однако svn status работает только с текущей папкой, и это дети. (Аналогично для svn up тоже)

Я бы хотел быстро перейти в корневую папку рабочей копии Subversion, чтобы я мог запустить svn status и просмотреть все файлы, которые изменились, возможно, регистрация или обновление и затем возвращайтесь на работу, где я был раньше.

Ответы [ 8 ]

15 голосов
/ 07 августа 2009

Вот мой первый ответ: я написал небольшой 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

Так что теперь я могу сделать это:

[~/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]$ 
7 голосов
/ 06 марта 2015

В Windows:

svn info . |findstr /C:"Working Copy Root Path:"

В Linux:

svn info . |grep -F "Working Copy Root Path:"

Его можно присвоить переменной, используя небольшие манипуляции со строками. Версия для 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%
7 голосов
/ 07 августа 2009

Если вы используете git-svn в качестве клиента Subversion, то вы можете прозрачно взаимодействовать с хранилищем Subversion, используя локальные команды Git. Git автоматически показывает, что вы ожидаете через весь репозиторий, когда вы используете такие команды, как git status в любом месте дерева.

4 голосов
/ 07 марта 2017

В Linux с SVN, версия 1.9.3 (r1718519), я запускаю это: svn info --show-item wc-root

2 голосов
/ 07 августа 2009

На самом деле, если вы заглянете в свой файл .svn / records, вы найдете базу, указанную там, как правило, в строке 6. В любом случае формат вашего URL-адреса SVN даст вам некоторые важные подсказки: P О да, я взял на себя смелость смотреть, и svn info также скажет вам.

... вздох, это не то, что ты спросил. Мне нравится решение в первом ответе: P

2 голосов
/ 07 августа 2009

Это невозможно. SVN может быть извлечен из любой глубины, и любой subdir действует как совершенно новая проверка.

edit: скрипт svnbase в предыдущем комментарии работает, но он не точный.

0 голосов
/ 20 июля 2018

Вот мое решение, которое представляет собой гибрид различных решений, представленных здесь. Он написан на PowerShell, так как он мне нужен для модуля PowerShell, который я пишу.

<#
    This command outputs the top-most parent of the current folder.

    If the current folder is not under svn revision control,
    it will recurse up one level, and try again.

    It stops at the root folder on the current drive.
    If the current folder's drive's root folder is not under svn revision control,
    it will throw an exception "No SVN Root Directory found."
#>
function Get-SvnRootDirectory {
    $currentDirectory = Get-Location

    do {
        $output = $(svn info $currentDirectory 2> $null)
        $output = $output | findstr /C:"Working Copy Root Path:"
        if ($LASTEXITCODE -eq 0)
        {
            break;
        }
        # if (Test-Path -PathType Container -Path $currentDirectory)
        # {
        #     throw "No SVN Root Directory found."
        # }
        $currentDirectory = Split-Path -Path $currentDirectory -Parent
        if ([string]::IsNullOrWhiteSpace($currentDirectory))
        {
            throw "No SVN Root Directory found."
        }
    }
    while ($true)

    $output -match "Working Copy Root Path: (?<Group>.*)$" | Out-Null
    return $Matches.Group
}
0 голосов
/ 29 мая 2018

Попробуйте выполнить следующую команду на любой глубине вашей рабочей копии:

svn info . --show-item wc-root --no-newline
...