2009-08-12 11 views
12

J'ai entendu dire qu'il est possible d'avoir un référentiel Git local sur une machine de développement, tout en conservant une copie maîtresse du code source stockée dans un référentiel svn. Un bon cas d'utilisation serait que vous disposiez d'un référentiel svn central avec lequel chaque développeur travaille. Un développeur se déconnecte occasionnellement et souhaite suivre les modifications qu'il/elle effectue en mode hors connexion. Lorsque le développeur est de nouveau en ligne et a accès à svn, ses modifications de copie de travail peuvent être vérifiées dans svn. Je vais bien perdre l'histoire des changements qui se sont produits localement avec Git, quand les fichiers sont vérifiés dans svn.Utiliser le référentiel Git local avec un référentiel maître Subversion

Quelqu'un peut-il décrire comment tirer le meilleur parti de cela? Y a-t-il des pièges à travailler comme ça?

Répondre

4

Vous pouvez utiliser quelque chose comme this tutorial comme point de départ. J'ai aussi lu this tutorial.

Il existe plusieurs pièges à ce mode de fonctionnement. Le plus important est que vous ne pouvez pas utiliser svn version 1.5 mergeinfo et espérer que cela survive via git. C'est un inconvénient majeur si vous utilisez la fonctionnalité de fusion svn 1.5 (sans doute assez décente).

La page de manuel pour git-svn contient également des notes sous les «mises en garde» que vous devez comprendre. Une fois que j'ai compris toutes les mises en garde j'ai compris les avantages de l'utilisation de cette configuration pour être inférieur au coût réel pour mon cas spécifique. Donc, j'ai utilisé mon énergie pour convaincre le projet de passer à la place git, quelque chose que je reussi

1

Je pense que le meilleur cas d'utilisation pour git-svn est si vous êtes obligé de travailler avec un référentiel svn central, mais que vous souhaitez travailler personnellement avec git. Ou peut-être que la plupart des membres de l'équipe se sentent plus à l'aise de travailler avec svn en ce moment. En utilisant git-svn, vous ne perdrez pas l'historique des validations faites dans le dépôt git local.

Si vous créez un nouveau référentiel et/ou avez la liberté de choisir, je choisirais l'un ou l'autre. git-svn fonctionne bien, mais vous devrez toujours lutter contre le «désaccord d'impédance» entre les deux systèmes.

S'il s'agit simplement d'un modèle centralisé que vous cherchez à implémenter, un référentiel git public pourrait être utilisé comme référentiel central. Voir la section du manuel d'utilisation de Git au setting up a shared repository.

2

Une solution que je voudrais essayer est:.

  1. Commander de repo central en utilisant SVN
  2. git init créer repo locale
  3. ajouter à svn .gitignore
  4. git add * pour ajouter tous les fichiers repo locaux
  5. Est-ce que toutes vos branches intermédiaires/engage/git dans revient.
  6. Lorsque vous avez terminé, retournez au dépôt central en utilisant SVN.
4

que votre repo SVN est à svn + ssh: // nom d'utilisateur @ svn_server/svn/your_repo
et votre dépôt SVN a une mise en page "appropriée" (tronc, branches, tags) est ici Workflow J'utilise depuis quelques mois:
1.'mkdir your_repo'
2. 'cd your_repo'
3. 'clone git svn -s svn + ssh: // nom d'utilisateur @ svn_server/svn/your_repo. '(esprit le point)
4. [attendre un certain temps en fonction de la taille de votre dépôt :)]
maintenant votre GIT « maître » que les pistes du tronc SVN
vous pouvez également faire une branche de suivi comme vous le feriez normalement faire avec git si vous travaillez sur une branche
5. pirater Kof kof
traditionnelle 6. Mettez à jour votre clone avec 'git svn chercher & & git svn rebase'
7. "push" vos modifications à svn avec 'git svn dcommit '

Plus bonnes choses
alias pratiques suivantes Define dans votre .gitconfig:
1. Alias' spull 'qui signifie svn-pull comme ceci:'! spull = git svn chercher & & git svn rebase '
2. Alias' SPUSH 'qui signifie svn-push comme ceci:'! SPUSH = git svn dcommit '
Ces alias transforment le flux de travail pour l'efficacité pure clone/Kof kof/spull/SPUSH ->profit

svn: externals
je ne pouvais pas trouver un bonne solution pour cela sur internet, donc fait moi-même :)
http://github.com/sushdm/git_svn_externals ce n'est pas encore parfait, mais il devrait définitivement rendre la vie beaucoup plus facile.

Fonctionne parfaitement pour moi, j'espère que cela vous aidera.

Questions connexes