private void UndoByGitCheckout() { GitExecuter gitExecuter = new GitExecuter(ExeFileHelper.GetGitExePath(), SolutionConfig.AbsolutePath); bool success = gitExecuter.Execute("checkout *.csproj", out string result, out string err); if (!success) { throw new InvalidOperationException($"哎呀,恢复 csproj 文件时出错了:{err}"); } success = gitExecuter.Execute("checkout *.sln", out string result2, out string err2); if (!success) { throw new InvalidOperationException($"哎呀,恢复 sln 文件时出错了:{err2}"); } }
private void CheckCanChange() { GitExecuter gitExecuter = new GitExecuter(ExeFileHelper.GetGitExePath(), SolutionConfig.AbsolutePath); bool success = gitExecuter.Execute("status", out string result, out string err); if (!success) { throw new InvalidOperationException(err); } if (result.Contains(".csproj")) { throw new InvalidOperationException("有尚未提交的对 csproj 文件的修改,请先撤销或者提交这些修改"); } if (result.Contains(".sln")) { throw new InvalidOperationException("有尚未提交的对 sln 文件的修改,请先撤销或者提交这些修改"); } }
private void ScanAllCsprojFileAndDo(Action <string> changeCsprojFileAction) { GitExecuter gitExecuter = new GitExecuter(ExeFileHelper.GetGitExePath(), SolutionConfig.AbsolutePath); // 有些工程的保存路径不按套路出牌,那就搜索全部git管理目录下的文件夹 DirectoryInfo rootDir = Directory.GetParent(gitExecuter.GitDir); Scan(rootDir); void Scan(DirectoryInfo dir) { foreach (FileInfo file in dir.GetFiles()) { if (file.Extension == ".csproj") { try { changeCsprojFileAction(file.FullName); } catch (Exception ex) { Message += $"#Fail : {file.Name}; {ex.Message}\n"; } } } foreach (DirectoryInfo innerDir in dir.GetDirectories()) { if (innerDir.Name.StartsWith(".")) { // .vs .git ignore continue; } Scan(innerDir); } } }