我们使用SharpSVN 1.5 dll作为源控制功能。 我们的结帐和CheckIn作为follws工作
假设我要签出文件夹名称TEST,其中包含3个文件,例如file1.txt,file2.txt,file3.txt
步骤1: - 从SVN存储库中检出file1.txt
第2步: - 从SVN存储库中检出file2.txt
第3步: - 从SVN存储库中检出file3.txt
在file1.txt结帐操作期间,在我们的工作文件夹中创建.svn文件夹。此.svn文件夹包含一个名为条目的文件。此文件包含svn存储库和结帐文件信息(我们可以通过记事本看到它打开)。当file2.txt结帐操作发生时(Checkout到同一个工作文件夹),没有新的.svn文件夹创建。 Sharpsvn使用现有的.svn fiolder(以前的文件checkout .svn文件夹)并将file2.txt信息附加到条目文件中。结帐file3.txt到同一个工作文件夹时也发生了同样的事情。
在签入操作期间,首先检查file1.txt然后是file2然后是file3。 Svn使用单个.svn文件夹(在工作文件夹中)来检查所有这些文件。在file1.txt检入期间,条目文件包含其信息,因此该文件属于svn版本控制,并且可以成功检查。类似方式file2。 txt和file3.txt
现在我们正在尝试使用SharpSVN 1.6 dll,但在结帐和签入操作方面遇到了一些问题。
在file1.txt checkout期间创建.svn文件夹,并且条目文件包含file1.txt信息。在file2.txt checkout期间,删除现有的.svn foder并创建新的.svn文件夹。所以条目仅包含file2.txt信息不是file1.txt信息。当我试图检查时,我从svn检出的最后一个文件只签到svn.This是因为.svn文件夹中的条目文件只包含最后检出的文件信息。
我需要使用sharpsvn 1.6 dll
将所有文件信息输入到条目文件中我的代码段如下
public string[] CheckOut(string pSCPath, string pComment, string pLocalPath, int pRevisionNum)// Checks out a file from svn
{
string[] strCheckoutDetails = new string[2];
Uri uriSCPath = new Uri(pSCPath);
SvnCheckOutArgs objChkoutargs = new SvnCheckOutArgs();
objChkoutargs.Revision = pRevisionNum;
SvnInfoEventArgs info;
try
{
objChkoutargs.Depth = SvnDepth.Empty;
string strSingleFiletoCheckout = uriSCPath.ToString();
string strFolderNameofSingleFileSelected = strSingleFiletoCheckout.Remove(strSingleFiletoCheckout.LastIndexOf('/'));
Uri UriSingleFileCheckout = new Uri(strFolderNameofSingleFileSelected);
_objSVNClient.CheckOut(uriSingleFileCheckout, pLocalPath,objChkoutargs); //empty working folder
SvnTarget target = new Uri(strSingleFiletoCheckout);
string strFileNameonlyfromUri = strSingleFiletoCheckout.Substring(strSingleFiletoCheckout.LastIndexOf("/") + 1);
if (!copyFiletoWorkingCopy(pLocalPath, strFileNameonlyfromUri, _objSVNClient)) //make versioned file available to the current working copy - Biju
{
pLocalPath = "";
throw new SharpSvn.SvnException("Checkout Exception");
}
_objSVNClient.GetInfo(uriSCPath, out info);
strCheckoutDetails[0] = info.LastChangeRevision.ToString();
}
catch (Exception ex)
{
pLocalPath = "";
throw ex;
}
strCheckoutDetails[1] = pLocalPath;
return strCheckoutDetails;
}
由于
Reji
答案 0 :(得分:2)
Subversion不支持直接签出文件。您可以做什么,以及在Subversion / SharpSvn 1.6中仍然有效的是:
这段示例代码检出一个空的工作副本,并获取file1.txt和file2.txt。如果您稍后获取file3.txt,则所有3个文件都在条目中,并且您可以对它们执行所有Subversion命令。
using(SvnClient client = new SvnClient())
{
SvnCheckOutArgs coArgs = new SvnCheckOutArgs();
coArgs.Depth = SvnDepth.Empty;
client.CheckOut(new Uri("http://server/repos/directory"), targetDir, coArgs);
SvnUpdateArgs updateArgs = new SvnUpdateArgs();
updateArgs.Depth = SvnDepth.Files;
client.Update(Path.Combine(targetDir, new string[] {"file1.txt", "file2.txt"}), updateArgs);
}