Estoy contribuyendo a un proyecto de código abierto bastante pequeño alojado en Github. Para que otras personas puedan aprovechar mi trabajo, he creado mi propio tenedor en Github. A pesar de la elección de la terminología de Github, no deseo desviarme totalmente del proyecto principal. Sin embargo, no espero ni deseo que todo mi trabajo sea aceptado en el repositorio principal. Algunos de ellos, sin embargo, ya se han fusionado en el repositorio principal y espero que esto continúe. El problema al que me estoy enfrentando es la mejor manera de mantener nuestros dos árboles en un estado donde el código se pueda compartir fácilmente entre ellos.Mejores prácticas para repositorios git en proyectos de código abierto
Algunas situaciones que tenga o que se encuentran incluyen:
- encomiendo código que más tarde se acepta en el repositorio principal. Cuando retire de este repositorio en el futuro, mi confirmación se duplica en mi repositorio .
- Confirmo código que nunca se acepta en el repositorio principal. Cuando salga de este repositorio en el futuro, los dos árboles se han separado y arreglarlo es difícil.
- Llega otra persona y basa su trabajo en mi repositorio. Por lo tanto, debería, si es posible, evitar cambiar los commits que he presionado, por ejemplo, usando git rebase.
- Deseo enviar el código al depósito maestro. Idealmente, mis cambios deberían poder transformarse fácilmente en parches (idealmente usando git format-patch) que puedan aplicarse directa y limpiamente al repositorio principal.
Por lo que yo puedo decir que hay dos, o posiblemente tres maneras de manejar esto, ninguna de las cuales funcionan particularmente bien:
- pasan con frecuencia git rebase de mantener mis cambios basados fuera de la cabeza de el repositorio aguas arriba De esta forma puedo eliminar compromisos duplicados pero a menudo tengo que reescribir la historia, causando problemas a las personas que quieren derivar su trabajo del mío.
- Combine con frecuencia los cambios del repositorio en sentido ascendente en los míos. Esto funciona bien por mi parte, pero no parece que sea fácil enviar mi código al repositorio de subida.
- Usa alguna combinación de estos y posiblemente git cherry-pick para mantener las cosas en orden.
¿Qué han hecho otras personas en esta situación? Sé que mi situación es análoga a la relación entre varios colaboradores del kernel y el repositorio principal de Linus, así que espero que haya buenas maneras de manejar esto. Sin embargo, soy bastante nuevo en git, así que no he dominado todos sus matices. Finalmente, especialmente debido a Github, mi terminología puede no ser del todo coherente o correcta. Sientase libre de corregirme.
Tenga en cuenta que incluso si usted (fuerza) impulsa sus cambios reestadificados, otras personas también pueden tirar fácilmente con rebase para actualizar. Es solo otro taller donde la historia se reescribe continuamente en todas partes. Además de eso, debes ser un poco más cuidadoso debido a la fuerza de empuje que puede eliminar todo :) – rubenvb