2009-05-22 7 views
4

J'ai joué avec git à la maison et j'aime vraiment l'idée de commits locaux. Etre capable de commettre de plus petits changements sans étendre mon code potentiellement cassé à tout le monde est sympa, tout en étant capable d'inverser les petits changements à cause des commits plus fréquents.Comment utiliser Git localement dans un environnement SVN + Visual Studio

J'ai lu à propos de la commande git-svn, mais je ne suis pas sûre de comprendre entièrement comment cela fonctionne. Nous travaillons sur des projets Visual Studio 2008, et exécutons VisualSVN qui gère les renames de fichiers, les mouvements, et tout cela pour nous à partir de l'IDE. Ce que je veux savoir est: Est-il possible pour moi de s'engager dans un dépôt git local, mais également de m'engager dans le dépôt SVN distant? Je souhaite que VisualSVN continue de suivre les changements et les validations à partir de l'EDI, mais aussi d'utiliser git pour stocker temporairement les modifications. Sont-ils susceptibles de se gêner mutuellement?

Répondre

1

J'ai utilisé git-svn pour conserver la "mise à jour" du dépôt distant, mais je ne l'ai pas utilisé pour valider dans un référentiel svn, donc je ne peux pas vous aider à propos de cette partie.

Ce que vous faites est simple, avec tous les paramètres par défaut sur:

>git svn init <url......> 
>git svn fetch 

Quand vous faites cela, il va chercher à une branche « à distance » appelé « git-svn ». Pour fusionner avec votre branche actuelle:

>git merge git-svn 

Vous pouvez rencontrer des problèmes si vous utilisez git-svn après le fait. Ce que je veux dire par là est: vous avez déjà vérifié le projet en utilisant svn, puis vous avez également créé un dépôt git dans votre répertoire svn de travail local. Ensuite, vous utilisez git-svn en plus de cela.

Deux questions que je devais traiter:

  1. fins de ligne. svn peut convertir des fins de ligne en fenêtres, tandis que git-svn les conservera dans le style unix. Vous pourriez donc avoir des tonnes de conflits dus aux différences de fin de ligne. Donc, bien sûr, utilisez un outil pour convertir les fins de ligne sur tous les fichiers en unix (ou windows, en fonction de la fin de ligne utilisée dans le repo svn).

  2. expansion de mot-clé svn. par exemple. $Id$

    git-svn ne développera pas ces mots-clés, tandis que svn sera. Donc, vous aurez également des conflits là-bas. Encore une fois, utilisez un outil (ou écrire un script) qui convertit toutes les instances de $Id .......crap.....$ juste Id $ `

$
2

Cela fonctionne magnifiquement. fonce. Il suffit de ne pas vérifier votre dossier .git dans svn.

edit: erm, quand je le fais bien, je ne me soucie pas de git-svn. Je traite simplement le répertoire de travail local pour svn comme n'importe quel autre répertoire, et j'ai tendance à ne pas me soucier de l'historique SVN précédent.

+0

Cool, je l'avais un peu comme pour obtenir l'histoire SVn précédent dans git, mais ce n'est pas disjoncteur –

Questions connexes