2008-10-03 24 views
11

Estamos trabajando con un repositorio git semi-centralizado aquí donde trabajo. Cada desarrollador tiene su propia sub-árbol en el repositorio central GIT, por lo que se ve algo como esto:¿Puedo mapear sucursales locales en sucursales remotas con diferentes prefijos en git?

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 empujar mis cambios en el á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 hacerlo. Por ejemplo, "git push". Sospecho que configurar un control remoto diferente con un refspec de búsqueda modificado lo hará, pero no estoy seguro de cómo hacerlo exactamente. Tampoco estoy seguro de cómo modificar las definiciones de mi rama actual para usar el control remoto diferente.

Mi actual .git/config se ve algo como:

[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 tirones/recuperaciones. ¿Pero el branch.<name>.merge se ocupa de eso?

Continuaré investigando esto y publicando aquí si encuentro algo, pero espero obtener otras buenas ideas.

Editar 2: He decidido que mantendré los nombres de las sucursales locales y remotas de la misma manera. Parece que será el menos trabajo y menos propenso a problemas futuros.

+0

Cuando modifique el archivo .git/config, no olvide hacer una copia de seguridad primero. Si arruina algo, solo necesita restaurar la buena versión conocida del archivo para volver al estado correspondiente. – webmat

+0

Esto realmente surge mucho al hacer la implementación de git para alojar servicios como Heroku, Nodester y AppFog. – studgeek

Respuesta

3

Si puede, le sugiero que utilice los mismos nombres de sucursales localmente & de forma remota. Luego, git push empujará todas sus sucursales locales a las sucursales correspondientes en el repositorio central.

Para usar prefijos diferentes en los repos locales y remotos, necesita 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 de tema/branch_name es

git config remote.origin.push refs/heads/topic/BRANCH_NAME:michael/BRANCH_NAME 
4

En su sección ["origen remoto"], agregue una línea por asignación. 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 a partir de ahora, todas las ramas se presionan al mismo tiempo cuando se hace un git directo (sin params).

¿Le importaría explicar por qué no conserva los mismos nombres de sucursales local y remotamente?

+0

Un buen punto acerca de mantener las ramas coincidentes ... Puedo cambiar a eso. En lugar de eso, ¿es posible incluir comodines en las asignaciones de empuje, similar al genérico en la pregunta? –

1

puede asignar su sucursal de diferente rama de seguimiento en el mando a distancia con algo como esto:

git remote add heroku [email protected]:YOURAPPNAME.git 
git checkout -b heroku -t heroku/master 

Su configuración termina similar a lo @Paul sugiere (un poco "más simple" en realidad).

Vea esta esencia (con ajustes por mí) para los pasos de uso que me funcionan bien https://gist.github.com/2002048.

Cuestiones relacionadas