2009-11-19 5 views
5

Je fais partie d'une équipe utilisant Git en ce moment, et nous avons un bon flux de travail. Nous avons un référentiel central avec deux branches, dev et master. Nous créons des succursales locales pour travailler sur des tâches individuelles. Nous fusionnons en dev quand ils sont prêts. Ensuite, nous fusionnons pour maîtriser quand les choses sont prêtes, et nous marquons toutes nos versions. Si plusieurs développeurs ont besoin de coopérer plus directement sur une tâche, nous pouvons créer une autre branche, éventuellement temporaire, à distance pour qu'ils puissent partager des correctifs. Cela fonctionne plutôt bien pour nous, mais cela nous laisse deux problèmes.Comment gérer les sauvegardes et surveiller Git avec un référentiel central?

Un problème est le problème des sauvegardes. Bien sûr, la majeure partie de la base de code est sauvegardée. Chaque machine qui possède un clone du référentiel contient la plus grande partie du code. Cependant, le code que quelqu'un écrit au cours d'une journée n'est pas sauvegardé jusqu'à ce qu'ils fusionnent pour dev et pousser. Si la tâche sur laquelle ils travaillent est non-triviale, cela peut prendre quelques jours avant qu'ils aient quelque chose à fusionner et à pousser. Comment nous assurer que ce code de travail en cours est sauvegardé dans un endroit sûr central? Utilisez juste une solution de sauvegarde externe à Git?

Le deuxième problème est la question de la surveillance des progrès des employés. Le (s) gestionnaire (s) veulent être en mesure de voir quel code les développeurs ont écrit chaque jour. Si un jour passe où vous n'avez rien poussé, il semblerait que vous n'avez rien fait toute la journée. Nous avons besoin d'un moyen de montrer notre travail sur une base quotidienne qui ne nous oblige pas à commettre et pousser le code qui n'est pas prêt pour s'engager, fusionner et pousser.

Une solution que nous avons envisagée consiste à créer une branche distante sur le référentiel central pour chaque branche locale que nous créons. Cela fonctionnerait probablement, mais ce serait un gros désordre encombré, même si nous supprimions régulièrement de vieilles branches inutilisées. C'est aussi beaucoup de travail supplémentaire pour gérer tout ça. Comment pouvons-nous satisfaire ces exigences commerciales sans perturber notre flux de travail Git?

+0

En général, je trouve la: branche tout en travaillant sur ce pousser à la sauvegarde à la fin de la journée supprimer une fois que vous avez pas besoin de lui plus et il a été incorporé à la branche principale processus fonctionne très bien. – Kzqai

+0

Bah, mal formaté, mais vous avez l'idée, l'utilisation de tout ce pouvoir de branchement dans un schéma de nommage-est-organisé est simple et utile. – Kzqai

Répondre

3

Vous pourriez envisager de faire quelque chose comme ça. Utilisez un espace de noms autre qu'une branche pour les sauvegardes de développeurs privées. Par exemple. refs/backups/xxx/* où xxx est l'identifiant ou les initiales de l'utilisateur du développeur ou similaire.

Un développeur peut alors faire git push origin +refs/heads/*:refs/backups/xxx/* pour sauvegarder toutes ses branches locales. Par défaut, les développeurs ne voient pas les sauvegardes privées des uns et des autres, mais ils peuvent être récupérés si nécessaire. Par défaut, les développeurs ne voient pas les sauvegardes privées de l'un et de l'autre.

La commande push backup peut être transformée en une commande git backup via un alias.

Autant que je pense que ce n'est pas une bonne idée, les branches privées d'un développeur peuvent être utilisés pour voir son «progrès», il ressemble beaucoup à la micro-gestion.

Editer: En l'écrivant, cela m'a semblé assez familier et puis je me suis souvenu pourquoi. J'ai écrit quelque chose de similaire en réponse à une autre question il y a un certain temps: link.

+0

C'est une bonne solution pour les sauvegardes. Cependant, comment quelqu'un d'autre peut-il vérifier mes sauvegardes? – Apreche

+0

Oui, pour nous c'est une "fonctionnalité" pas un problème. Si vous voulez vraiment des sauvegardes privées, vous avez vraiment besoin d'un référentiel de sauvegarde séparé par utilisateur. –

2
  • dépôts individuels de sauvegarde

  • Créer un référentiel "de sauvegarde", à laquelle autre poussée a fini le travail dans refs/remotes/<username>/ espace de noms:

    [remote "backup"] 
        url = [email protected]/srv/git/backup.git 
        push = +refs/heads/*:refs/remotes/user/* 
    
  • utilisation Gerrit: voir "Gerrit: Google-style code review meets git" article à LWN.net

Questions connexes