2008-10-03 5 views
11

Nous travaillons ici avec un dépôt semi-centralisé git où je travaille. Chaque développeur a son propre sous-arbre dans le dépôt git central, il ressemble à ceci:Puis-je mapper des branches locales vers des branches distantes avec des préfixes différents dans git?

master 
alice/branch1 
alice/branch2 
bob/branch1 
michael/feature 
release/1.0 
release/1.1

Travailler localement dans mon arbre je topic/feature, ce qui correspond à michael/feature dans l'arbre central.

J'utilise

git push origin topic/feature:michael/feature 

pour pousser mes changements à l'arbre à distance. Cependant, ceci est lourd et sujet à des erreurs (par exemple en omettant le nom du développeur, en mal orthographiant le nom de la fonctionnalité, etc.).

Je cherche une manière plus propre de faire ceci. Par exemple, "git push". Je soupçonne que le réglage d'une télécommande différente avec un fetch modifié fecspec le fera, mais je ne sais pas exactement comment le faire. Je ne suis pas sûr comment modifier mes définitions actuelles de branche pour utiliser la télécommande différente.

Mon .git/config actuelle ressemble à quelque chose comme:

[remote "origin"] 
    url = git://central/git/project 
    fetch = +refs/heads/*:refs/remotes/origin/* 
[branch "topic/feature"] 
    remote = origin 
    merge = refs/heads/michael/project

Edit: Je voudrais aussi appliquer à tractions/récupère. Mais le branch.<name>.merge s'en occupe-t-il?

Je vais continuer à faire des recherches et poster ici si je trouve quelque chose, mais j'espère avoir d'autres bonnes idées.

Édition 2: J'ai décidé de conserver le même nom de branche locale et distante. Il semble que ce sera le moins de travail et le moins sujet aux problèmes futurs.

+0

Lorsque vous modifiez le fichier .git/config, n'oubliez pas de le sauvegarder en premier. Si vous vous trompez, il vous suffit de restaurer la bonne version connue du fichier pour revenir à l'état correspondant. – webmat

+0

Cela fait beaucoup de choses lors du déploiement de git pour héberger des services comme Heroku, Nodester et AppFog. – studgeek

Répondre

3

Si vous le pouvez, je vous suggère d'utiliser les mêmes noms de branche localement à & à distance. Ensuite, git push poussera toutes vos branches locales vers les branches correspondantes dans le référentiel central.

Pour utiliser des préfixes différents dans les repos locaux et distants, vous devez ajouter un mappage à votre fichier de configuration chaque fois que vous créez une nouvelle branche d'entités. La commande de mettre en place le mappage pour le sujet/BRANCH_NAME est

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

Dans votre section [remote "origine"], ajoutez une ligne par mappage. Y compris maître à maîtriser.

push = refs/heads/master:master 
push = refs/heads/topic/feature:michael/feature 

Je ne sais pas comment le faire avec la commande git-config. Sachez que dorénavant, toutes les branches sont poussées de la même manière lorsque vous faites un push direct (sans paramètres). Voulez-vous expliquer pourquoi vous ne gardez pas les mêmes noms de branches localement et à distance?

+0

Bon point sur le fait de garder les branches correspondant ... Je peux passer à cela. Au lieu de cela, est-il possible d'inclure des caractères génériques dans les mappages push, similaires à ceux génériques dans la question? –

1

Vous pouvez mapper votre branche à une autre branche de suivi de la télécommande avec quelque chose comme ceci:

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

Votre config finit semblable à ce que @ Paul suggère (un peu "plus simple" en fait).

Voir cet aperçu (avec tweaks par moi) pour les étapes d'utilisation qui fonctionnent bien pour moi https://gist.github.com/2002048.

Questions connexes