2010-04-06 15 views
2

Je suis nouveau à git et j'essaie de comprendre si cela peut résoudre mon problème.Récupérer depuis svn. Commettre à distance git

Un projet a un référentiel svn public en lecture seule. Je veux faire et suivre mes propres changements à sa source au fil du temps. Tout en récupérant les modifications du repo svn. Bien sûr, je peux le faire facilement avec git-svn. Je ne fais jamais de dcommit.

Le problème supplémentaire est que je travaille à partir de plusieurs emplacements. Ainsi, j'utilise un repo distant pour synchroniser les fichiers entre ces emplacements. C'est aussi une autre chose que je peux faire facilement avec git, en utilisant un repo git à distance.

Mais les mettre ensemble et j'ai:

  • rapportez de svn
  • à distance engager à git locale
  • traction/poussée à git à distance.

Est-ce un workflow raisonnable avec git? Quand, au fil du temps, mes propres changements/commits seront entrelacés avec des mises à jour du repo svn. Si oui, comment dois-je le configurer. Signification, Devrais-je avoir chaque emplacement de travail ont son git locale chercher directement à partir du svn à distance, de manière totalement décentralisée. Ou devrais-je sortir de mon chemin pour avoir le repo git à distance unique faire le svn chercher lui-même. Pour faciliter la coordination des changements de svn sur les divers gits locaux, c'est-à-dire qu'ils ressemblent à leurs justes changements du repo git distant.

Je peux exécuter git-svn uniquement sur l'hôte distant repo git si nécessaire.

+0

Un additif. Cette solution a fonctionné. J'ai un repo de git-svn à l'endroit éloigné. Je peux même pousser mes propres changements à ce repo git. Mais j'étais incapable de trouver une solution pour créer un repo "bare" qui a fonctionné avec git-svn. Aussi pour pousser à [master] (pas [origin/master] cependant) sur un repo non nu, j'ai dû modifier la config repo. Sinon, vous êtes rejeté (pour de bonnes raisons). – DragonFax

Répondre

1

Si vous pouvez exécuter git-svn sur votre serveur distant, je vais pour une configuration comme ceci:

  • utiliser une branche spéciale pour le suivi du dépôt en amont svn. Faites en sorte que le serveur hébergeant le référentiel git trace le svn de suppression en utilisant git-svn dans une branche connue (par exemple, upstream).
  • tirez à partir de ce référentiel distant
  • utilisez une branche distincte pour vos modifications (ou plusieurs branches de rubrique).Fusionnez les modifications de branche en amont vers vos branches de sujet. Vous pouvez alors toujours faire la différence entre votre branche de sujet et la branche amont et vérifier les différences. Si vous ne publiez pas la branche de sujet, vous pouvez également utiliser rebase, de sorte que vos modifications soient toujours appliquées en tant que correctifs au-dessus des modifications en amont.

Si vous ne pouvez pas exécuter git-svn sur le serveur distant que je le ferais assez similaire, mais ayant le serveur distant en tirant les changements svn est beaucoup plus agréable que vous ne devez pas vous inquiéter à ce sujet.

1

Git peut le faire assez facilement.

Essayez ceci:

git svn clone svn-url 

qui prend soin d'aller chercher de la svn à distance. Vous pouvez ensuite utiliser git comme vous le souhaitez avec des branches etc et continuer git svn tirant sur le maître, la fusion des changements dans votre branche de développement, etc. J'ai tendance à utiliser un dépôt séparé bien et faire:

git remote add svn /path/to/git/repo/cloned/from/svn 

Et tirer de la svn clone dans mon dépôt de développement. C'est juste une préférence personnelle mais elle garde mon dépôt "import" propre et mon dépôt de développement pense juste que c'est la base de code en amont. Je pourrais tirer d'autres dépôts git de cette façon aussi; Je ne suis jamais sûr de le faire en haut d'un dépôt git-svn car je ne m'engage jamais personnellement à revenir sur svn ... pour le moment. Vous pouvez alors

git remote add server remote-repo 
git push server {branch} 

Comme d'habitude.