proyecto de git de horcajadas para diferentes sistemas operativos

Tengo una aplicación OSX que he creado en python. Al igual que muchas aplicaciones OSX, tiene muchas (¿todas?) De sus dependencies. p.ej…

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

La estructura del directory es mucho más grande que esto, con muchos files en cada directory, pero se entiende la idea

Mi primer fork será para Linux, en el que necesito main.py, lib1.py, lib2.py y el img dir. No necesito nada más en el directory de Recursos ni en ningún otro directory. También agregaré files específicos de Linux que no son necesarios para mac. La estructura dir general será mucho más plana que la estructura mac.

Después de eso estaré bifurcando para Windows, con los files que he enumerado para Linux y algunos files específicos de Windows no necesarios para mac / linux.

He leído los hilos similares aquí, pero no puedo visualizar cómo funcionará la estructura general del directory. Veo un par de opciones.

  1. Utilice las twigs de git separadas y los cambios de fusión / selección cuando sea necesario (esto puede ser difícil ya que la estructura de directorys de los 3 será completamente diferente).
  2. Use submodules de git: he estado leyendo acerca de esto, pero no estoy seguro de qué componentes debería hacer los submodules: los elementos comunes o los extras.
  3. usa repositorys separados, no estoy seguro si esto es diferente a las twigs

En última instancia, solo necesito hacer un seguimiento de los cambios para esos files principales para los 3 sistemas operativos, manteniendo los cambios por separado, y sin tener que dar grandes pasos cuando trabajo en un sistema operativo / twig en particular (por ejemplo, crear un file, etc.)

¿Cuál es la mejor manera de lograr esto? Gracias por leer

Si los files fuente son todos o casi iguales en todas las plataforms, no hay razón por la que deba mantener twigs, horquillas o submodules separados para forzarlos a una estructura diferente.

La mejor manera de hacerlo sería estructurando su proyecto como un proyecto estándar de configuration de herramientas / distutils con un setup.py . Luego, use la extensión py2app para comstackr su package de aplicaciones OS X y la extensión py2exe para comstackr sus ejecutables de Windows.

La segunda mejor manera sería estructurar su proyecto de una manera que tenga sentido para usted, y tener scripts de compilation que copien los files apropiados en su lugar. Por ejemplo, tenga una src/ carpeta con todas sus fonts de Python, una build/ carpeta ignorada por Git, y una build-mac.sh que cree un package de aplicaciones dentro de build/ y build-mac.sh sus files fuente de Python en su lugar.

En pocas palabras, mantenga todo su código en un solo lugar, y luego tenga una forma de copyrlo automáticamente en la estructura adecuada una vez que llegue a crear binarys networkingistribuibles. Va a ser muchísimo más fácil ejecutar un script para cada plataforma en cada lanzamiento que mantener dos o tres repositorys idénticos todo el time sincronizados.

Debe usar git-submodule y crear los submodules de partes comunes, y vincularlos en las twigs apropiadas de la plataforma.