2010-07-21 7 views
2

J'ai migré avec succès mon référentiel SVN avec des balises dans Git en utilisant git svn-clone. Toutefois, git svn-clone ne migre pas svn:externals. Par conséquent, j'ai décidé de modifier l'arborescence en utilisant git filter-branch.Comment modifier le dépôt git pour ajouter des sous-modules dans TOUTES les révisions passées?

Pour svn:externals, j'ai d'abord créé un référentiel Git distinct pour chaque svn: externals, puis j'ai essayé d'utiliser ce qui suit, mais cela n'a pas fonctionné.

$ git filter-branch --tree-filter "git submodule add [email protected]:myAcc/mySubmodule.git mySubmodule" HEAD 
Rewrite a013a219e4294d4ee66b323cf1db9c170d90130a (1/4)fatal: working tree '.' already exists. 
Clone of '[email protected]:myAcc/mySubmodule.git' into submodule path 'common' failed 
tree filter failed: git submodule add [email protected]:myAcc/mySubmodule.git mySubmodule 
rm: cannot remove `c:/myRepo/.git-rewrite/revs': Permission denied 
rm: cannot remove directory `c:/myRepo/.git-rewrite': Directory not empty 

Une idée de comment accomplir ceci? Merci beaucoup d'avance.

+1

Ne pas oublier 'submodules' git ne sont pas exactement un équivalent de' svn: externals ': http://stackoverflow.com/questions/3131912/why-are-git-submodules-incompatible-with-svn-externals/3132221#3132221 – VonC

+0

Merci pour l'avertissement. J'ai négligé le fait que 'git submodule' pointe vers un commit. Pas sûr dans ce cas, c'est une option pour moi. Je veux pointer le sous-module vers HEAD chaque fois que l'on met à jour. – shadangi

Répondre

1

Je pense que vous pouvez le faire de cette façon, mais il peut être possible de le faire d'une manière plus propre:

  1. Créer un dépôt temporaire git vide
  2. Ajouter votre svn:external s à lui comme sous-modules et COMMIT ; noter le nom de ce SHA commit
  3. Allez dans votre ancien référentiel
  4. git fetch du dépôt temporaire
  5. git rebase <SHA of the only commit in the temporary repository>
+0

En fait, il ne semble pas si mauvais. quand on essaie de migrer le repo SVN à Git. Puisque vous ne le faites pas encore et encore. Mais maintenant, mon problème principal réside dans git-submodule lui-même. Je veux pointer mon sous-module vers la HEAD de ce module et non vers un commit particulier. Un aperçu? – shadangi

+0

AFAIK, un sous-module pointe toujours vers un commit particulier, vous ne pouvez pas pointer vers HEAD. – svick

Questions connexes