2009-08-07 2 views
23

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

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

ответ

14

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

Следующим логическим шагом было бы интегрировать эту серию команд вы набирать слово в сам сценарий. –

+2

Если вы предпочитаете абсолютный путь, а не относительный, инициализируйте: 'grandparent = $ (pwd)' и каждый цикл: 'grandparent = $ (родитель dirname)' –

+5

Это будет работать только для версий Subversion до 1.6 , Версии 1.7 и более поздние версии содержат только одну папку .svn в корневой папке. – ccpizza

2

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

Редактировать: скрипт svnbase в преддверии комментариев работает, но это неточно.

+1

Что вы подразумеваете под точным? –

+1

Родительский каталог может быть проверкой другого репозитория. – stepancheg

7

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

2

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

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

+1

информация о svn info указывает на корень вашего репозитория, но не на рабочую копию. Таким образом, это не поможет, если вы не проверили весь репозиторий, тогда как 'svnbase' выше все еще будет. –

+1

да, согласился. +1 :) – stran

+2

С SVN 1.7 svn info перечислит корень рабочей копии. – Janosch

6

В 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% 
3

В Linux с SVN, версия 1.9.3 (r1718519), я бегу это: svn info --show-item wc-root

+0

Вы имели в виду wc-root? 'svn help info' перечисляет это как опцию и, похоже, работает правильно. – Adam

+0

Да, вот что я имел в виду. Я обновлю ответ. –

 Смежные вопросы

  • Нет связанных вопросов^_^