Зафиксировать содержимое одного каталога в другом каталоге с помощью 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.