2010-05-04 6 views
2

J'ai fait une application pour un client appelé 'A' (pas vraiment).Git et clonage

J'ai trouvé qu'il est très cool et que je veux le vendre à d'autres clients aussi. Le répertoire 'A' est un dépôt Git. Je pense que j'ai un problème avec le clonage. Pour autant que je puisse voir, j'ai besoin de faire une copie du dir 'A' et de l'appeler 'Generic_A'. Puis supprimez le dir 'A' et faites un "git clone Generic_A A" Ensuite, je pourrais commencer à changer le repo 'Generic_A' avec un design générique et toutes les références clients supprimées. Mais c'est un peu l'inverse. J'aurais dû commencer à faire le design générique et ensuite cloner le repo pour passer à la conception spécifique au client.

Puis-je:

  1. faire une nouvelle branche
  2. faire tous les changements pour rendre la conception générique
  3. créer un patch qui reflète les changements entre les deux
  4. supprimer la branche spécifique du client
  5. renommez le répertoire à 'Generic_A'
  6. clone le repo à un nouveau répertoire 'a'
  7. appliquer le correctif pour récupérer les choses spécifiques du client

Et si oui - comment puis-je créer le correctif et l'appliquer?

Cordialement,

Jacob

Répondre

0

qui pourrait fonctionner, bien qu'entre 6 et 7. Je voudrais faire une branche 'client_a' avant d'appliquer votre patch. L'inconvénient est que vous perdez les spécificités de l'historique de validation pour le client A, puisque vous appliquez ce correctif dans un grand commit.

Dans votre cas, un patch peut être fait avec git diff, voir patching with git diff

git diff --no-prefix > patchfile 

appliquer le correctif:

patch -p0 < patchfile 

Si vous avez un existant " git diff "Fichier de correctif créé sans le préfixe" --no-prefix " ion, vous pouvez appliquer ce patch via:

patch -p1 < patchfile 

ce ignorera la valeur par défaut a/b/préfixes source.

+0

Merci beaucoup pour votre réponse. Pourquoi voudriez-vous créer la branche 'client_A'? Pourquoi ne pas simplement appliquer le patch sur la branche master? C'est après tout un clone du générique. – jriff

+0

BTW - Je sais de perdre l'histoire mais je peux vivre avec ça dans ce cas. – jriff

+0

@jriff: une branche '' client_A' vous permet de laisser la branche master seule, prête à être mise à jour par vos évolutions master 'Generic_A' quand vous faites la prochaine' git pull' – VonC

1

Voici un possible flux de travail:

  • On A dir:
    • Créer une nouvelle branche 'générique' de la branche 'client-A'.
    • Utilisez 'git rebase -i' sur la branche 'Generic' pour supprimer tous les éléments A du client.
    • Utilisez 'git rebase client-A generic' pour rebaser votre client-Une branche sur le générique.
  • Renommer votre dir dir générique
  • clone votre dir générique à un nouveau client-A dir
  • supprimer le client une branche dir générique.

De cette façon, vous garderez l'historique de la branche client-A.

Questions connexes