C#中关于SVN 的误操作,求帮助

使用C#代码追加和提交文件到SVN服务器
windows系统下使用svn的命令需要安装一个插件,下载地址:
安装后程序会自动把安装目录下的bin文件夹设置到系统的环境变量中,为了svn的commit命令可用,我们需要手动配置一下
SVR_EDITER这个环境变量,变量的值是notepad。然后重启电脑(我在安装后就是重启电脑后才生效的)。
c#的具体代码如下:
private void UseCommandUploadFileToSVN()
string strTempPath = Path.GetFullPath("../YourFolder");
// 路径不存在直接返回
if (!Directory.Exists(strTempPath))
// 把文件设置为添 状态
Process p = new Process();//实例化进程对象
p.StartInfo.FileName = "svn";
p.StartInfo.Arguments = " add " + strTempPath + " --force";
p.Start();
p.WaitForExit();
// add命令执行结束后执行commit命令
if (p.HasExited)
// 把文件提交到SVN服务器
Process pr = new Process();//实例化进程对象
pr.StartInfo.FileName = "svn";
pr.StartInfo.Arguments = " ci -m '' " + strTempP
pr.Start();
pr.WaitForExit();
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。java如何对svn进行操作?-CSDN论坛
java如何对svn进行操作?
目前我手上的项目需要使用到svn,而项目经理要求采用第三方插件的形式来对svn进行操作。
现在的要求是这样的:
1、系统管理员添加用户进入系统,同时把这个添加到svn的用户中。目前采用的方式是直接操作本地的svn配置文件(svn服务器和系统服务器在同一机器上)
2、用户修改密码,系统自动同步密码到svn,目前而是采用更改配置文件的方式。
3、用户登录后,查看svn库中的文件,目前使用了SVNkit,查看的操作基本没有问题。
我想问的是,各位大牛有没有使用过SVNkit这东西,它能不能对svn服务器上的用户进行操作呢?主要就是对svn服务器的用户进行增删改插的操作。如果这个东东没得这个功能的话,那各位又是怎么用java对svn用户进行操作呢(修改配置文件就免了吧,因为我觉得这绝对不是一个好的解决方案)。还请各位大大能为小弟解惑!
顶也有分哦~
http://svnkit.com/怎么访问不了:(能访问的话下个文档看一下就知道了。
这个上面也没有明确说明,http://en.wikipedia.org/wiki/SVNKit
引用&1&楼&sdliubo&的回复:http://svnkit.com/怎么访问不了:(能访问的话下个文档看一下就知道了。
这个上面也没有明确说明,http://en.wikipedia.org/wiki/SVNKit
能访问的,可能是你的网速问题。
vistualsvn有管理用户的工具。
http://wenku.baidu.com/view/2f649b665881.html
只能去看看svnKit的开发指南。。看了&应该能解决你的问题
引用&4&楼&kouyisc&的回复:http://wenku.baidu.com/view/2f649b665881.html
只能去看看svnKit的开发指南。。看了&应该能解决你的问题
看了,谢谢。但是里面只有对svn的库文件操作方法,没有对svn用户的操作,现在的我就是想用java通过svnkit对svn的用户进行操作,不知道有没有这样的方法。
SVNKit&提供以下功能:
与Subversion仓库一起工作(例如:访问仓库中的数据)
创建一个本地仓库
在工作拷贝上进行操作
给本地数据加上版本控制
复制已存在的仓库
将仓库内容转化为适于移动设备存储的格式化的数据流
将适于移动设备存储的格式化的数据流加载到仓库
检查本地仓库
submin提供了svn的web管理接口:&包括用户管理
看看能不能帮到你。。。
对于楼主的问题以前也有想过,以前我们就是直接在配置文件里对用户信息操作的,
学习,帮顶!
引用&7&楼&kouyisc&的回复:submin提供了svn的web管理接口:&包括用户管理
http://m.oschina.net/news/747#/p/submin
看看能不能帮到你。。。
可能忘了说了,我的SVN服务器是架在Win2003&server上的,submin是linux的,所以不是和适合我现在的要用的。多谢了!
帖子沉了,难道就没有哪位大神用JAVA操作过SVN的服务器吗?求指教啊!
引用&11&楼&pmlxp&的回复:友情帮顶
谢谢了~沉了好几天,怎么就没大神来帮忙看下呢。
没有用过!学习帮顶
就没大神进来看看吗?
唉,问题依旧没解决。结贴了~
回复Subversion是一個文件版本管理工具, 廣泛的被大家採用來作為源代碼版本管理.已有的工具不管是其自帶的命令行工具還是Windows UI的tortoiseSVN等還是很方便實用的, 但是如果想跟已有的系統整合的話,除了用其內建的Hook Script功能外,必然要使用SVN的API,這個API是用C寫的, 所以對於其他開發語言來說如java, C#等使用起來不方便.於是就有了SVN Client的java實現,或者是用其他語言對C接口的DLL包裝了一層的代碼(參考SWIG),這樣我們就可以方便的使用其他語言來與SVN repository 進行溝通了SharpSvn就是 .net平台的一個SVN API的實現, 其被廣泛採用到&等工具中, 可以被用來擴展為自定義的訪問SVN的Client, 或者用來跟其他系統如Bug/CR追踪等進行整合.&下面是一位網友整理的一個簡單的指南,類似hello world,&告訴我們如何開始使用Sharp SVNThe SharpSvn library basically gives you a .NET interface to all the operations that you would normally perform through a tool like TortoiseSVN.I found myself needing this exact library while writing a tool that changes files that have been checked out from SVN.The problem with manipulating files that are under SVN is that you need to be careful about renaming files (and sometimes even deleting). If you don’t do it through the SVN api then you will end up with duplicates files/folders in SVN since SVN thinks that it’s a new file.To solve this I finally got a chance to crack open the SharpSVN library which is used by my favourite AnkhSVN.1. Download the latest library from&. You have to pick between either 1.5 or 1.6. I went with 1.6 and didn’t run into any issues. I think this is based on the version of the SVN server that your connecting to.2. In your Visual Studio project add a reference to the following assemblies.&- SharpSvn.dll&- SharpSvn.UI.dll (Only needed if you need the UI to prompt for login)3. If like me your building on a 64 bit OS and you want your app to run on a 32 bit OS, make sure the project that references the SharpSvn.dll is set to Build for the x86 Platform. (Build –& Configuration Manager – Solution Platform)4. Write your code using the SvnClient object. Here are some samples from the SharpSvn Wiki and some that I wrote.&ShowLog操作&using&(SvnClient&client&=&new&SvnClient())&&&&&&&&&&&&{&&&&&&&&&&&&&&&&//client.Authentication.Clear();&&&&&&&&&&&&&&&&client.Authentication.UserNamePasswordHandlers&+=&new&EventHandler&SharpSvn.Security.SvnUserNamePasswordEventArgs&(&&&&&&&&&&&&&&&&delegate(Object&s,&SharpSvn.Security.SvnUserNamePasswordEventArgs&ee)&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&ee.UserName&=&"你的帳號";&&&&&&&&&&&&&&&&&&&&ee.Password&=&"你的密碼";&&&&&&&&&&&&&&&&});&&&&&&&&&&&&&&&&client.Authentication.SslServerTrustHandlers&+=&new&EventHandler&SharpSvn.Security.SvnSslServerTrustEventArgs&(&&&&&&&&&&&&&&&&delegate(Object&ssender,&SharpSvn.Security.SvnSslServerTrustEventArgs&se)&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&//&Look&at&the&rest&of&the&arguments&of&E&whether&you&wish&to&accept&&&&&&&&&&&&&&&&&&&&//&If&accept:&&&&&&&&&&&&&&&&&&&&se.AcceptedFailures&=&se.F&&&&&&&&&&&&&&&&&&&&se.Save&=&true;&//&Save&acceptance&to&authentication&store&&&&&&&&&&&&&&&&});&&&&&&&&&&&&&&&&this.txtLog.Text&+=&DateTime.Now.ToLongTimeString()&+&"\r\n";&&&&&&&&&&&&&&&&SvnLogArgs&logArgs&=&new&SvnLogArgs();&&&&&&&&&&&&&&&&logArgs.Range&=&new&SvnRevisionRange(long.Parse(this.txtRevisionFrom.Text),&long.Parse(this.txtRevisionTo.Text));&&&&&&&&&&&&&&&&logArgs.RetrieveAllProperties&=&true;&&&&&&&&&&&&&&&&EventHandler&SvnLogEventArgs&&logHandler&=&new&EventHandler&SvnLogEventArgs&(delegate(object&lo,&SvnLogEventArgs&le)&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&foreach&(SvnChangeItem&changeItem&in&le.ChangedPaths)&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&this.txtLog.Text&+=&string.Format(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"{0}&{1}&{2}&{3}&{4}\r{5}&{6}",&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&changeItem.Action,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&changeItem.Path,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&changeItem.CopyFromRevision,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&changeItem.CopyFromPath,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&le.Author,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&le.LogMessage,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&le.Revision);&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&});&&&&&&&&&&&&&&&&client.Log(new&Uri(&a&href="https://url"&https://url&/a&),&logArgs,&logHandler);&&&&&&&&&&&&&&&&this.txtLog.Text&+=&DateTime.Now.ToLongTimeString()&+&"\r\n";&&&&&&&&&&&&}&&using&(SvnClient&client&=&new&SvnClient())&&&&&&&&&&&&{&&&&&&&&&&&&&&&&//client.Authentication.Clear();&&&&&&&&&&&&&&&&client.Authentication.UserNamePasswordHandlers&+=&new&EventHandler&SharpSvn.Security.SvnUserNamePasswordEventArgs&(&&&&&&&&&&&&&&&&delegate(Object&s,&SharpSvn.Security.SvnUserNamePasswordEventArgs&ee)&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&ee.UserName&=&"你的帳號";&&&&&&&&&&&&&&&&&&&&ee.Password&=&"你的密碼";&&&&&&&&&&&&&&&&});&&&&&&&&&&&&&&&&client.Authentication.SslServerTrustHandlers+=&new&EventHandler&SharpSvn.Security.SvnSslServerTrustEventArgs&(&&&&&&&&&&&&&&&&delegate(Object&ssender,&SharpSvn.Security.SvnSslServerTrustEventArgs&se)&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&//&Look&at&the&rest&of&the&arguments&of&E&whether&you&wish&to&accept&&&&&&&&&&&&&&&&&&//&If&accept:&&&&&&&&&&&&&&&&&&se.AcceptedFailures&=&se.F&&&&&&&&&&&&&&&&&&se.Save&=&true;&//&Save&acceptance&to&authentication&store&&&&&&&&&&&&&&&&});&&&&&&&&&&&&&&&&client.CheckOut(&&&&&&&&&&&&&&&&&&new&Uri("https://yourSVN-Server:8443/svn/prd/UTL/trunk/ExcelPool"),&//SVN&repository&url&&&&&&&&&&&&&&&&&&@"c:\wc");&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//local&direcotory&&&&&&&&&&&&}&Add&new&files&to&the&working&copyusing(SvnClient&client&=&new&SvnClient()){&&SvnAddArgs&args&=&new&SvnAddArgs();&&//&TODO:&Set&optional&settings&on&args&&client.Add(@"C:\file\in\workingcopy",&args);&&}
阅读(...) 评论()如何使用svn管理一个C#项目?_百度知道
如何使用svn管理一个C#项目?
人刚接触svn,想使用svn来管理,有3个人一起开发的,我想知道如何使用svn来管理,让每人都能同时开发,而且每个人都不能拿到完整的源代码,还不会用,我们现在我有一个C#的winform项目
我有更好的答案
4,改为在需要测试时手动执行这个脚本。) 总体思路就是这样了,里面每一步的实现细节就要靠你自己去查资料了。如果自动编译、通过SVN服务器端的post-commit钩子调用这个脚本;2;3;7、增加一个代码库的管理员用户;5,这个用户拥有所有文件夹的读取权限,但不要让其它项目组成员知道这个用户的密码要达成你的目的,需要做以下几件事,所有人的测试都在这些测试环境中进行:1,实现每次commit后就自动将最新代码部署到测试环境。(当然,也可以不用post-commit钩子,让每个人的工作成果尽量不要存放在同一个文件夹内;6、搭建一个SVN服务器,为你的项目建立一个代码库,每次commit后就自动会自动执行这个脚本、部署难以实现,可以在项目组中设置一个配置管理员、搭建一个或几个项目组统一的测试环境,让每个人只能访问自己的工作成果所在的文件夹、设置SVN服务器的访问权限,以代码库管理员用户的身份自动从SVN服务器上取出最新的代码,由他手动完成这些事情。 另外,要完美实现上述操作,就必然用到SVN的分支/标记功能、设计一个脚本,通过这个脚本,实现源代码的自动编译,并自动部署到测试环境、规划人员分工和代码库的目录结构
采纳率:73%
用SVN的话~是不能同时修改同一文件的而且~写完该代码后需要上传更新SVN的版本号~不能拿到完整代码~应该是不行的~不然别人怎么编译~测试?不过你可以把项目划分为多个解决方案~独立起来就行了~SVN自身是有权限管理的
一般都能拿到完整的代码的吧
为您推荐:
其他类似问题
您可能关注的内容
svn的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。获取 SharpSvn 执行 svn 操作的实时日志
来源:博客园
1 获取 SharpSvn 操作日志的方式
之前一篇随笔()讲到可以通过声称一个绑定到一个 SvnClient 对象的 SvnClientReport 对象。为了说明方便,将对应的程序片段再次写在下面,

using (SvnClient client = new SvnClient())
{
StringBuilder strBuilder = new StringBuilder();
SvnClientReporter reporter = new SvnClientReporter(client, strBuilder);
}

该程序片段使用一个 StringBuilder 对象来声称 SvnClientReport 对象。这样子,我们只能等到执行 svn 操作之后才能从 StringBuilder 对象中获取所有操作日志。如果执行的 svn 操作比较耗时(例如 commit 上千个文件),我们不能够实时地获取 SharpSvn 执行 svn 操作的日志,我们会以为程序卡住了。那么,如何实时获取 SharpSvn 操作的日志?
2 实时获取 SharpSvn 操作日志
首先, 获取 SharpSvn 执行 svn 操作日志只能通过声明 SvnClientReport 对象。这是我们的出现点,那么怎样声明一个实时获取操作日志的 SvnClientReport 对象?先看一下 SvnClientReport 类的构造函数(参考http://docs.sharpsvn.net/current/),

SvnClientReporter(SvnClient, TextWriter);
SvnClientReporter(SvnClient, StringBuilder);
SvnClientReporter(SvnClientArgs, TextWriter);
SvnClientReporter(SvnClientArgs, StringBuilder);
SvnClientReporter(SvnClient, StringBuilder, IFormatProvider);
SvnClientReporter(SvnClientArgs, StringBuilder, IFormatProvider);

通过 SvnClientReport 类的构造函数,我们可以看出我们只能使用一个 StringBuilder 或者 TextWriter 对象来声明一个 SvnClientReport 对象。上一节我们已经看到通过 StringBuilder 对象是无法实时获取 SharpSvn 操作日志的了,那我们只能从 TextWriter 下手了。
通过http://msdn.microsoft.com/zh-cn/library/ywxh2328%28VS.80%29.aspx,我们看到 TextWriter 是一个抽象类,那么我们是不是就可以通过定义一个TextWriter 派生类来实现我们实时获取 SharpSvn 操作日志呢?!
下面实现的 MyRealTimeTextWriter 类继承了抽象类 TextWriter,实现了属性 Encoding(必须实现),并且覆盖实现了 void Write(string) 和void WriteLine(string value) 两个方法,这两个方法通过触发 DataReceived事件告知外界其接收到的数据。

class MyRealTimeTextWriter : TextWriter
{
//TextWriter派生类必须实现
public Encoding Encoding
get { return Encoding.UTF8; }
//接收到数据,就触发该事件
public event Action&string& DataR
private void OnDataReceived(string value)
if (DataReceived != null)
DataReceived(value);
}
 
public override void Write(string value)
OnDataReceived(value);
public override void WriteLine(string value)
OnDataReceived(value);
}
}

