【问题标题】:forking git project for different OS为不同的操作系统分叉 git 项目
【发布时间】:2013-01-22 16:41:49
【问题描述】:

我有一个我自己用 python 构建的 OSX 应用程序。像许多 OSX 应用程序一样,它内部有许多(全部?)依赖项。比如……

./git_repo
└── mac (dir)
    ├── myapp.app (dir)
    │   ├── Frameworks (dir)
    │   ├───MacOS (dir)
    │   ├───Resources (dir)
    │   │   ├──main.py
    │   │   ├──lib1.py
    │   │   ├──lib2.py
            ├─img(dir)

目录结构比这个大很多,每个目录下有很多文件,但你懂的

我的第一个 fork 将用于 Linux,其中我需要 main.py、lib1.py、lib2.py 和 img 目录。我在 Resources 目录或任何其他目录中不需要任何其他内容。我还将添加 Mac 不需要的 Linux 特定文件。整体dir结构会比mac结构扁平很多。

之后,我将为 Windows 分叉,其中包含我为 Linux 列出的文件,以及 mac/linux 不需要的一些 Windows 特定文件。

我在这里阅读了类似的主题,但我无法想象整个目录结构将如何工作。 我看到了几个选项。

  1. 在需要时使用单独的 git 分支并合并/cherry-pick 更改(这可能很困难,因为所有 3 个目录结构将完全不同
  2. 使用 git 子模块 - 一直在阅读这方面的内容,但不确定我应该将哪些组件制作成子模块 - 常见项目还是附加项目?
  3. 使用单独的存储库 - 不确定这是否与分支有任何不同

最终,我只需要跟踪所有 3 个操作系统的这些主文件的更改,同时将更改分开,并且在处理特定操作系统/分支(例如制作文件等)时无需采取大量步骤

实现这一目标的最佳方法是什么? 感谢阅读

【问题讨论】:

    标签: git git-branch git-submodules branching-and-merging


    【解决方案1】:

    如果跨平台的源文件全部或大部分相同,则没有理由您应该维护单独的分支、分支或子模块来强制它们进入不同的结构。

    解决此问题的最佳方法是将您的项目构建为标准的 setuptools/distutils 项目,并带有 setup.py。然后,使用 the py2app extension 构建您的 OS X 应用程序包,并使用 the py2exe extension 构建您的 Windows 可执行文件。

    第二好的方法是以对您有意义的方式来构建您的项目,并使用构建脚本将适当的文件复制到适当的位置。例如,有一个包含所有 Python 源代码的 src/ 文件夹,一个被 Git 忽略的 build/ 文件夹,以及一个在 build/ 中创建应用程序包并将 Python 源文件复制到适当位置的 build-mac.sh

    底线是,将所有代码保存在一个位置,然后在您开始实际构建可再分发二进制文件时,有一种方法可以自动将其复制到适当的结构中。每次发布时为每个平台运行一个脚本要比始终保持两三个相同的存储库同步要容易得多。

    【讨论】:

      【解决方案2】:

      您应该使用git-submodule 并制作公共部分子模块,并将它们链接到相应的平台分支中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-09
        • 2014-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-19
        • 1970-01-01
        相关资源
        最近更新 更多