SharpSvn的多文件更新与提交


在一些自动化流程里,需要对SVN进行一些操作,再看了一些关于SharpSvn的demo和文章之后,发现基本都是对单文件进行的操作,对于多文件的一次提交基本没有,除此之外,还有对文件的删除操作,更是寥寥无几,
因此记录一下SharpSvn对于多文件的操作(一次提交中包含多个问价的增删改)

SharpSvn

下载地址:https://github.com/AmpScm/SharpSvn
也可以直接从nuget安装
官方文档:https://sharpsvn.open.collab.net/docs/walkthrough.htm

SVN 操作(SharpSvn)

Update 更新文件

调用update即可

using (SvnClient client = new SvnClient())
            {
                SvnStatusArgs sa = new SvnStatusArgs();
                sa.Depth = SvnDepth.Children; // Adjust this to check direct files,or (recursive) directories etc

                Collection<SvnStatusEventArgs> statuses;
                bool isok = false;
                try
                {
                    isok = client.Update(selectPath);
                }
                catch (Exception)
                {
                    isok = false;
                }

                if (!isok)
                {
                    MessageBox.Show("SVN路径错误,请重新选择");
                }
                else
                {
                    svnPath = selectPath;
                }

                return isok;
            }

Commit 提交文件

提交文件比较复杂一点,需要判断文件的状态(主要三种状态,修改,新增,删除)
新增文件需要使用Add,然后再进行commit

删除状态的文件,需要先Delete,然后进行commit

修改状态的文件可以直接 commit,不需要进行操作。

那么如何获取文件状态呢?client.GetStatus(svnPath, out list);获取修改列表,然后对文件状态进行判断,
NotVersioned 状态是新文件,add,
Missing 状态是删除文件,Delete,
Modified 状态是修改,不需要操作

最后进行一次Commit即可

如果没有新文件没有add,commit会报错
如果对modified 的文件进行delete,delete会报错

总结
删除的文件必须要delete再提交,
增加和修改的文件都可以进行Add
因此使用GetStatus 获取所有文件更改状态,然后分别操作,最后commit

完整提交代码参考:

  public static bool Commit()
        {
            using (SvnClient client = new SvnClient())
            {
                SvnCommitResult commitResult = null;
                SvnCommitArgs svnCommitArgs = new SvnCommitArgs();
                svnCommitArgs.Depth = SvnDepth.Empty;
                svnCommitArgs.LogMessage = "增删改的综合提交测试";

                var changeList = ChangeFilesOperate();
                commitOK = client.Commit(changeList, svnCommitArgs);

                if (!commitOK)
                {
                    MessageBox.Show("SVN提交失败,请手动SVN提交");
                }

                return commitOK;
            }
        }
        
         /// <summary>
        /// 对所有增加删除修改的文件进行 对应的操作
        /// </summary>
        /// <returns></returns>
        public static List<string> ChangeFilesOperate()
        {
            List<string> ChangeFilePath = new List<string>();

            using (SvnClient client = new SvnClient())
            {
                Collection<SvnStatusEventArgs> list = new Collection<SvnStatusEventArgs>();
                client.GetStatus(svnPath, out list);
                foreach (SvnStatusEventArgs eventArgs in list)
                {
                    var state = eventArgs.LocalContentStatus;
                    //从eventArgs中获取每个变更文件的相关信息,针对不同状态操作

                    if (state == SvnStatus.Missing)
                    {
                        client.Delete(eventArgs.FullPath);
                    }
                    if (state == SvnStatus.NotVersioned)
                    {
                        client.Add(eventArgs.FullPath);
                    }
                    //修改状态直接提交即可
                    ChangeFilePath.Add(eventArgs.FullPath);
                }
            }

            return ChangeFilePath;
        }

注意事项

(重要的事情说三遍):
删除SVN文件,需要先Delete,然后进行commit

删除SVN文件,需要先Delete,然后进行commit

删除SVN文件,需要先Delete,然后进行commit

如果不进行Delete,Commit不会提交删除文件的操作

效果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值