Как установить автора фиксации SVN с помощью библиотеки SharpSVN в С#
Вопрос
Я использую библиотеку SharpSvn от CollabNET.Я хотел бы указать автора версии при фиксации, но в итоге я всегда получаю фиксацию с моим именем пользователя Windows.
Это не работает для меня:
System.Net.NetworkCredential oCred = new
System.Net.NetworkCredential("user", "pass");
client.Authentication.DefaultCredentials = oCred;
Я также пробовал:
client.SetProperty("", "svn:author", "user");
Но я получаю сообщение об ошибке, что цель (первый аргумент) плохая.
Итак, не могли бы вы рассказать мне, как настроить пользователя (автора) фиксации в репозитории Subversion в С#?
Решение
Все зависит от того, как вы подключаетесь к своему репозиторию, поскольку репозиторий отвечает за добавление имени пользователя в ревизию.(Обычно он копирует учетные данные для соединений, но это не обязательно).
Когда вы используете репозиторий file:/// (что обычно не рекомендуется – см. Книга подрывной деятельности) вы можете обойти это прямо в коммите.
using (SvnClient client = new SvnClient())
{
client.Authentication.Clear(); // Clear predefined handlers
// Install a custom username handler
client.Authentication.UserNameHandlers +=
delegate(object sender, SvnUserNameEventArgs e)
{
e.UserName = "MyName";
};
SvnCommitArgs ca = new SvnCommitArgs { LogMessage = "Hello" }
client.Commit(dir, ca);
}
Если вы подключаетесь к удаленному репозиторию, вы можете изменить автора ревизии, если в репозитории установлен перехватчик pre-revprop-change (см. Книга подрывной деятельности)
using (SvnClient client = new SvnClient())
{
client.SetRevisionProperty(new Uri("http://my/repository"), 12345,
SvnPropertyNames.SvnAuthor,
"MyName");
// Older SharpSvn releases allowed only the now obsolete syntax
client.SetRevisionProperty(
new SvnUriTarget(new Uri("http://my/repository"), 12345),
SvnPropertyNames.SvnAuthor,
"MyName");
}
2009-08-14] более поздние выпуски SharpsVN также позволяют это:
using (SvnRepositoryClient rc = new SvnRepositoryClient())
{
SvnSetRevisionPropertyRepositoryArgs ra;
ra.CallPreRevPropChangeHook = false;
ra.CallPostRevPropChangeHook = false;
rc.SetRevisionProperty(@"C:\Path\To\Repository", 12345,
SvnPropertyNames.SvnAuthor, "MyName", ra);
}
В последнем примере предполагается прямой доступ к файлу к репозиторию, но он обходит перехватчики репозитория для достижения оптимальной производительности.