有了 MyRealTimeTextWriter 类之后,我们就可实现下面的程序来实时获取 SharpSvn 操作的日志。

using (SvnClient client = new SvnClient())
{
MyRealTimeTextWriter realtimeTextWriter = new MyRealTimeTextWriter();
realtimeTextWriter.DataReceived += new Action&string&(
delegate (string value)
/* do on the sharpsvn operation logs */
SvnClientReporter reporter = new SvnClientReporter(client, realtimeTextWriter);
/* do svn operations
*/
}

上面程序通过一个 MyRealTimeTextWriter 对象来生成 SvnClientReport 对象。每当 SharpSvn 操作产生一条日志信息时就会调用 MyRealTimeTextWriter 对象的 Write(string) 或 WriteLine(string) 方法,而这两个方法立即触发 DataReceived 事件告知外面有日志生成了,于是便达到了实时获取 SharpSvn 操作日志的目的。
(done)
免责声明:本站部分内容、图片、文字、视频等来自于互联网,仅供大家学习与交流。相关内容如涉嫌侵犯您的知识产权或其他合法权益,请向本站发送有效通知,我们会及时处理。反馈邮箱&&&&。
学生服务号
在线咨询,奖学金返现,名师点评,等你来互动}

我要回帖

更多关于 帮助别人却被误解 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信