2010-01-20 6 views
7

Alors imaginez que j'ai un référentiel local que j'ai cloné d'origine. Au moment de mon clone initial, l'origine avait quatre branches: featureA, featureB, featureC et master. Si je pousse des modifications à l'origine qui suppriment la fonctionA branche j'attends de voir quelque chose d'être supprimé la prochaine fois que je lance:Comment est-ce que je laisse dire à Git de m'avertir à propos des branches distantes éventuellement supprimées?

$ git pull origin

Cependant, ce qui se passe est que je ne vois rien et lorsque je tente de tirer cette branche spécifique vers le bas avec

$ git pull origin featureA

Je reçois l'erreur suivante:

fatal: Couldn't find remote ref featureA
fatal: The remote end hung up unexpectedly

Cela tout à fait logique, comme e La branche a été effacée de la télécommande alors oui, l'arbitre n'est plus là mais je me demande pourquoi je n'ai pas été averti de ce fait. Mon .git/config pour la télécommande ressemble à ceci:

[remote "origin"]
fetch = +refs/heads/:refs/remotes/origin/
url = [email protected]:/data/git/perecep.git

J'ai écrit un petit script shell qui utilise le git ls-distance avec la sortie de branche git -r à détecter les refs distants dont les branches n'existent plus sur le serveur et m'indiquer si je voudrais les supprimer mais je me demande si je fais juste quelque chose de fondamentalement faux ici?

Répondre

2

Je ne pense pas que vous fassiez quelque chose de mal. Votre branche locale ne dépend pas de la branche distante pour l'existence, et c'est un état de choses parfaitement valide pour une branche distante à supprimer pendant que votre branche locale (du même nom et ostensiblement la même histoire) continue à exister. C'est l'approche «centralisée» que vous décrivez, si elle existe, qui serait considérée comme peu orthodoxe dans Git.

Éditer: Tangentiellement, les options --track et --no-track de git-branch peuvent vous intéresser, ainsi que la variable de configuration branch.autosetupmerge.

+0

Je suivais un plus workflow « serveur central » avec Git b/c je suis dans un environnement d'entreprise, ce qui est la façon dont les développeurs avec les ordinateurs portables préfèrerait partager du code (en créant des branches de sujet public sur un serveur central pour pousser leurs changements à la collaboration) pour le moment. Depuis que nous sommes nouvellement passés de SVN c'est quelque chose qu'ils sont plus à l'aise avec. Je suppose que mon souci est que, après avoir créé plusieurs branches éphémères de cette nature qui sont supprimées après l'intégration de la fonctionnalité/sujet, tous les développeurs ont maintenant des tonnes de références distantes obsolètes dans leur repo local. – NewGitUser

3

Bon, pas besoin de script spécial. Je suppose que je négligé cette commande

$ git remote prune origin

De la page man:

 
    prune 
      Deletes all stale tracking branches under . These stale branches 
      have already been removed from the remote repository referenced by 
      , but are still locally available in "remotes/". 

      With --dry-run option, report what branches will be pruned, but do 
      no(sic) actually prune them. 
+0

Y at-il un réglage qui le fait automatiquement lorsque vous mettez à jour la télécommande? – xenoterracide

Questions connexes