2012-02-14 5 views
0

をコミット私は私のローカルコピーにSharpSvnローカルファイル名の変更

の代わりSvn.Delete(Src) -> Svn.Add(Dst)をやって名前を変更するファイルの後に「コミット」を行うためにSharpSVNを使用しています。
私は、SVNを使用して、新しいターゲットに古いターゲットからServer-Side
で情報を移動し、私のファイルのリビジョン情報

にrename関数をトレース維持するために別の方法を使用します。 RemoteMove()機能。

Local-Sideの "svn-infos"はどのようにコピーできますか?

私のローカルファイルにcl.Move(src,dst)を実行しようとしましたが、
ですが、ソースファイルが見つからないというメッセージが表示されています。

private string SvnRepository = "http://svnserver/svn/repo/trunk/"; 

public void Start() { 
    System.IO.File.Move("c:\\LocalSvn\\1.txt", "c:\\LocalSvn\\2.txt"); 
    SvnRename("c:\\LocalSvn\\1.txt", "c:\\LocalSvn\\2.txt"); 
} 
private Uri RelativePath(string sFullPath) { 
    return new Uri(SvnRepository + sFullPath.Replace(Path, "").Replace('\\', '/').Substring(1)); 
} 
public void SvnRename(string sPath, string sOldPath) { 
    using (SvnClient cl = new SvnClient()) { 
     Uri UriFrom = RelativePath(sOldPath); 
     Uri UriTo = RelativePath(sPath);     
     cl.RemoteMove(UriFrom,UriTo 
      , new SvnMoveArgs { LogMessage = "Rename From:" + sOldPath + " To:" 
      + sPath }); 
     //Local 
    } 
} 

答えて

0

私はちょうど cl.Delete()cl.Add() は、ファイルの追跡を維持するために私を助けるために)ので、私はcl.RemoteMoveを(必要いけないファイル の歴史を維持することが判明しました!

1

SvnClient.Move()だけではユースケースのために働く必要があります。

は、ここに私のコードです。 Move()の呼び出しにディスク上の正確なケーシングが使用されていることを確認してください。

Subversionは大文字と小文字を区別します。 SvnTools.GetNormalizedFullPath()SvnTools.GetTruePath()は、わからないときに役立ちます。

1

を使用してから、注意してください:

cl.Delete(file) 
cl.Add(file) 

それがちょうど箱の外に動作しない場合があります。

file = "asdf" 

へ:たとえば、ファイルがから名前が変更された場合は

file = "Asdf" 

ローカルファイル維持する必要があります。そうでない場合は、その後の追加は失敗します

cl.Delete(file, new new SvnDeleteArgs() { KeepLocal = true }) 

をローカルファイル理由もはや利用可能でなく、もはや追加することができない。