5

そのため、SharpSVN(SharpSvn.1.7-x86 1.7008.2243)を使用していますが、問題が発生し続けています。ドライブのルートにあるリポジトリでonを使用しようとするたびにSvnWorkingCopyClient(たとえば、D:\ドライブがあり、それ自体がリポジトリである場合)、svn_dirent_is_absoluteエラーがスローされます。

実際、私が見つけた、気にしないコマンドはSvnClient.GetUriFromWorkingCopy(string)

これを解決する方法についてのアイデアはありますか(作業コピーを移動したり、ファイルシステムにリンクしたりする以外に)?私はコードで方法を見つけること、またはこの制限を回避するための代替手段を見つけたいと思っています(SVN 1.7にはもうこの制限がないようです)。

ここにいくつかのコードがありますか?

private void fakeFunction(){
    var RootPath="d:\";
    using (var client = new SharpSvn.SvnClient())
    using(var workingClient = new SvnWorkingCopyClient())
    {
        SvnWorkingCopyVersion workingVersion = null;
        // Exception happens here
        if (workingClient.GetVersion(this.RootPath, out workingVersion))
        {
            CurrentRevision = workingVersion.End;
                // This will resolve just fine
            var targetUri = client.GetUriFromWorkingCopy(RootPath);
            var target = SvnTarget.FromUri(targetUri);
            SvnInfoEventArgs info = null;
            if (client.GetInfo(target, out info))
            {
                if (workingVersion.End != info.Revision)
                {
                    System.Collections.ObjectModel.Collection<SvnLogEventArgs> logEventArgs = null;
                    if (client.GetLog(targetUri, out logEventArgs))
                    {
                        var oldBack = Console.BackgroundColor;
                        var oldFor = Console.ForegroundColor;
                        Console.BackgroundColor = ConsoleColor.DarkMagenta;
                        Console.ForegroundColor = ConsoleColor.White;
                        foreach (var l in logEventArgs)
                        {
                            Console.WriteLine("[{0}-{1}]-{2}", l.Revision, l.Author, l.LogMessage);
                        }
                        Console.BackgroundColor = oldBack;
                        Console.ForegroundColor = oldFor;
                    }

                    System.Console.WriteLine("Repo not up to date.");
                }
            }
        }
    }
}

また、このhttp://subversion.tigris.org/issues/show_bug.cgi?id=3535http://subversion.tigris.org/ds/viewMessage.do?dsForumId=463&viewType=browseAll&dsMessageId=2456472に出くわしました。

それで、それはずっと昔に起こったので、これはもう問題ではないでしょうか?

4

3 に答える 3

2

応急修理とは、現在のディレクトリからルートまで「..」することです。

[pwd = C:\USERS\franklin\absrel]
root = ..\..\..
于 2013-02-08T19:49:00.693 に答える
1

メールアーカイブで読み取ることができるため、SharSVNにはルートパスに問題があります。しかし、私たちはあなたの機会のために小さなハックをすることができます:

  1. フルパッケージsharpsvnをダウンロードhttp://sharpsvn.open.collab.net/files/documents/180/5569/SSvnEx-1.7002.1998.zip
  2. svnversion.exeをbinディレクトリにコピーします
  3. 次に、ベライゾンを取得するためのハックメソッドが必要です

        public static bool GetVersionHack(string appPath,string targetPath,out long version)
        { 
           // <param name="appPath">Path to svnversion.exe</param>
           // <param name="path">Target path</param>
           // <param name="version">Result version</param>
    
            Process p = new Process();               
    
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.FileName = appPath;
            p.StartInfo.Arguments = targetPath + " -n";
            p.Start();
    
            //read svnversion.exe result
            string output = p.StandardOutput.ReadToEnd();
            p.WaitForExit();
    
            output = output.Replace("M", "");
            output = output.Replace("S", "");
            output = output.Replace("P", "");
    
            //valid results
            //4123:4168     mixed revision working copy
            //4168M         modified working copy
            //4123S         switched working copy
            //4123P         partial working copy, from a sparse checkout
            //4123:4168MS   mixed revision, modified, switched working copy            
    
            return long.TryParse(output, out version);
        }
    
  4. そして、偽のメソッドの完全なソースコードを変更します

確かにその汚い回避策ですが、それは役立つことがあります。svnversion.exeの結果に注意してくださいGetVersionHackは理想的ではありません。

于 2013-02-04T10:42:49.407 に答える
0

絶対パスについて文句を言う場合は、代わりにuncパスを定義してみてください。svnリポジトリであるD:\ドライブを共有します。次に、を使用してアクセスします

    var RootPath="\\<servername>\D$";
于 2013-02-07T22:11:52.620 に答える