删除TFS版本文件以及项目中的残留节点

本文介绍了一款用于清除Team Foundation Server (TFS) 版本控制相关文件和配置的小工具。该工具能删除 *.vssscc 和 *.vspscc 文件,并移除 *.sln 和 *.csproj 文件中与TFS相关的版本控制节点。
摘要由CSDN通过智能技术生成

项目开发过程中,为了提高开发效率,统一代码版本,方便管理,程序员都喜欢使用一些版本控制工具,如:SVNVSSTFSGit等。我这里使用的是TFS管理工具,由于是多年前的旧项目,TFS服务器早就GG了,每次打开都有提示

---------------------------
Microsoft Visual Studio
---------------------------
Team Foundation Server 版本控制


您正在打开的解决方案已绑定到以下 Team Foundation Server 上的源代码管理:  http://xxx.xxx.xxx。是否要联系此服务器以尝试启用源代码管理集成?
---------------------------
是(Y)   否(N)   帮助   
---------------------------

因此在网上查看了一些TFS资料后,写了个小工具,用来清除TFS版本控制相关文件和文件中的节点

Team Foundation Server

    // 删除TFS版本文件和TFS项目残留节点
    class Program
    {
        // 委托定义:带一个字符串的委托
        delegate void DWriteline(string message);
        // 委托方法
        static DWriteline m_Writeline = Console.WriteLine;

        // 入参文件路径
        static System.IO.DirectoryInfo m_DirectoryInfo;
        // 文件深度,默认等于2,最多是3
        static int m_Level;
        // 程序入口
        static void Main(string[] args)
        {
            do
            {
                m_Level = 2;
                /*
                 * 1.录入项目路径
                 * 2.删除所有的*.vssscc,*.vspscc文件
                 * 3.清除解决方案文件(*.sln)文件中的版本标记节点 
                 *      GlobalSection(TeamFoundationVersionControl) = preSolution 与  EndGlobalSection及其节点中的所有内容
                 * 4.清除项目文件(*.project)删除节点
                 *      <SccProjectName>???</SccProjectName>
                 *      <SccLocalPath>???</SccLocalPath>
                 *      <SccAuxPath>???</SccAuxPath>
                 *      <SccProvider>???</SccProvider>
                 */
                m_Writeline("请录入有效的项目路径(退出请输入X/x):");
                string folder = Console.ReadLine();
                if (folder.ToUpper() == "X")
                {
                    break;
                }

                if (CheckFolder(folder) == false)
                    continue;

                DeleteVersionSectionAndFile(m_DirectoryInfo, m_Level);

            } while (true);
        }
        // 检查路径是否有效
        static bool CheckFolder(string folder)
        {
            if (System.IO.Directory.Exists(folder.Replace("\"", "")) == false)
            {
                m_Writeline("无效的目录");
                return false;
            }
            m_DirectoryInfo = new System.IO.DirectoryInfo(folder.Replace("\"", ""));
            // 如果当前目录含(*.sln)文件则文件深度加一(项目深度默认深度为二)
            var sln = m_DirectoryInfo.GetFiles("*.sln");
            if (sln.Length == 0)
            {
                m_Level++;
            }

            return true;
        }
        // 删除版本节点和版本文件
        static void DeleteVersionSectionAndFile(System.IO.DirectoryInfo direcoryInfo, int level)
        {
            if (level > 0)
            {
                DeleteSlnVersionSection(direcoryInfo);
                DeleteProjectVersionSection(direcoryInfo);
                DeleteTFSVersionFile(direcoryInfo);

                var directories = direcoryInfo.GetDirectories();
                if (directories != null)
                {
                    level--;
                    foreach (var directory in directories)
                    {
                        DeleteVersionSectionAndFile(new System.IO.DirectoryInfo(directory.FullName), level);
                    }
                }
            }
        }
        // 删除解决方案中的版本节点
        static void DeleteSlnVersionSection(System.IO.DirectoryInfo direcoryInfo)
        {
            var sln = direcoryInfo.GetFiles("*.sln");
            foreach (var file in sln)
            {
                StringBuilder slnBuilder = new StringBuilder();
                System.IO.StreamReader slnReader = file.OpenText();
                string line;
                int flag = 0;
                int count = 0;
                do
                {
                    line = slnReader.ReadLine();
                    if (line == null)
                        break;

                    if (line.IndexOf("GlobalSection(TeamFoundationVersionControl)") > -1)
                    {
                        flag = 1;
                        count++;
                        continue;
                    }

                    if (flag == 1 && line.IndexOf("EndGlobalSection") > -1)
                    {
                        flag = 0;
                        continue;
                    }

                    if (flag == 0)
                    {
                        slnBuilder.AppendLine(line);
                    }
                }
                while (line != null);
                slnReader.Close();

                if (count > 0)
                {
                    System.IO.StreamWriter slnWriter = new System.IO.StreamWriter(file.FullName, false, Encoding.UTF8);
                    slnWriter.Write(slnBuilder.ToString());
                    slnWriter.Close();
                }
            }
        }
        // 删除项目文件中的版本节点
        static void DeleteProjectVersionSection(System.IO.DirectoryInfo direcoryInfo)
        {
            var sln = direcoryInfo.GetFiles("*.csproj");
            foreach (var file in sln)
            {
                StringBuilder slnBuilder = new StringBuilder();
                System.IO.StreamReader slnReader = file.OpenText();
                string line;
                int count = 0;//用于标记是否还有版本标记
                do
                {
                    line = slnReader.ReadLine();
                    if (line == null)
                    {
                        break;
                    }
                    if (line.IndexOf("<SccProjectName>") > -1 || line.IndexOf("<SccLocalPath>") > -1 || line.IndexOf("<SccAuxPath>") > -1 || line.IndexOf("<SccProvider>") > -1)
                    {
                        count++;
                        continue;
                    }
                    else
                    {
                        slnBuilder.AppendLine(line);
                    }
                }
                while (line != null);
                slnReader.Close();

                if (count > 0)
                {
                    System.IO.StreamWriter slnWriter = new System.IO.StreamWriter(file.FullName, false, Encoding.UTF8);
                    slnWriter.Write(slnBuilder.ToString());
                    slnWriter.Close();
                }
            }
        }
        // 删除版本文件
        static void DeleteTFSVersionFile(System.IO.DirectoryInfo direcoryInfo)
        {
            // 查找项目解决方案版本控制
            var vssscc = direcoryInfo.GetFiles("*.vssscc");
            foreach (var file in vssscc)
                System.IO.File.Delete(file.FullName);

            // 查找项目文件版本控制
            var vspscc = direcoryInfo.GetFiles("*.vspscc");
            foreach (var file in vspscc)
                System.IO.File.Delete(file.FullName);
        }
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值