В SVN, как мне скопировать только подкаталоги каталога в другой каталог?

Я написал простой класс JavaScript, который реализует технику, аналогичную той, которая описана в ht-файле answer . Надеюсь, это может быть полезно кому-то здесь. Проект GitHub называется response-monitor.js

По умолчанию он использует spin.js в качестве индикатора ожидания, но также предоставляет набор обратных вызовов для реализации пользовательского индикатора.

JQuery поддерживается, но не требуется.

Известные функции

  • Простая интеграция
  • Нет зависимые
  • Плагин JQuery (необязательно)
  • Spin.js Интеграция (опционально)
  • Конфигурируемые обратные вызовы для мониторинга событий
  • одновременные запросы
  • Обнаружение сбоев на стороне сервера
  • Обнаружение тайм-аута
  • Кросс-браузер

Пример использования

HTML





 

Link 1 (Timeout: 30s)
Link 2 (Timeout: 10s)

Клиент (обычный JavaScript)

//registering multiple anchors at once
var my_anchors = document.getElementsByClassName('my_anchors');
ResponseMonitor.register(my_anchors); //clicking on the links initiates monitoring

//registering a single form
var my_form = document.getElementById('my_form');
ResponseMonitor.register(my_form); //the submit event will be intercepted and monitored

Клиент (JQuery)

$('.my_anchors').ResponseMonitor();
$('#my_form').ResponseMonitor({timeout: 20});

Клиент с обратными вызовами (JQuery)

//when options are defined, the default spin.js integration is bypassed
var options = {
    onRequest: function(token){
        $('#cookie').html(token);
        $('#outcome').html('');
        $('#duration').html(''); 
    },
    onMonitor: function(countdown){
        $('#duration').html(countdown); 
    },
    onResponse: function(status){
        $('#outcome').html(status==1?'success':'failure');
    },
    onTimeout: function(){
        $('#outcome').html('timeout');
    }
};

//monitor all anchors in the document
$('a').ResponseMonitor(options);

Сервер (PHP)

$cookiePrefix = 'response-monitor'; //must match the one set on the client options
$tokenValue = $_GET[$cookiePrefix];
$cookieName = $cookiePrefix.'_'.$tokenValue; //ex: response-monitor_1419642741528

//this value is passed to the client through the ResponseMonitor.onResponse callback
$cookieValue = 1; //for ex, "1" can interpret as success and "0" as failure

setcookie(
    $cookieName,
    $cookieValue,
    time()+300,            // expire in 5 minutes
    "/",
    $_SERVER["HTTP_HOST"],
    true,
    false
);

header('Content-Type: text/plain');
header("Content-Disposition: attachment; filename=\"Response.txt\"");

sleep(5); //simulate whatever delays the response
print_r($_REQUEST); //dump the request in the text file

Для получения дополнительных примеров проверьте папку examples в репозитории.

23
задан Simon Dugré 4 July 2012 в 02:55
поделиться

3 ответа

Рассматривали ли вы использование svn merge?

Для репозитория, подобного этому:

trunk/a_folder/foo
trunk/a_folder/bar
trunk/new_folder/baz

используйте эти команды для объединения каталогов foo и bar:

cd trunk/new_folder
svn merge -r1:HEAD http://svn/repo/trunk/a_folder .
9
ответ дан Jerub 4 July 2012 в 02:55
поделиться

Вы очень, очень близки:

svn copy -m"Copy Directory" file:///path/to/a_folder file:///path/to/another_folder

просто отбросьте /* из первого аргумента.

1
ответ дан Ken Gentle 4 July 2012 в 02:55
поделиться

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

svn cp svn://my_project/vendor/1.1 svn://my_project/trunk

, потому что соединительная линия уже существует, таким образом, Вы закончили бы с:

svn://my_project/trunk/1.1

Используя [1 117] слияние имеет неудачное свойство не хранения истории поставщика 1,1 тега в подрывной деятельности до 1,5, который представил отслеживание слияния. Вы не можете заботиться. В этом случае слияние было бы правильным решением:

svn co svn://my_project/trunk trunk-wc
svn merge svn://my_project/trunk svn://my_project/vendor/1.1 trunk-wc

лучший способ считать это слияние: Сначала определите изменения, необходимые для сделать trunk идентичный vendor/1.1, затем применить те изменения в данной рабочей копии (также соединительной линии, в этом случае).

я должен указать, что это слияние эффективно сдует что-либо, что было в соединительной линии ранее. Так, если Вы будете иметь локальный (непоставщик) модификации уже на соединительной линии, Вы захотите применить просто изменения между 1,1 и предыдущее отбрасывание поставщика:

svn co svn://my_project/trunk trunk-wc
svn merge svn://my_project/vendor/1.0 svn://my_prjoect/vendor/1.1 trunk-wc

, Если соединительная линия существует, но пуста , у Вас есть два варианта: замените соединительную линию или запишите немного цикла оболочки:

Замена соединительной линии похожа на это:

svn rm svn://my_project/trunk
svn cp svn://my_project/vendor/1.1 svn://my_project/trunk

Усиление оболочки (удар):

svn co svn://my_project/trunk trunk
svn co svn://my_project/vendor/1.1 1.1
( cd 1.1
  for x in * ; do
    svn cp $x ../trunk
  done 
)
svn ci trunk
20
ответ дан bendin 4 July 2012 в 02:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: