我正在尝试使用SharpSVN自动化Subversion签入,但我在使用SvnClient.Add()方法时遇到了问题,我认为这可能是一个错误。从本质上讲,.Add()不会将路径视为工作副本,然而,SvnClient.GetUriFromWorkingCopy()会很好地看到它。看起来.Add()查找的目录比它应该查找的目录高了1个目录,并且我似乎不能通过使用来欺骗.Add()。或者..。
我的代码证明如下。通过将路径指向工作副本的顶层进行复制,然后运行。感谢任何人的帮助!
static void Main(string[] args)
{
string PathToTest = @"C:\temp\sqlcompare";
SvnClient client = new SvnClient();
SvnAddArgs saa = new SvnAddArgs();
saa.Force = true;
saa.Depth = SvnDepth.Infinity;
Console.WriteLine(PathToTest);
Console.WriteLine(client.GetUriFromWorkingCopy(PathToTest));
try
{
client.Add(PathToTest, saa);
Console.WriteLine(@"Success");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadKey();
}以及由此产生的输出:
C:\temp\sqlcompare
https://thisismycompanyname.svn.cvsdude.com/project/soltuionname/trunk/Database/
'C:\temp' is not a working copy添加尾随斜杠也不起作用:
C:\temp\sqlcompare\
https://thisismycompanyname.svn.cvsdude.com/project/soltuionname/trunk/Database/
'C:\temp' is not a working copy发布于 2012-08-22 00:40:56
在本地路径成为工作副本之前,您需要一个.Checkout()调用(或与另一个客户端的某种签出)。您只能将目录添加到现有工作副本。
在SharpSvn中,这个规则唯一的小例外是SvnClient.Import(),它实际上是'svn import‘(SvnClient.RemoteImport),后跟'svn checkout --force’。
发布于 2012-09-24 22:01:42
文档在这一点上并不清楚,但是如果您看一下SharpSvn.SvnDepth枚举,您可以做出一些有根据的猜测。目前还没有办法调用SvnClient.Add(targetPath)并让它尝试添加targetPath (targetPath/*)的所有子对象。对于此应该有一个SvnDepth。
另一个让我恼火的地方是,Add似乎没有应用工作副本的忽略列表。
因此,为了做你想做的事情,我建议这样做:
private void RecursiveAdd(SvnClient client, string targetPath, List<string> ignoreList)
{
foreach (var fileEntry in Directory.EnumerateFileSystemEntries(targetPath))
{
if (ignoreList.Any(fileEntry.Contains))
continue;
Runtime.ActiveLog.Info(fileEntry);
client.Add(fileEntry, new SvnAddArgs()
{
Depth = SvnDepth.Empty,
Force = true
});
if (Directory.Exists(fileEntry))
RecursiveAdd(client, fileEntry, ignoreList);
}
}
public AddPath(string targetPath)
{
using (var client = new SvnClient())
{
var ignoreList = GetIgnore(targetPath);
RecursiveAdd(client, targetPath, ignoreList);
}
}它仍然需要错误处理和通用代码改进(例如,围绕忽略列表),但它应该让人明白这一点。
发布于 2014-12-03 02:35:43
这对我很有效。它应该将本地签出的文件夹与SVN中的文件夹同步:
string _localCheckoutPath = @"C:\temp\sqlcompare";
SvnClient client = new SvnClient();
Collection<SvnStatusEventArgs> changedFiles = new Collection<SvnStatusEventArgs>();
client.GetStatus(_localCheckoutPath, out changedFiles);
//delete files from subversion that are not in filesystem
//add files to suversion , that are new in filesystem
foreach (SvnStatusEventArgs changedFile in changedFiles)
{
if (changedFile.LocalContentStatus == SvnStatus.Missing)
{
client.Delete(changedFile.Path);
}
if (changedFile.LocalContentStatus == SvnStatus.NotVersioned)
{
client.Add(changedFile.Path);
}
}
SvnCommitArgs ca = new SvnCommitArgs();
ca.LogMessage = "Some message...";
client.Commit(_localCheckoutPath, ca);https://stackoverflow.com/questions/11659867
复制相似问题