Зафиксировать содержимое одного каталога в другом каталоге с помощью svnkit

Я хочу зафиксировать содержимое одного каталога сервера (все версионное содержимое версионного каталога, уже присутствующего в директории сервера) в новый каталог на том же сервере, используя SVNKit (версия 1.7).

Этот новый каталог может уже присутствовать; или нужно добавить / сделать это в соответствующем месте на основе пути пресса. (добавив новый каталог на сервер, я могу сделать)

но я не могу зафиксировать содержимое исходного пути к пути пути (уже создан или создан заново).

Я понимаю, так как я хочу, чтобы сервер для фиксации сервера, Здесь не будет никакой рабочей копии.

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

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

Еще я попробовал создать временную локальную рабочую копию на диске c://, извлекать код из источника в этот локальный каталог и затем фиксировать его по пути dest. но это не подходящий способ:(также я не могу удалить локальный временный рабочий Coopy; он говорит, что он содержит root, поэтому не может быть удален.

Может ли кто-нибудь помочь мне в фиксации сервера с использованием SVNKit?

Благодарю. -Aditya

1 ответ

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

ISVNCommitEditor editor = svnRepository.getCommitEditor("", null);

editor.openRoot(latestRevision);
editor.openDir("path", latestRevision); //or use addDir if it doesn't exist
editor.openDir("path/to", latestRevision); //or use addDir if it doesn't exist
editor.openDir("path/to/new", latestRevision); //or use addDir if it doesn't exist
editor.addDir("path/to/new/directory", "/path/to/old/directory", copySourceRevision); 
editor.closeDir();
editor.closeDir();
editor.closeDir();
editor.closeDir();
editor.closeDir();
editor.closeEdit();

Но если вы не хотите сохранять историю, вы можете создать редактор с

ISVNCommitEditor editor = svnRepository.getCommitEditor("", null);

а затем позвоните

anotherSvnRepository.setLocation(copySourceUrl, true);
anotherSvnRepository.update(copySourceRevision, "", SVNDepth.INFINITY, false, reporter, customEditor);

Вместо reporter используйте этот код:

    ISVNReporterBaton reporter = new ISVNReporterBaton() {
        @Override
        public void report(ISVNReporter reporter) throws SVNException {
            reporter.setPath("", null, copySourceRevision, SVNDepth.INFINITY, true);
            reporter.finishReport();
        }
    }; 

customEditor должен быть оберткой для editor построенный выше, это будет называть editor с правильными путями (возможно, вы должны добавить некоторые вызовы openDir/closeDir, чтобы сделать вызовы редактора правильными).

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

Чтобы понять, существует ли каталог / файл или нет, используйте метод SVNRepository#checkPath.

Другие вопросы по тегам