2009-05-09 5 views
2

Peut-être liée à Git - pulling changes from clone back onto the mastererreur de débutant git - comment récupérer

je travaillais sur un projet ASP.NET quand j'ai découvert que je devais faire un ensemble « expérimental » des changements qui peuvent ou non avoir été requises la version de production.

La chose la plus évidente à faire était de créer une branche.

Cependant, comme je connaissais darcs et svn, mais pas git, je suppose qu'un clone était la manière « normale » pour créer une branche (je sais maintenant que git branch aurait été plus approprié.)

I continué à travailler sur le changement expérimental dans le clone et, en même temps, d'autres changements dans le référentiel d'origine. Depuis, j'ai découvert que les changements expérimentaux sont souhaitable dans la version de production et que vous souhaitez fusionner les deux ensembles de changements.

Si j'avais initialement fait une branche au lieu d'un clone, ce serait trivial. Je suis sûr que ce n'est pas trop difficile de fusionner entre des référentiels séparés, mais après avoir parcouru les docs je ne pense pas que cela puisse être fait avec une seule commande (un simple pull ne fonctionne pas.)

Je n'ai pas (encore) explicitement configuré un dépôt comme un "distant" de l'autre, mais je suppose que cela fera partie de la solution.

Le référentiel amont à l'époque n'utilisait pas de VCS - c'était juste un répertoire plein de zips avec des numéros de version ajoutés aux noms de fichiers.

Je voudrais savoir:

  • Quelle est la meilleure façon de fusionner les ensembles de changement à travers les dépôts? (Je ne m'attends à aucun conflit majeur.)
  • À quel point est-il nocif de cloner au lieu de se ramifier? Ai-je perdu toute information en faisant cela, par ex. histoire partagée, dépendances communes?

Répondre

7

Dans votre dépôt git "non ramifié" d'origine, exécutez ces commandes:

git remote add name_it_anything /path/to/the/other/git/repository 
git fetch name_it_anything 
git merge name_it_anything/master 

qui fusionnera Inn tous les changements n name_it_anything. Si vous ne voulez pas tous, mais juste une sélection des commits, vous pouvez git log name_it_anything/master pour voir la liste des commits, puis git cherry-pick [SHA] pour chacun des commits que vous voulez fusionner.

0

Je pense que vous pouvez git-format-patch dans un dépôt, puis appliquer dans un autre. De cette façon, toutes les informations importantes sont conservées.

3

En ce qui concerne la deuxième partie de votre question:

Juste comment est-il nocif pour cloner au lieu de ramification? Ai-je perdu toute information en faisant cela, par ex. histoire partagée, dépendances communes?

Git est un système de contrôle de version distribué. Le point entier d'un DVCS doit être capable de fusionner les changements entre les différents dépôts.

+0

Oui, mais conserve-t-il toutes les informations sur les différences entre les dépôts, ainsi que sur les différences entre les branches? Ou y a-t-il un plus grand risque de ne pas résoudre les conflits? – finnw

+0

il va importer les commits de l'autre dépôt, donc oui, il aura des informations appropriées. Comme Jörg l'a dit, git a été spécialement conçu pour cela. Les gens clonent et fusionnent tout le temps, voir github.com par exemple –

Questions connexes