¿Cómo puedo organizar repositorios personales de Git?

20

Estoy en el proceso de configurar una cuenta de GitHub con el plan de hacer que un par de bibliotecas que desarrollé como parte de algunos proyectos recientes de iOS estén disponibles gratuitamente para que otros desarrolladores de iOS las usen.

Actualmente no tengo una copia de seguridad fuera del sitio para la mayoría de mi código, así que como parte de esto, originalmente pensé que subiría todos mis proyectos personales, o al menos todos mis proyectos de iOS, a un repositorio privado alojado en GitHub . Sin embargo, tengo muchos proyectos, muchos de los cuales son de poco valor (es decir, adaptados de libros y escritos para la experiencia de aprendizaje). GitHub no solo cobra por el repositorio privado, sino que no parece tener ninguna forma de organizar los repositorios jerárquicamente.

¿Hay algo que me falta que me permita usar un repositorio de git con una jerarquía y verificar piezas cuando las necesito / trabajar con ellas, como lo hago actualmente con SVN?

¿GitHub (o un competidor, como BitBucket) tiene algunas características de organización de proyectos que me faltan?

De lo contrario, ¿cuál es la "forma Git" generalmente aceptada de manejar esta situación (descartar proyectos no destinados a lanzamiento, almacenarlos fuera de línea, agruparlos de alguna manera, etc., etc.)?

Por lo que puedo decir, mis opciones son:

  1. Ponga bibliotecas en GitHub, continúe alojando mi propio SVN para todos los demás proyectos, use una solución que no sea VCS para la copia de seguridad fuera del sitio (blech),
  2. Ponga las bibliotecas y el software que planeo lanzar en GitHub (como público y privado, respectivamente), continúe alojando mi propia SVN para proyectos que no me interesan tanto y que solo es probable que vuelva a visitar para actualizar mi memoria sobre cómo implementar XYZ, decido que estoy dispuesto a descartarlos si mi casa explota (doble blech),
  3. Ponga todo en [GitHub y / o BitBucket], trate de tener un número ridículo de repositorios buscando lo que necesito / manteniendo algún conjunto de punteros fuera de línea en mi cuenta [GitHub y / o BitBucket] (triple blech)
Arkaaito
fuente
2
Tengo curiosidad por saber cuántos repositorios estamos hablando aquí. ¿Qué quieres decir con "punteros"?
mhulse
Dado que esta es una pregunta antigua, Bitbucket le permite crear organizaciones gratuitas, y en ellas puede tener proyectos, que pueden tener repositorios. Las organizaciones son gratuitas hasta cierto número de usuarios. Puede administrar los permisos por org / project / repo.
xenoterracide
Tenga en cuenta que GitHub ahora ofrece repositorios privados ilimitados con sus planes pagos.
Jack

Respuestas:

11

bitbucket.org te permite crear repositorios privados ilimitados.

Git no te permite ver solo algunas piezas de código. Por lo tanto, necesitaría crear un repositorio para cada proyecto, o tratar de clonar todos los proyectos. En realidad, no veo ningún problema al poner todos nuestros pequeños proyectos en un solo repositorio. Lo clonas una vez y listo.

Con Git nunca más tendrá que "pagar" el código a menos que elimine su repositorio local o se mude a otra máquina. Simplemente sincronizará todos sus cambios.

Tengo un problema simular con una gran cantidad de repositorios. La razón por la que no puedo almacenarlos todos en un único repositorio es porque necesito ramificar diferentes versiones de cada uno de los repositorios. Es muy difícil de manejar.

Andrew T Finnell
fuente
Cierto, cierto ... Probablemente no debería haber llamado a GitHub específicamente, ya que estoy abierto a usar BitBucket para proyectos privados. Editó la pregunta un poco para que sea menos particular.
Arkaaito
5

Respuesta corta ...

Mi sugerencia: Comience con cuentas públicas en GitHub y / o Bitbucket (¿otro?). Lanza algunos proyectos públicos y comienza a usar las herramientas / interfaces. Una vez que tenga una idea de los servicios, debe tener una idea de cuáles son las limitaciones, ventajas y desventajas de cada servicio. A partir de ahí, debería poder elegir la mejor ruta para la iluminación del control de versiones. :)


