Github 桌面比较脚本

Github Desktop Comparison Script

所以,我们有这个程序,我们的 'version control' 至少在过去的三四年里,每次我们进行更改时,都会简单地为项目的另存为版本添加日期戳。显然,这是不可持续的。最近,我们已经能够开始为我们的所有项目迁移到 Github,我也想这样做。

不幸的是,code/project 的保存版本最终成为 xml 文件的压缩版本,没有换行符。不太容易比较。我找到了一种基于命令行进行比较的方法,使用 gitconfig 和 git 属性更新以及一些外部脚本,它在那个环境中运行良好。

但我们主要使用(企业)网站和 Github 桌面来满足我们的需求。而且这个过程似乎并不适用于那些环境。

所以问题是——有什么方法可以在 GitHub 网页或 GitHub 桌面环境中设置比较脚本?

作为参考,我发现 windows 格式的命令行 / git 的页面是 https://www.theorycrafter.org/quipu/order-to-chaos-version-control-and-transformations/,程序是 Kofax Transformation Modules。

使用 Github Desktop

修改二进制差异

Github Desktop 似乎没有能力直接从界面执行此操作。您要做的是另外安装 git,按照文章中的说明进行操作,然后从 Github 桌面,您可以单击 Repository > Show in Explorer,然后右键单击该文件夹并选择 Git GUI Here,您可以使用它来查看差异。

KTM 项目中用于粒度更改的外部文件

当您查看 KTM 项目文件 (.fpr) 的 xml 内容时,您会看到项目中的脚本,以及项目定义的所有内部结构。有些可能像字段一样是可以理解的,但许多其他的可能不是。无论哪种方式,您都无法有选择地合并更改(如文章所述)。因此,从本质上讲,您仍然会为每个更改签入整个项目。如果您希望能够更细化,您可能会考虑使用不同的方法来代替本文建议的方法,甚至可以作为本文建议的补充方法。

脚本: 你可以将你的脚本复制到单独的文本文件中,然后可以对它们进行正常的比较和合并,因为你知道你可以复制将合并的脚本返回到项目中。更新:KTM 6.1 Service Pack 1 (6.1.1) 向代码 window 引入了一个菜单选项以轻松执行此操作(工具 > 保存所有脚本)。

定位器: Project Builder 允许您export/import 将特定定位器配置到文件中。您将无法对这些进行比较或合并,但是,如果您确定定位器在进行特定更改后产生更差的结果,则可以从之前的签入中导入特定定位器,而不是还原整个项目。

编程方法: 可以调用下面的脚本函数为每个包含 class 脚本的 class 导出一个文件,以及每个定位器的导出脚本定位器无法导出,但它们也没有太多配置:它们背后的脚本包含在它们的 class 脚本中。您可以根据需要 运行 函数,但为了简单起见,我的建议是每次在 Project Builder 中测试文档时都使用它 运行。因此,任何时候您测试提取文档时,这些外部文件都是最新的并且可以提交任何更改。

Public Sub Design_ExportScriptAndLocators()
   Dim ClassIndex As Long
   Dim Path As String
   ' You could hard code a path if you did not want to use script variables
   Path=Project.ScriptVariables("Dev_ExportPath")

   ' Make sure you've added the Microsoft Scripting Runtime reference
   Dim fso As New Scripting.FileSystemObject
   If Not fso.FolderExists(Path) Then Exit Sub

   ' Here we use class index -1 to represent the special case of the project class
   For ClassIndex=-1 To Project.ClassCount-1
      Dim KTMClass As CscClass, ClassName As String, ScriptCode As String

      ' Get the script of this class
      If ClassIndex=-1 Then
         Set KTMClass=Project.RootClass
         ScriptCodPe=Project.ScriptCode
      Else
         Set KTMClass=Project.ClassByIndex(ClassIndex)
         ScriptCode=KTMClass.ScriptCode
      End If

      ' Get the name of the class
      ClassName=IIf(ClassIndex=-1,"Project",KTMClass.Name)

      ' Export script to file
      Dim ScriptFile As TextStream
      Set ScriptFile=fso.CreateTextFile(Path & "\Script-" & ClassName & ".txt",True,False)
      ScriptFile.Write(ScriptCode)
      ScriptFile.Close()

      ' Export locators (same as from Project Builder menus)
      Dim FileName As String
      Dim LocatorIndex As Integer
      For LocatorIndex=0 To KTMClass.Locators.Count-1
         If Not KTMClass.Locators.ItemByIndex(LocatorIndex).LocatorMethod Is Nothing Then
            FileName="\" & ClassName & "-" & KTMClass.Locators.ItemByIndex(LocatorIndex).Name & ".loc"
            KTMClass.Locators.ItemByIndex(LocatorIndex).ExportLocatorMethod(Path & FileName,Path)
         End If
      Next
   Next
End Sub

在 Project Builder 中测试文档提取时的示例调用:

Private Sub Document_AfterExtract(ByVal pXDoc As CASCADELib.CscXDocument)
   ' Only when run in Project Builder...
   If Project.ScriptExecutionMode=CscScriptExecutionMode.CscScriptModeServerDesign Then
      ' Update external script and locator files added to source control
      Design_ExportScriptAndLocators()
   End If
End Sub

没有完美的解决方案可以像简单代码一样在源代码管理中存储 KTM 项目或 KC 批处理 classes,但这至少可以让您更细粒度地查看签入的更改以及能够更精细地还原更改。