À l'aide de git-svn: Tirer, de Fusionner ou de Rebase?
J'ai été la lutte contre le git/git-svn courbe d'apprentissage et la nuit dernière, dans le cadre de cette courbe d'apprentissage, j'ai fait quelque chose de très, très mauvais. Depuis, j'ai obtenu qu'il a corrigé, mais je suis l'espoir de comprendre l'erreur de mes moyens.
J'ai un dépôt svn à partir de laquelle j'ai cloné le tronc et les branches (les balises je l'ai ignoré, car nous ne travaillons pas sur ceux-ci). L'utilisation de git, j'ai créé des branches locales, pour chacune des branches que j'ai besoin de travailler avec:
$ git checkout -b trunk svn/trunk
$ git checkout -b feature1 svn/branches/development/feature1
$ git checkout -b maint svn/branches/maintenance/previous-version
J'ai fait feature1 ma branche active et fait quelques modifications avant de se dérobe pour quelques jours. Je cam de hier voulu intégrer toutes les modifications qui ont été apportées au tronc, de sorte que j'ai travaillé avec la dernière et la plus grande. Ce que j'ai fait une mise à jour complète de tous les brances tout d'abord, via git svn rebase (personne n'avait travaillé sur le feature1 branche). Avec tout jusqu'à la date de mon dépôt svn, j'ai essayé de rebase.
Avec feature1 que ma branche active, j'ai fait un "git rebase tronc" en pensant que je serais en tirant des modifications du tronc en la feature1 branche. En fait, j'ai très, très mal. Après la fusion de tous les conflits, j'ai fait un git svn dcommit et constaté que mes modifications ont été appliquées pour le tronc.
Ma première question est simplement où était le cœur d'erreur dans mon processus de pensée? Mon second est, après beaucoup de lecture et de recherches sur Google, je vois des personnes adhérant à la tire, des fusions et des rebases. Compte tenu du fait que je veux fusionner les modifications appliquées dans une succursale à l'autre branche locale, ce qui devrait que j'ai fait? Quelle est la meilleure pratique pour ce scénario?
Merci pour votre aide.
Vous devez vous connecter pour publier un commentaire.
Le problème que vous avez couru dans est que la syntaxe de ligne de commande pour rebase ne correspond pas à votre (très raisonnable, OMI) des attentes.
Cette séquence ajoute le partage de feature1 s'engage sur la TÊTE du tronc, et que vous attendiez qu'il ferait de la nouvelle tronc s'engage sur la TÊTE de feature1.
La syntaxe de la réalité est un peu logique quand on sait comment Git du modèle de données est mis en œuvre (qui est sans doute pourquoi c'est la façon dont il est). Mais pour moi c'est le contraire de ce que j'attends, fonctionnellement. Il est préférable d'apprendre comme un arbitraire de construire et de ne pas essayer d'avoir des attentes.
Vous avez raison, vous comprenez la façon d'interagir avec le repo SVN en utilisant git-svn. Donc ignorer ce que vous avez trouvé dans Google à propos de traction et de poussée et de fusion, il y a un terrain de près de discussion sur les droits par les personnes qui agissent comme si de traction et de poussée et de fusion sont les mêmes dans git et svn. Près de la droite est toujours mal.
Vous devez utiliser git svn clone -s de clone complet svn de l'arbre, y compris toutes les branches. À partir de là, l'utilisation git svn rebase et git svn dcommit en maître à traiter avec svn, et vous pouvez créer régulièrement des branches git pour votre usage privé.