Repositorio de código para requisitos específicos: ¿puede Git ofrecer 'descargas pequeñas'?

Tengo un código que actualmente es de 'código abierto' pero no de fácil acceso, ya que no está disponible en un repository. La idea es que esté disponible a través de SourceForge o Github, pero estoy dispuesto a usar cualquier sitio gratuito que admita los requisitos.

Descripción del Proyecto

El proyecto consiste en código en muchos modules (packages Java bajo la jerarquía org.pscode ) y algunas dependencies (por ejemplo, 50 megas de plug-in de compilation cruzada, 5-10 megas de MP3 …). El proyecto contiene muchas aplicaciones independientes tan dispares como un comstackdor de compilation cruzada para desarrolladores y un jukebox musical para usuarios finales. Pero también hay classs individuales (como BigClip que puede contener un gran clip de sonido), que son útiles en otras aplicaciones que no son del proyecto en sí. Si bien algunos de los packages son efectivamente 'autocontenidos' (por ejemplo, JaNeLA ), otros son componentes que se utilizan en una gama de aplicaciones existentes.

El proyecto completo tal como existe en mi máquina ya está empujando 200 Megas.

Como desarrollador que quería reproducir un clip largo, dudaría en download más de 200 megabytes de proyecto solo para get una class cuyo código sea lo suficientemente breve como para publicar en SO.

Requisitos del repository de código

  • Un repository de código / sistema de intercambio que permite al usuario download solo las piezas que requieren.
  • Si consta de muchas partes separadas del proyecto principal, se descargan automáticamente.
  • Proporcione una forma automática de calcular (para mostrar al usuario) cuánta descarga se requiere para cada proyecto 'secundario'. Está bien, ese no es un requisito que 'haga o rompa' mi elección, pero sería muy útil.

Estaba mirando a Git ya que parece tener muchos avances sobre las forms más antiguas de CVS, y estaba leyendo Git For Eclipse Users y llegué al punto 3 de los Sistemas de Control de Versión Distribuida que comienza …

Dado que no existe un repository principal, queda claro que el repository debe vivir en su totalidad en cada uno de los nodos en el DVCS. ..

Eso me preocupa, pero no estoy seguro de entenderlo completamente, o si hay otro mecanismo dentro de Git para proporcionar el comportamiento requerido.

Pregunta (s)

¿Puede Git cumplir los requisitos establecidos anteriormente?

En otro punto, ¿esto es 'no cuestion' para la mayoría de los desarrolladores? Si las personas normalmente descargan 200 megagramos de proyecto solo para get 3 Kb de código para analizar un file de valores separados por comas, entonces tal vez me preocupe por nada.

Puedes usar los submodules de git. Un submodule en un repository git es una reference a otro repository git. Normalmente, cuando clonas un repository de git, debes copyr todo. Sin embargo, los submodules son una forma de dividir un proyecto grande en muchos repositorys separados.

Sin embargo, tenga en count que un submodule deberá estar en un subdirectory separado, por lo que si tiene un código fuente que desea en submodules separados, puede necesitar moverlos y quizás cambiar su enlace.

Cuando clones el proyecto principal, no downloadá todos los submodules automáticamente. Debe especificar que desea extraer todos los submodules manualmente. Sin embargo, es posible download rápidamente todos los submodules, para más detalles:

Manera fácil de extraer la última de todos los submodules

Esto realmente no es posible con Git. Aunque, si aloja su código en un repository de Git como github, los usuarios pueden navegar a través de sus files y download los que consideren necesarios. Ver Git vs Subversion :

Git requiere clonar todo el repository (incluido el historial) y crear una copy de trabajo que refleje al less un subset de los elementos bajo el control de la versión.

Aunque la function de submodule de Git puede ayudar con este problema, debe gestionar varios repositorys y garantizar la coordinación entre ellos. Esto puede ser un poco complicado si todavía está en desarrollo principalmente y puede requerir alguna refactorización.