SharpSVN を使用して最新のリビジョン番号を取得するには?
6 に答える
SvnWorkingCopyClient を使用して作業コピーの最新バージョンをチェックしています。
var workingCopyClient = new SvnWorkingCopyClient();
SvnWorkingCopyVersion version;
workingCopyClient.GetVersion(workingFolder, out version);
ローカル作業リポジトリの最新バージョンは、次の方法で利用できます。
long localRev = version.End;
リモート リポジトリの場合は、次を使用します。
var client = new SvnClient();
SvnInfoEventArgs info;
client.GetInfo(targetUri, out info);
long remoteRev = info.Revision;
代わりは。
これは、コマンド ラインから svnversion ツールを使用する場合と似ています。お役に立てれば。
私もたくさんグーグルで検索しましたが、実際に最後のリビジョンを取得するために機能していた唯一のことは次のとおりです。
public static long GetRevision(String target)
{
SvnClient client = new SvnClient();
//SvnInfoEventArgs info;
//client.GetInfo(SvnTarget.FromString(target), out info); //Specify the repository root as Uri
//return info.Revision
//return info.LastChangeRevision
Collection<SvnLogEventArgs> info = new Collection<SvnLogEventArgs>();
client.GetLog(target, out info);
return info[0].Revision;
}
他のソリューションはコメントアウトされています。自分で試してみて、違いを確認してください。. .
これは非常に古い質問であり、上位 2 つの回答で適切に回答されています。それでも、誰かの助けになることを期待して、リポジトリと作業コピーの両方からリビジョン番号を取得する方法だけでなく、典型的な状況をテストする方法を説明するために、次の C# メソッドを投稿しています。たとえば、自動化されたビルド プロセスでは、問題と見なされます。
/// <summary>
/// Method to get the Subversion revision number for the top folder of the build collection,
/// assuming these files were checked-out from Merlinia's Subversion repository. This also
/// checks that the working copy is up-to-date. (This does require that a connection to the
/// Subversion repository is possible, and that it is running.)
///
/// One minor problem is that SharpSvn is available in 32-bit or 64-bit DLLs, so the program
/// needs to target one or the other platform, not "Any CPU".
///
/// On error an exception is thrown; caller must be prepared to catch it.
/// </summary>
/// <returns>Subversion repository revision number</returns>
private int GetSvnRevisionNumber()
{
try
{
// Get the latest revision number from the Subversion repository
SvnInfoEventArgs svnInfoEventArgs;
using (SvnClient svnClient = new SvnClient())
{
svnClient.GetInfo(new Uri("svn://99.99.99.99/Merlinia/Trunk"), out svnInfoEventArgs);
}
// Get the current revision numbers from the working copy that is the "build collection"
SvnWorkingCopyVersion svnWorkingCopyVersion;
using (SvnWorkingCopyClient svnWorkingCopyClient = new SvnWorkingCopyClient())
{
svnWorkingCopyClient.GetVersion(_collectionFolder, out svnWorkingCopyVersion);
}
// Check the build collection has not been modified since last commit or update
if (svnWorkingCopyVersion.Modified)
{
throw new MerliniaException(0x3af34e1u,
"Build collection has been modified since last repository commit or update.");
}
// Check the build collection is up-to-date relative to the repository
if (svnInfoEventArgs.Revision != svnWorkingCopyVersion.Start)
{
throw new MerliniaException(0x3af502eu,
"Build collection not up-to-date, its revisions = {0}-{1}, repository = {2}.",
svnWorkingCopyVersion.Start, svnWorkingCopyVersion.End, svnInfoEventArgs.Revision);
}
return (int)svnInfoEventArgs.Revision;
}
catch (Exception e)
{
_fLog.Error(0x3af242au, e);
throw;
}
}
(このコードには、コピー元のプログラムに固有のものがいくつか含まれていますが、それによって SharpSvn の部分が理解しにくくなることはありません。)
さて、簡単なグーグル検索でそれが得られ、それは機能します(/trunk/ URIをポイントするだけです):
http://sharpsvn.open.collab.net/ds/viewMessage.do?dsForumId=728&dsMessageId=89318