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:
- 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),
- 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),
- 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)
fuente
Respuestas:
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.
fuente
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 ...
¿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.
Solo para aclarar a los demás (una vez más, no hay afiliación comercial a GitHub o BitBucket):
GitHub: Planes y precios
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.
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:
¿Derivación?
git-flow
)No estoy seguro de si esto ayudará, pero puede echar un vistazo a:
... 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.
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
main
rama 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?
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.
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).
---> Vea mi respuesta corta arriba. ^^^^^^
fuente
Esto es lo que hago:
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.
fuente
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.
fuente
git worktree
comando, 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 :-)