【问题标题】:How should I properly use Git for Visual FoxPro Development?我应该如何正确使用 Git 进行 Visual FoxPro 开发?
【发布时间】:2013-08-14 06:52:25
【问题描述】:

我是一名 Git 初学者。我正在阅读并尝试this Git tutorial。我还阅读了 Git 分支模型 herethis question on SO

但我仍然对如何在下面的案例中正确使用 Git 感到困惑:

  1. 我有一个项目MyProject01。我将在 PC 上处理它, PC01
  2. PC02 说,另一位坐在另一台 PC 上的开发人员将克隆项目 MyProject01(git clone、git pull 等),然后继续开发。
  3. 然后,这两个将被同步(可能git push 到 PC01,但我不确定)。例如,我正在 PC1 上处理 file.prg 以写入 function 1,而另一个开发人员正在 PC2 上处理同一文件 file.prg 以写入 function 2。这些将被合并以获得最终结果 - file.prgfunction 1function 2 完成。

我没有使用 Git 作为完整的版本控制,即版本将由我自己控制,例如 MyProject01MyProject02 等。Git 将为每个单独的目录使用 (git init)。我只想将 Git 用作我的 Visual FoxPro 桌面应用程序开发的多开发人员环境。

根据我的情况,我是否需要创建一个从repo01 克隆的裸存储库,如in the tutorial 所述; repo01 会是MyProject01

我认为我不适合上面描述的分支模型。请指导我正确的方式。
我正在使用the Git installer for Windows

[编辑]
我的主要目标是使用 Git 作为源代码控制,类似于:

【问题讨论】:

  • 在阅读了VFP Version Control with Mercurial的PDF之后,我决定使用Mercurial and TortoiseHg,因为(1)满足我对VFP 99%要求的文档(2)与Windows shell的良好集成(3)好和用户友好的 GUI 工具。这个问题最初是针对 Git 的,但我没有找到任何与 VFP 一起使用的 Git 分步指南。我发现a question and answers 对我选择 Mercurial 而不是 Git 很有帮助。

标签: windows git visual-foxpro


【解决方案1】:

我知道这是一个 10 个月的问题,但无论如何这肯定会有用。

从 2014 年 1 月开始,有一个新的 scctext(x).prg 替代品,称为 FoxBin2Prg,它可以将 VFP 9 二进制文件转换为文本(prg 样式的),并可以从这些文本中重新生成二进制文件。可用于 Diff 和 Merge 代码,可以修改生成的文本,并将更改反映在重新生成的二进制文件上。

它托管在 VFPx 项目上,位于以下网址: https://github.com/fdbozzo/foxbin2prg

实际上,我在一个 10 人的团队中使用它与 PlasticSCM 集成,而不需要阻止文件,即使在相同的表单和类上也使用并发开发。

最好的问候!