Respuesta larga ...

Actualmente no tengo una copia de seguridad fuera del sitio para la mayoría de mi código, así que como parte de esto, originalmente pensé que subiría todos mis proyectos personales, o al menos todos mis proyectos de iOS, a un repositorio privado alojado en GitHub . Sin embargo, tengo muchos proyectos, muchos de los cuales son de poco valor (es decir, adaptados de libros y escritos para la experiencia de aprendizaje).

¿Has considerado instalar tu propio cliente Git? Si ya está pagando por el alojamiento web, entonces podría tener sentido usar ese host para su propia configuración de Git.

Por ejemplo, mi host es WebFaction (sin afiliación):

Instalar la aplicación web Git

Encabezar esta ruta podría permitirle ahorrar algo de dinero, especialmente. si ya estás pagando por el alojamiento.

GitHub no solo cobra por el repositorio privado,

Solo para aclarar a los demás (una vez más, no hay afiliación comercial a GitHub o BitBucket):

GitHub: Planes y precios

  • $ 7 / mes para hasta 5 repositorios privados , ilimitado todo lo demás.
  • $ 12 / mes para hasta 10 repositorios privados , ilimitado todo lo demás.
  • $ 12 / mes para hasta 20 repositorios privados , ilimitado todo lo demás.

Tenga en cuenta que los precios de "Planes de negocios" son diferentes.

Precios para el alojamiento de repositorios Git y Mercurial para Bitbucket por Atlassian

Como lo indicó Andrew en la otra respuesta, Bitbucket promociona repositorios privados ilimitados.

  • 5 usuarios: gratis
  • 10 usuarios: $ 10 / mes.
  • 25 usuarios: $ 25 / mes.
  • 50 usuarios: $ 50 / mes.
  • 100 usuarios: $ 100 / mes.
  • Ilimitado $ 200 / mes.

no parece tener ninguna forma de organizar repositorios jerárquicamente.

No estoy seguro de qué quiere decir exactamente "jerárquicamente" (probablemente porque no estoy familiarizado con SVN).

No estoy seguro de si esto ayudaría, pero podría mirar esta tabla de comparación para ver cómo se comparan / difieren los comandos:

¿Hay algo que me falta que me permita usar un repositorio de git con una jerarquía y verificar piezas cuando las necesito / trabajar con ellas, como lo hago actualmente con SVN?

¿Derivación?

¿GitHub (o un competidor, como BitBucket) tiene algunas características de organización de proyectos que me faltan?

No estoy seguro de si esto ayudará, pero puede echar un vistazo a:

Git viene con herramientas GUI integradas para comprometerse ( git-gui ) y navegar ( gitk ), pero hay varias herramientas de terceros para los usuarios que buscan experiencia específica de la plataforma.

... de nuevo, no estoy seguro si alguna de esas herramientas podría ayudarlo a tener una idea de lo que es posible.

Para ser claros, no estoy seguro de tu nivel de habilidad de Git ... si eres nuevo en Git / GitHub, usar una GUI podría ser una forma rápida / fácil de que te hagas una idea de las cosas. Personalmente, me gusta usar las aplicaciones oficiales de GitHub para Mac / Windows.

De lo contrario, ¿cuál es la "forma git" generalmente aceptada de manejar esta situación (descartar proyectos no destinados a lanzamiento, almacenarlos fuera de línea, agruparlos de alguna manera, etc., etc.)?

Si yo fuera tú, estaría usando repositorios.

¿Cuántos repositorios privados necesitas?

Si desea usar GitHub, una solución podría ser obtener el plan más barato y utilizar algunos repositorios privados para guardar todo su código de prueba / no público. Simplemente podría usar una estructura de carpetas en su mainrama para mantener una estructura jerárquica, o podría usar varias ramas para mantener las cosas más separadas.

Consejo: Si está utilizando una versión más reciente de Git, puede extraer ramas específicas usando git clone -b mybranch --single-branch git://sub.domain.com/repo.git:

Sin embargo, debo advertirte que usar ramas para organizar el código (como carpetas) no es realmente la mejor manera de hacer las cosas (aunque no hay nada que diga que no puedes seguir esta ruta).

( Consulte mi respuesta aquí para obtener información relacionada con respecto a las sucursales de GitHub ) .

