0

我有一个用 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结构扁平很多。

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

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

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

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

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

4

2 回答 2

1

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

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

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

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

于 2013-02-07T10:11:14.867 回答
0

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

于 2013-02-07T08:38:36.030 回答