2010-08-27 3 views
8

Comment puis-je modifier r0 alors il semble que j'ai ajouté .hgignore lors de la création de mon référentiel ou de l'insertion d'un commit avant mon r0 actuel?Comment puis-je insérer ou modifier une révision mercurielle?

Je viens de convertir un énorme repo SVN en utilisant hgsvn à mercurial. Il a fallu plusieurs heures et a dû passer par une douzaine de succursales pour obtenir le tout. Mon problème est maintenant que .hgignore n'est pas engagé, donc quand je hgimportsvn une branche, le .hgignore ne semble pas venir avec. Je voudrais insérer ce fichier dans le cadre de r0 ou l'insérer avant cela (et tout déplacer de 1). J'ai également essayé de le commettre à la fin de ma caisse de Mercurial, mais il semble toujours hgimportsvn clones (branches?) De la même révision Mercurial ma branche SVN a été créée à partir de .hgignore est à nouveau perdu.

+0

hg l'histoire est conçue pour être immuable. Cependant, votre meilleur pari est soit de (1) réimporter le tout, mais en ajoutant votre fichier avant l'importation ou (2) faire des files d'attente hg danser. –

Répondre

5

Vous avez probablement besoin de quelque chose comme ConvertExtension. Découvrez l'option --splicemap.

Pour créer une nouvelle histoire avec un fichier .hgignore ajouté que la première révision:

  1. Créer un nouveau référentiel dont la seule révision est le .hgignore commettras.
  2. Créez un fichier splicemap contenant deux hachages de 40 caractères: rev 0 de votre base de données actuelle et rev 0 de votre nouvelle base de données.
  3. Run hg convert <current_db_dir> <new_db_dir> --splicemap splice_filename

Cela ajoute chaque révision dans la base de données actuelle vers la nouvelle base de données. Le splicemap spécifie l'édition des parents, donc si la révision 0 de la base de données courante obtient son parent à la révision 0 de la nouvelle base de données. Ci-dessous un fichier de commandes Windows qui crée une base de données de 3 révisions et une base de données de 1 révision avec un fichier .hgignore, les épissure ensemble. Le résultat devrait être ce que vous cherchez. Si vous disposez d'une base de données d'origine importante, cela peut prendre un certain temps, car l'intégralité de l'historique de la base de données source est réécrite dans la base de données de destination.

@echo off 

@REM Create a 3-revision database 
hg init current 
cd current 
echo >file1 
hg add 
hg ci -m file1 
echo >file2 
hg add 
hg ci -m file2 
echo >file3 
hg add 
hg ci -m file3 

@REM Add the first revision to the splice map 
hg log -r 0 --template "{node} " > ..\map 

@REM Display the result 
hg log 
cd .. 

@REM Create a 1-revision database 
hg init ignore 
cd ignore 
echo glob:*.txt>.hgignore 
hg add 
hg ci -m ignore 

@REM Specify this node as the parent of the other 
@REM database's first revision in the splice map 
hg log -r 0 --template "{node}\n" >> ..\map 
hg log 
cd .. 

@REM Here's the resulting splice map 
type map 

@REM Make a copy to store the result 
hg clone ignore result 

@REM Add revisions from "current" to "result" honoring 
@REM the splice map 
hg convert current result --splicemap map 

@REM Display the result 
cd result 
hg log 
+0

J'utilise hgsvn parce que je ne pouvais pas faire en sorte que ConvertExtension fasse ce que je voulais. Alors que l'épissure pourrait être la bonne solution, je ne comprends pas comment l'utiliser dans ma situation. –

+0

@Asa, j'ai mis à jour ma réponse avec un exemple en utilisant 'hg convert'. J'espère que ça aide. –

+0

Brillant anwer, merci! – CharlesB

Questions connexes