C# - SharpSVN
설명
- 닷넷에서 SVN을 조작하기 위한 라이브러리
- SVN 서버의 버전과 맞추어야 한다.
- 공식 홈페이지는 http://sharpsvn.open.collab.net/
- 1.7, 1.8 용은 NuGet으로 받을 수 있다.
- SharpSVN 라이브러리는 32비트,64비트로 나누어지는데 선택에 따라서 명시적으로 프로젝트의 32 or 64비트를 결정해야한다. AnyCPU로 하면 빌드 시 경고 발생.
사용 법
- 닷넷 프레임워크 4.0 이상에서는 아래의 내용을 설정 파일(app.config)에 입력해야 한다.
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
- 체크 아웃, 커밋 예
using (SvnClient client = new SvnClient())
{
client.CheckOut(new Uri("svn://172.20.60.201/svn_program_v2/Doc"),
svnPath);
Collection<SvnStatusEventArgs> changedFiles = new Collection<SvnStatusEventArgs>();
client.GetStatus("D:\\Test\\sharpsvn", out changedFiles);
//delete files from subversion that are not in filesystem
//add files to subversion that are new in filesystem
//modified files are automatically included as part of the commit
foreach (SvnStatusEventArgs changedFile in changedFiles)
{
if (changedFile.LocalContentStatus == SvnStatus.Missing)
{
// SVN thinks file is missing but it still exists hence
// a change in the case of the filename.
if (System.IO.File.Exists(changedFile.Path))
{
SvnDeleteArgs changed_args = new SvnDeleteArgs();
changed_args.KeepLocal = true;
client.Delete(changedFile.Path, changed_args);
}
else
client.Delete(changedFile.Path);
}
if (changedFile.LocalContentStatus == SvnStatus.NotVersioned)
{
client.Add(changedFile.Path);
}
}
SvnCommitArgs ca = new SvnCommitArgs();
ca.LogMessage = "lol";
client.Commit("D:\\Test\\sharpsvn", ca);
}
- 업데이트와 (현재 디렉토리)리비전 번호 알기
static public bool Update(string dirFullPath)
{
// dirFullPath는 이미 체크아웃을 한 디렉토리이며, 거북이SVN으로 업데이트도 되는 디렉토리임
using (var client = new SharpSvn.SvnClient())
{
// 업데이트
bool isResult = client.Update(dirFullPath);
// 리비전 번호를 얻는다.
var workingCopyClient = new SharpSvn.SvnWorkingCopyClient();
SharpSvn.SvnWorkingCopyVersion version;
workingCopyClient.GetVersion(dirFullPath, out version);
var revision = version.End;
}
}
- 예제 코드 https://gist.github.com/1450092/57f54fdbc4e84bf845a46a225de6145d6d51acdb
이 글은 2019-03-23에 작성되었습니다.