Una vez más, creo que múltiples repos son el camino a seguir.

Puede preguntarse si su código realmente necesita ser privado; ¿es posible que pueda hacer público dicho código sin ninguna repercusión?

Ponga bibliotecas en GitHub, continúe alojando mi propio SVN para todos los demás proyectos, use una solución que no sea VCS para la copia de seguridad fuera del sitio (blech),

Si encabeza esta ruta, Dropbox (o similar) podría ser una buena forma de obtener algún tipo de control de versión y sincronización para su copia de seguridad fuera del sitio.

Ponga las bibliotecas y el software que planeo lanzar en GitHub (como público y privado, respectivamente), continúe alojando mi propia SVN para proyectos que no me interesan tanto y que solo es probable que vuelva a visitar para actualizar mi memoria sobre cómo implementar XYZ, decido que estoy dispuesto a descartarlos si mi casa explota (doble blech),

Esto me lleva de vuelta a la pregunta "¿Ya paga por el alojamiento? Si es así, podría instalar su propio host Git"; La ventaja es que puede tener todo el código fuente bajo el paraguas de Git, incluso si no está todo en el mismo host (es decir, use GitHub para las cosas públicas que desea mostrar).

Ponga todo en [GitHub y / o BitBucket], trate de tener un número ridículo de repositorios buscando lo que necesito / manteniendo algún conjunto de punteros fuera de línea en mi cuenta [GitHub y / o BitBucket] (triple blech)

---> Vea mi respuesta corta arriba. ^^^^^^

mhulse
fuente
0

Esto es lo que hago:

  • Coloque los proyectos independientes que desea hacer públicos en repositorios de GitHub separados . Dado que GitHub es actualmente el lugar de facto para compartir código, eso hará que sus proyectos sean más reconocibles / más fáciles de bifurcar.
  • Para cualquier proyecto que desee mantener en privado, póngalos en repositorios privados alojados por el proveedor de su elección. Como ya se mencionó, Bitbucket es una buena opción para esto, ya que permite repositorios privados ilimitados.
  • Ponga el resto del código en un repositorio "basura". Esto puede incluir código utilizado para aprender y probar, así como pequeños fragmentos que no son realmente parte de un proyecto. Mientras no haya ninguna razón para mantener esto en privado, también puede alojar este repositorio en GitHub.

    Además de todas las ventajas habituales del control de versiones (que ya tiene con SVN), ahora su código está respaldado en línea. En caso de que cualquiera de sus códigos basura se convierta en un proyecto, puede simplemente convertirlo en su propio repositorio.

    Podría poner este código en repositorios separados o usar algo elegante como submódulos o subárboles de git, pero creo que es más fácil mantenerlo todo en un repositorio y organizarlo usando carpetas. Es mucho más simple y git es lo suficientemente rápido como para que el tamaño del repositorio no sea un problema.

bmaupin
fuente
0

Una posible técnica sería usar ramas.

Las ramas en un repositorio de git son solo punteros para confirmar, no tienen que estar relacionados entre sí de ninguna manera. Por lo tanto, puede crear un repositorio de "proyectos menores" en el servicio de alojamiento y luego usar una rama en ese repositorio para cada proyecto. Si crece un proyecto menor, puede mover fácilmente la sucursal a su propio repositorio.

A nivel local, puede mantener las ramas en repositorios locales separados (no tiene que haber un mapeo 1: 1 entre repositorios locales y remotos) o tener un único repositorio local y usar git worktree para mantener múltiples árboles de trabajo. Personalmente sospecho que el primer enfoque es menos propenso a errores.

Peter Green
fuente
Tenerlos almacenados en el mismo repositorio remoto no significa que tenga que usar el mismo repositorio local.
Peter Green
Solo olvídate de mi último comentario. Acabo de aprender sobre el git worktreecomando, que le permite crear árboles de trabajo adicionales para un repositorio, lo que le permite tener varias ramas desprotegidas simultáneamente. Con esto, las desventajas de su enfoque básicamente desaparecen: solo cree un árbol de trabajo para cada rama independiente y utilícelas como repositorios independientes. Puede ser una buena idea agregar esto a su respuesta :-)
cmaster - restablecer monica
@cmaster, listo ...
Peter Green