【讨论】:

    【解决方案2】:

    我没有使用 Git 作为完整的版本控制,即版本将由我自己控制,例如 MyProject01、MyProject02 等。Git 将为每个单独的目录使用 (git init)

    如果你只是想扔掉旧的历史,那为什么还要用 git 呢?

    如果您不想要历史,那么 diff 和 patch 也可以为您服务。在 git 中,除了在单个存储库中拥有多个分支外,还可以通过克隆存储库来创建多个工作副本。拥有多个分支允许您保留以前版本的历史记录,同时还允许您返回到以前的版本并进行修改;拥有多个工作副本允许您同时运行多个版本的程序或存储未签入但特定于版本的文件(例如 sqlite 数据库文件)。没有理由在每次创建新版本时都重置修订历史记录。

    (可能是 git push 到 PC01,但我不确定)

    是的,您可以这样做,因为在 DVCS 中,您可以从任何存储库推送或拉取到任何存储库(这是分布式 VCS 与集中式 VCS 的区别,另一个主要区别是在 DVCS 中,工作副本始终也是具有完整历史记录的存储库,而不仅仅是特定修订的快照)。话虽如此,建立一个裸存储库仍然是使代码共享更容易的好主意。如果 PC02 需要推送但 PC01 不在线,那么 PC02 必须等到 PC01 在线才能推送,始终在线的服务器上的裸存储库不会有这个问题。

    【讨论】:

    • 感谢您的回答。我不会丢弃旧的历史。目前,我手动执行此操作,即在发布 1.0 并准备使用 2.0 之后,我克隆文件夹 MyProject-1.0 并将其命名为 MyProject-2.0。项目文件夹中的每个文件都相同。所以,我有每一个古老的历史。我只想使用 Git 在副本之间进行同步和合并。我会保持我的自我控制版本风格。可能是我对项目文件夹中的单个文件使用 Git 版本(标签)。我是否在正确的轨道上使用 Git 来实现这个目的?
    • Same for every single file in the project folder
    • Same for every single file in the project folder utility-1.0.prg,当我想在该文件中进行更新时,我复制该文件并将其重命名为utility-2.0.prg。自过去 6 年以来,我一直在使用这种方式。因此,对于我所有现有项目,我很难完全进入 Git 糟糕的应该是工作流程。
    • 当我的团队坐在办公室里工作时,我们可以同时在服务器上为一个 Web 项目工作,只是我们不能同时编辑同一个文件。所以我们的 web 开发不需要这样的git pull/push/clone。但是对于桌面开发,我需要这个clone/pull/push 来为每个开发人员提供每个副本,因为不能同时打开同一个项目。
    • @Sithu:是的,这就是我所担心的。你失去了以这种方式保存历史的好处。你不能 git bisect,不能 git blame,不能跨版本获取 git diff,不能 git cherry pick,你没有正确的方法来解决旧版本的问题。您的工作流程虽然在 git 中可行,但并不比仅使用补丁和差异更好。你正在艰难地做事。有些事情需要改变,有时就是你自己。
    【解决方案3】:

    查看https://github.com/sait/vfpscm

    PRG 文件只是纯文本,您可以透明地使用 GIT 或 Mercurial。

    您在使用 Visual Forms (scx & sct) 和 Visual Classes (vcx & vct) 时遇到问题,因为这些文件是带有关联备忘录文件的 DBF 表;当您修改表单时,它会更改整个文件。

    GIT 可以完美地处理二进制文件,但您不会看到代码的差异,而这正是 SCM 的用途。

    我们创建这个程序: https://github.com/sait/vfpscm那个:

    1. 将您的表单和类转换为 XML,以便您可以将它们推送到存储库中,当您修改表单时,只需更改 XML 文件中的几行。
    2. 将 XML 文件重新转换为表单和类,以接收更改。

    所以使用常规git的过程改成这样:

    1. 编辑文件 PRGs
    2. 编辑可视类和表单
    3. 测试
    4. 一旦您的错误得到修复或功能准备就绪:
    5. 将类和表单转换为 XML(运行 VfpScm)
    6. 将文件 PRG 和 XML 添加到您的 Git (git add)
    7. 提交文件(git commit -m "messages")
    8. 将更改推送到存储库(git push -u origin master)

    您的团队需要提取这些更改并将它们添加到他们的本地副本中:

    1. 拉取更改(git pull origin master)
    2. PRG 和 XML 将被 Git 覆盖
    3. 重建已更改的表单和类(运行 VfpScm)

    GIT 配置为使用 .gitignore 忽略 SCX、SCT、VCX 和 VCT 文件,并且存储库仅包含 PRG 和 XMLs 文件

    自 5 年来,我们一直在使用 VFPSCM.exe 工具处理具有 300 个表单和 20 个类的大型项目,并且我们从未丢失任何代码,而且我们必须准备好 SCM,仅可视化所做的更改,以及提交历史,在我们的更改日志中转换。

    【讨论】:

      【解决方案4】:

      您可以将 Git 用于多个项目。为 project1 和 project2 创建两个文件夹,并将它们彼此分开。

      尝试在开始时使用 SmartGit。

      Git 不是传统的源代码控制系统。它是分布式源代码控制系统。我仍然建议您从一开始就使用 GitUI。

      是的,你应该有一个裸仓库。

      【讨论】:

      • 感谢您对 SmartGit 的建议。我仍然可以使用 Git Bash。
      • 我强烈建议反对在 Git 中使用 GUI,即使对于初学者也是如此,因为他们抽象出太多关于 Git 实际工作原理的知识。如果任何人,包括初学者,想要学习并精通Git,那么他们必须学会从命令行使用它 .
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多