¿Puedo asignar sucursales locales a sucursales remotas con diferentes prefijos en git?
Pregunta
Estamos trabajando con un repositorio git semi-centralizado aquí donde trabajo. Cada desarrollador tiene su propio subárbol en el repositorio central de git, por lo que se ve así:
master alice/branch1 alice/branch2 bob/branch1 michael/feature release/1.0 release/1.1
Trabajando localmente en mi árbol tengo topic/feature
, que corresponde a michael/feature
en el árbol central.
He estado usando
git push origin topic/feature:michael/feature
para enviar mis cambios al árbol remoto. Sin embargo, esto es engorroso y propenso a errores (por ejemplo, omitir el nombre del desarrollador, escribir mal el nombre de la función, etc.).
Estoy buscando una forma más limpia de hacer esto. Por ejemplo, & Quot; git push
& Quot ;. Sospecho que establecer un control remoto diferente con una referencia de búsqueda modificada lo hará, pero no estoy seguro de cómo hacerlo exactamente. Tampoco estoy seguro de cómo modificar mis definiciones de rama actuales para usar los diferentes controles remotos.
Mi .git/config
actual se parece a:
[remote "origin"] url = git://central/git/project fetch = +refs/heads/*:refs/remotes/origin/* [branch "topic/feature"] remote = origin merge = refs/heads/michael/project
Editar: también me gustaría aplicar esto a pulls / fetches. ¿Pero el branch.<name>.merge
se encarga de eso?
Continuaré investigando esto y publicaré aquí si encuentro algo, pero espero obtener algunas otras buenas ideas.
Edición 2: he decidido que mantendré los nombres de sucursales locales y remotas iguales. Parece que será el menos trabajo y menos propenso a futuros problemas.
Solución
Si puede, le sugiero que use los mismos nombres de rama localmente & amp; remotamente Entonces git push
empujará todas sus sucursales locales a las sucursales correspondientes en el repositorio central.
Para usar diferentes prefijos en repositorios locales y remotos, debe agregar una asignación a su archivo de configuración cada vez que cree una nueva rama de características. El comando para configurar la asignación para el tema / BRANCH_NAME es
git config remote.origin.push refs/heads/topic/BRANCH_NAME:michael/BRANCH_NAME
Otros consejos
En su sección [remoto " origen "], agregue una línea por mapeo. Incluyendo maestro a maestro.
push = refs/heads/master:master
push = refs/heads/topic/feature:michael/feature
No estoy seguro de cómo hacerlo con el comando git-config.
Tenga en cuenta que de ahora en adelante, todas las ramas se empujan al mismo tiempo cuando se hace un git push (sin parámetros).
¿Le gustaría explicar por qué no mantiene los mismos nombres de sucursal local y remotamente?
Puede asignar su rama a una rama de seguimiento diferente en el control remoto con algo como esto:
git remote add heroku git@heroku.com:YOURAPPNAME.git
git checkout -b heroku -t heroku/master
Su configuración termina de forma similar a lo que sugiere @Paul (un poco " más simple " en realidad).
Vea este resumen (con ajustes por mí) para conocer los pasos de uso que funcionan bien para mí https: //gist.github .com / 2002048 .