Git: branche ou fourchette?

17

J'ai un projet de jeu qui aura deux versions:

  1. Une version simple du jeu, le noyau.
  2. Une version avancée du jeu.

J'ai la 1ère version dans mon référentiel public, et seulement je vais y travailler. Quant à la 2ème version, deux de mes amis et moi allons y travailler. La partie cruciale est que je souhaite que les deux versions restent dans mon référentiel.

J'ai pensé que je pourrais utiliser des branches pour cela, mais compte tenu de cette question et de sa réponse , ce n'est pas une bonne pratique de le faire en termes de version. Pour autant que je l'ai découvert, la création de votre propre référentiel n'est pas possible.

Quelles sont mes options ici? Comment puis-je conserver les deux versions dans mon référentiel?

Varaquilex
la source
3
Une fourchette est une branche, juste stockée à un autre endroit.
@MichaelT Ok. Les fourches sont-elles destinées à être fusionnées à un moment donné, comme les branches?
Varaquilex
22
Fork est un concept github, pas un concept git. Il clone simplement et le place dans votre compte. Le clonage est donc ce que vous recherchez. Voir stackoverflow.com/questions/6286571/git-fork-is-git-clone
pdr
@Varaquilex Way auriez-vous besoin de conserver les deux versions dans un même référentiel? De plus, forkun référentiel créera un nouveau référentiel dans votre compte.
Mahdi
1
Pourquoi ne pas avoir une seule version qui peut fonctionner en mode simple ou en mode avancé? Bien sûr, certaines parties du code ne seraient actives qu'en simple et certaines parties uniquement en avancé, mais j'imagine que beaucoup seraient partagés.
bdsl

Réponses:

11

Il me semble que vous avez besoin de deux référentiels et non de deux succursales . Une branche est un mécanisme permettant de gérer les modifications au sein d'un même référentiel afin de les fusionner éventuellement avec le reste du code.

Si vous voulez vraiment garder les deux versions d'une base de code similaire dans le même référentiel, alors votre seule option est d'opter pour une branche , mais comme mentionné précédemment, le but principal d'une branche est de séparer certaines validations spécifiques d'une manière qu'ils n'entrent pas en conflit avec le reste du code pendant la période de développement et les fusionnent lorsqu'ils sont prêts à fonctionner.

Il y a des situations où un référentiel a deux branches légèrement différentes - par exemple les versions 32 bits et 64 bits du même code source, mais je vous recommanderais quand même de choisir des référentiels séparés, si c'est une option.

Mahdi
la source
6

La réponse à la question "Dois-je cloner ou bifurquer" est exactement la même que la réponse à cette question "Est-ce que je veux ma propre version personnelle de ce projet?" yes = fork, no = clone le référentiel.

Dans git, la branche est une chose légère qui est souvent temporaire et peut être supprimée. Un fork (sur github) est un nouveau projet basé sur un projet précédent. Vous clonez un référentiel pour y travailler en tant que membre de l'équipe.

De nombreux projets publics vous obligent à bifurquer le projet pour garder les modifications de travail hors du projet principal.

Pour la phase 2, forkez le projet, puis clonez-le sur votre ordinateur de travail et demandez à vos amis de faire de même.

DwB
la source
Comment puis-je créer mon propre projet?
Varaquilex
sélectionnez le référentiel dans github puis cliquez sur fork (bouton en haut à droite pour moi)
DwB
Je sais comment faire ça, le truc c'est que lorsque vous essayez de cloner votre propre projet, vous êtes simplement redirigé vers le référentiel, comme vous avez appuyé sur le bouton Actualiser. Aucun référentiel supplémentaire n'est répertorié lorsque vous parcourez vos référentiels après avoir essayé de créer votre propre projet. Je pense que je vais faire un nouveau dépôt, copier le contenu de l'autre dépôt que je veux créer et continuer à travailler avec d'autres personnes là-bas.
Varaquilex
0

Cela ressemble vraiment à ce que vous voulez, c'est un sous-module. Si vous créez le premier référentiel (votre référentiel simple privé), puis l'ajoutez en tant que sous-module au référentiel de version avancée, vous devriez pouvoir suivre et extraire les modifications apportées au sous-module dans le référentiel avancé lorsque vous développez le référentiel simple privé.

Ryan Holleran
la source
1
Plusieurs personnes ont pris le temps de répondre à -1 par Ryan, mais n'ont pas pris le temps d'expliquer pourquoi, et ce comportement va à l'encontre de l'esprit des directives de SO. Si dans la question du PO, le "noyau" était identique dans les deux arbres, ayant à la fois un wrapper "simple" et "avancé" autour du noyau, alors cette réponse est au moins raisonnable.
Scott Prive
J'ai voté positivement, mais il devrait probablement inclure une explication comme la vôtre qui explique pourquoi un sous-module serait bon et comment cela fonctionnerait. Diviser le code commun en une bibliothèque pouvant être incluse en tant que sous-module est une bonne idée, mais sans spécifier que cela devrait être fait, la suggestion d'un sous-module ne semble pas immédiatement logique.
Sean Burton