【问题标题】:Qt .pro file and version control systemQt .pro 文件和版本控制系统
【发布时间】:2013-09-28 14:47:56
【问题描述】:

当我在 Qt 项目上与某人合作时,.pro 文件中总是存在冲突。

比如有这样的项目树

HEADERS += \
main.cpp \
a.cpp

我在 Qt Creator 中添加了新文件 b.cpp,而有人添加了 c.cpp。结果我有新的.pro 文件

HEADERS += \
main.cpp \
a.cpp \
b.cpp

我的同事有档案

HEADERS += \
main.cpp \
a.cpp \
c.cpp

当我们都提交更改时,我们的项目文件将发生冲突。配置 Qt Creator 或 git 以正常将这些东西合并到的正确方法是什么:

HEADERS += \
main.cpp \
a.cpp \
b.cpp \
c.cpp

【问题讨论】:

  • .pro 是一个文件,在提交更改时可以忽略吗?我的意思是,它是不是因为构建过程而生成的文件。
  • 不,.pro 是项目文件,它是源代码的一部分。它应该被版本化并且不应该被忽略。

标签: git qt version-control github qt-creator


【解决方案1】:

首先,合并冲突不是由 Qt Creator 管理,而是由版本控制系统管理。所以你不能说“配置 Qt Creator 来正常合并这些东西”。这是您需要配置的 VCS。

但是,您可以在 pro 文件中使用通配符,如 this answer 中所述。在这种配置下,添加新文件时不需要修改 .pro 文件,所以 VCS 会很冷静。

【讨论】:

  • 我确信如果 Qt Creator 将在每行末尾添加斜杠 \,VCS 将能够合并简单的案例。或者 Qt Creator 可以按字母顺序排列文件,这也可能有所帮助。
【解决方案2】:

您可以尝试使用通配符来避免频繁更改 .pro.pri 文件。

HEADERS += $$files(*.h)
SOURCES += $$files(*.cpp)

注意,在.pri 中,您需要在路径前加上$$PWD,否则路径是相对于.pro 的位置的。

HEADERS += $$files($$PWD/*.h)
SOURCES += $$files($$PWD/*.cpp)

【讨论】:

    【解决方案3】:

    为您的团队设置一些“添加/删除文件”规则以减少冲突。

    简单的一点:如果你们在物理上靠近,团队成员总是可以在添加/删除文件之前先通知其他人。

    另一个是“添加文件”时设置如下规则:

    1. 成员要添加文件之前,必须先提交更改。
    2. 然后她会从主人那里拉取更改。如果其他人添加了文件,她现在将拥有最新的 .pro 文件。
    3. 添加文件。
    4. 快速提交并推送到 master。

    当然,如果其他人在第 2 步之后和第 4 步之前添加文件,她仍然可能会倒霉。

    【讨论】:

    • 我认为,在推送之前必须从 master 拉取更改。否则你的推送将被拒绝,如果之前在远程有另一个推送。
    • VCS 的强大之处在于方便的自动合并。所描述的算法是该问题的一种解决方法,但它并不方便。如果你总是像描述的​​那样行事,你可以完全避免合并冲突,但这将使使用 VCS 几乎毫无意义。
    【解决方案4】:

    我认为您可以手动添加每个文件或在附加后编辑 pro 文件 使用下一个符号

    HEADERS += header1.h
    HEADERS += header2.h
    HEADERS += header3.h
    

    但我不知道如何对 qt 创建者说使用这种方法

    【讨论】:

      【解决方案5】:

      问题是您和您的同事都在更改“a.cpp”行,而您的 VC 系统并没有发现你们都做了同样的事情,因为更改通常与不同的更改混为一谈下一行。

      我还没有找到一种方法来配置 Qt QCreator 来执行此操作,但避免您遇到的特定冲突的一种方法是始终在行尾添加“\”,即使是列表中的最后一项, 然后在列表后面留下两个空行。例如

      原始 .pro:

      HEADERS += \
      main.cpp \
      a.cpp \
      
      
      # other stuff
      

      您的新 .pro:

      HEADERS += \
      main.cpp \
      a.cpp \
      b.cpp \
      
      
      # other stuff
      

      那么如果你的同事提交:

      HEADERS += \
      main.cpp \
      a.cpp \
      c.cpp \
      
      # other stuff
      

      那么您的 VC 系统通常应该在没有帮助的情况下解决冲突。

      我还建议保持这些 .pro 文件列表(SOURCES=、RESOURCES= 等)按字母顺序排序,因为它有助于使 VC 提交历史更易于理解,而且似乎无法配置 Qt QCreator 来执行此操作我倾向于总是通过在文本模式下编辑 .pro 来添加新文件。这样,我发现我总是可以控制发生的事情。如果您不是像我这样的控制狂,并且发现单击一堆 GUI 文件浏览器式的东西可以解放(与烦人相反),您可以先使用 GUI 的东西,然后以文本模式打开 .pro 并整理进行更改后,但在进行任何提交之前,将 .pro 文件归档。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-15
        • 2010-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多