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

来源:互联网 发布:搜狐网络大厦it 编辑:程序博客网 时间:2024/05/17 08:12

项目开发过程中,为了提高开发效率,统一代码版本,方便管理,程序员都喜欢使用一些版本控制工具,如:SVN、VSS、TFS、Git等。我这里使用的是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);        }    }


原创粉丝点击