Как я могу определить магистральную ревизию, используемую для создания ветки с SharpSvn?
В настоящее время я создаю генератор ChangeLog, который создает такой журнал, различая ревизии /trunk против / branch /... (которая была создана в некоторой точке из /trunk), чтобы увидеть, какие коммиты не находятся в ветвь (а затем делает некоторые модные запросы Redmine).
Чтобы минимизировать диапазон журналов, я хотел оптимизировать запрос на основе ревизии, использованной для создания ветви как моего смещения.
Я знаю функцию " Остановить при копировании / переименовании" в TortoiseSVN, чтобы определить ревизию, используемую для создания определенной ветви или тега.
Как я могу добиться этого с SharpSvn - или есть более простой способ определить разницу (для упрощения запроса: я буду только diff /trunk против нисходящей ветви...).
2 ответа
Я получил это для работы со следующим кодом - но я не уверен, что это самый элегантный способ сделать это:
var svnClient = new SvnClient();
svnClient.GetLog(new Uri("http://..../REPOSITORY/BRANCH/FOO",
new SvnLogArgs
{
StrictNodeHistory = true
},
out logItems);
var initRevision = logItems.OrderBy(arg => arg.Revision)
.First();
var changedPath = initRevision.ChangedPaths.Single();
//changedPath.CopyFromRevision
//changedPath.CopyFromPath
Меня беспокоит то, что мне нужно получить весь журнал, а затем заказать его соответствующим образом, чтобы получить первоначальную ревизию, которая используется для получения CopyFromRevision
а также CopyFromPath
свойства.
Если вы сохраняете ваши ветви относительно связанными, вы можете использовать некоторых из помощников Mergeinfo в Subversion, чтобы выполнить большую часть тяжелой работы по определению того, что находится в одной ветви, а не в другой.
Но если вы используете строгую политику проекта, делать вещи самостоятельно может быть гораздо проще. Subversion пытается решить все проблемы на 100%, что может соответствовать или не соответствовать вашим требованиям.