为不同的操作系统分叉git项目

时间:2013-02-07 08:32:47

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

我有一个OSX应用程序,我已经在python中构建了自己。像许多OSX应用程序一样,它有很多(全部?)依赖项。例如...

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

目录结构比这个大得多,每个目录中有很多文件,但你明白了

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

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

我在这里阅读了类似的线程,但我无法想象整个目录结构的工作方式。 我看到了几个选项。

  1. 在需要时使用单独的git分支和merge / cherry-pick更改(这可能很困难,因为所有3的目录结构将完全不同
  2. 使用git子模块 - 已经阅读过这个,但不确定我应该创建子模块的哪些组件 - 常用项目或附加组件?
  3. 使用单独的存储库 - 不确定这与分支是否有任何不同
  4. 最终,我只需要跟踪所有3个操作系统的主要文件的更改,同时保持更改分离,而不必在处理特定的操作系统/分支时采取大量步骤(例如make文件等)

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

2 个答案:

答案 0 :(得分:1)

如果源文件在各个平台上都是相同或大致相同的,那么您就没有理由将单独的分支,分支或子模块强制转换为不同的结构。

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

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

最重要的是,将所有代码保存在一个位置,然后在实际构建可再发行二进制文件后,可以自动将其复制到适当的结构中。每个版本为每个平台运行一个脚本比在一直保持两个或三个相同的回购同步更容易,这将是一件很容易的事情。

答案 1 :(得分:0)

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