2017-01-27 1 views
1

Comment organiser correctement plusieurs branches ayant chacune un système de fichiers différent?Git - Plusieurs branches avec différents systèmes de fichiers

Voici la situation -


J'ai deux branches:

  • maître actuel avec les fichiers de projet qui ont été faits il y a un an
  • actuel se développer avec de nouveaux fichiers de projet (cadre complètement différent) qui est sur le point de se développer et à un moment de basculer


Le point où les choses Le problème est que develop brach a, par exemple, le dossier "storage" qui est ignoré par le fichier .gitignore. L'autre branche n'a pas ce dossier (et c'est pourquoi il n'est pas aussi dans son fichier .gitignore). Lorsque je passe de développer à master brach, ce dossier "stockage" apparaît soudainement dans une autre branche où il ne devrait pas être du tout.

Comment puis-je spécifier à chaque projet quels fichiers/dossiers ne doivent pas être envoyés au serveur et en même temps quels fichiers/dossiers doivent coller avec chaque branche sans passer par les branches à chaque caisse.

J'ai réussi à résoudre ce problème en ajoutant ce dossier au fichier .gitignore dans le projet où ce dossier ne devrait même pas exister (c'est comme ça que je ne vois pas de fichiers inchangés qui devraient être validés) mais je suppose ce n'est pas la meilleure solution parce que pourquoi exclurais-je quelque chose qui ne devrait même pas être là?

Cela devient encore plus compliqué lorsque j'utilise PHPStorm IDE. PHPStorm crée dans chaque projet (dans ce cas - chaque branche) le dossier ".idea" où se trouvent tous les fichiers de configuration et d'historique pour un projet spécifique. Évidemment, je ne veux pas envoyer ce dossier au dépôt distant (parce que chaque développeur a son propre dossier .idea pour chaque projet), c'est pourquoi je l'exclure dans le fichier .gitignore (je l'ai fait pour les deux branches car chaque branche son propre dossier ".idea"). Quand je checkout à une autre branche, ce dossier se déplace vers cette branche ce qui ne devrait pas arriver parce que ce dossier .idea ruine le dossier .idea d'une autre branche. Toutes les configurations sont foirées.

Pourquoi deux systèmes de fichiers de projet différents comme deux branches et non deux projets? - Parce que c'est le même projet. Juste une toute nouvelle version qui sert le même design visuel, la même fonctionnalité et ajoute beaucoup de fonctionnalités supplémentaires. Cela n'a aucun sens de l'appeler comme un autre projet. C'est une version différente mais le même projet.

Répondre

2

Si vous ignorez les fichiers/dossiers avec .gitignore, ils sont ignorés par Git, fullstop. Ils ne sont pas suivis et ne sont pas mutilés, ils sont simplement ignorés. Ils ne sont pas ajoutés, modifiés ou supprimés, mais entièrement ignorés. Ils ne sont affectés à aucune branche, car ils sont ignorés.

Je pense que dans votre cas, il serait préférable d'avoir plusieurs workstrees pour les différentes branches. Un worktree est le répertoire dans lequel les fichiers réels sont extraits pour que vous puissiez travailler. Avec git worktree, vous pouvez ajouter plusieurs workstrees à un référentiel, ce qui permet d'avoir différentes branches extraites dans différents répertoires de travail.

De cette façon, vous pouvez avoir le dossier a pour la branche a, où vous avez ignoré .idea pour la branche a et le dossier b pour la branche b où vous avez ignoré .idea pour la branche b.

En fait, la plupart des fichiers dans .idea (par exemple, pas le workspace.xml, mais je pense que tous les autres fichiers) ne sont pas spécifiques au développeur, mais spécifique au projet. Donc tout sauf workspace.xml est censé être en mesure d'être enregistré dans le contrôle de version, de sorte que si vous basculez vers une branche différente, vous avez les métadonnées IDE correctes pour cette branche facilement disponibles et /.idea/workspace.xml ajouté .gitignore comme cette Le fichier contient des éléments spécifiques au développeur, tels que les configurations d'exécution non partagées, les fichiers ouverts, la disposition de la fenêtre d'outils, les positions des fenêtres, etc. Donc, cela pourrait être une autre solution à considérer.

+0

Cela semble une façon de le gérer correctement. Pour une raison ou une autre, je n'ai rien remarqué à propos de worktrees pendant que je cherchais une réponse à ce problème. Je vais essayer de les utiliser et si cela va résoudre mon problème, je vais accepter cela comme réponse correcte. –