2010-03-30 16 views
7

Soy nuevo en el mundo de Git, GitHub y Heroku. Hasta ahora, estoy disfrutando de este paradigma pero viniendo de un entorno con SVN, las cosas me parecen un poco complicadas en el mundo de Git. Estoy enfrentando un problema para el cual estoy buscando una solución.Git + GitHub + Heroku

Escenario:

1. He fijado un nuevo proyecto privado en GitHub. Me bifurcada al proyecto privado y ahora tengo la estructura siguiente en mi sucursal:

/project 
     /apps 
     /my-apps 
      /my-app-1 
      .... 
      /my-app-2 
      .... 
      /your-apps 
      /your-app-1 
       .... 
      /your-app-2 
       .... 
     /plugins 
     .... 

que puede cometer el código en mi Tenedor en GitHub de mi máquina en cualquiera de las carpetas que quiero. Más tarde, el administrador del proyecto los arrastraría al repositorio principal.

2. Para cada aplicación individual en la carpeta de aplicaciones, configuré una aplicación en Heroku, que es un Git Repo en sí mismo, donde introduzco mis cambios cuando termino con las historias de usuario de mi máquina local. En resumen, cada aplicación en la carpeta de aplicaciones es una aplicación de Rails alojada en Heroku.

Problema:

Lo que quiero es que cuando empujo mis cambios en Heroku, que se pueden cometer en mi proyecto tenedor en GitHub, así, así, también tiene la última versión del código todo el tiempo.

El problema que veo es que el código en Heroku es un Git Repo, mientras que las carpetas que tengo en GitHub son parte de un Repo.

Hasta ahora, lo que he investigado es que hay algo conocido como Submódulo en el mundo de Git que puede venir al rescate, sin embargo, no he podido encontrar algunas instrucciones para novatos.

¿Puede alguien en la comunidad ser tan amable de compartir pensamientos y ayudarme a identificar la solución a este problema?

Respuesta

9

La idea detrás de los submódulos es que son todos repositorios git separados que puede incluir en uno maestro y en lugar de incluir todos los archivos, incluye un enlace a ese submódulo.

Cómo usar submódulos

Para utilizar un sub-módulo, primero debe extraer el directorio y crearlo como su propio repositorio git utilizando git init. Luego puede subir esto por separado a Github o [lugar que elija] y para usarlo como submódulo use el comando: git submodule add [place/to/put/it] git://github.com/you/proj1.

separación es mejor

yo creo que es mejor dejar que se repartieron a cabo como sus propios repositorios Git y empujar a heroku de cada uno. ¿La razón? Es más probable (creo) que vayas a trabajar en uno a la vez y haciendo un git commit y git push heroku master solo para ese.

Si usted deseaba sin embargo para desplegar todas las aplicaciones al mismo tiempo que podría recursivos por el árbol de directorios utilizando este script de Ruby colocado en el directorio de nivel superior:

Dir["**/*"].select { |dir| File.directory?(dir) }.each do |f| 
    Dir.chdir(dir) do 
    `git push origin master` 
    `git push heroku master` 
    end 
end 

Por supuesto, esto sólo funcionaría si ha escenificado todos sus cambiosNo puedo pensar en una forma de automatizar eso, ya que Ruby < = 1.9 no tiene el módulo para leer tus pensamientos.

+0

Gracias por su respuesta Ryan. Como mencionó, los submódulos necesitan ser creados, sin embargo, quiero saber si cada submódulo necesita ser alojado por separado en GitHub o también puede residir en el repositorio del proyecto. –

+1

Alojarlos por separado sería la mejor manera de imo. –

+1

Básicamente, no queremos alojar estos por separado, la razón principal es que los repositorios no son públicos y, por lo tanto, no queremos compartirlos con todos. Además, alojar repositorios privados en GitHub cuesta dinero. –