2010-06-02 5 views
0

J'ai eu 2 scripts similaires à Python, que j'ai depuis fusionnés en un seul (et prend maintenant quelques paramètres pour différer le comportement de manière appropriée). Les deux fichiers précédents sont dans le dossier de mon référentiel Mercurial. Comment puis-je indiquer que le nouveau fichier est une combinaison des deux fichiers plus anciens que j'ai l'intention de supprimer?Comment marquer un fichier comme descendant de 2 autres fichiers dans Mercurial?

Notez également que 1 fichier a été choisi en faveur de l'autre, et un code déplacé à travers, donc s'il est impossible de créer un fichier contrôlé version avec un nouveau nom, assimilant alors l'histoire d'un fichier dans le l'autre suffira.

Répondre

1

Ce n'est pas une solution parfaite, et il pourrait être trop tard pour le faire cette fois-ci, mais je pense que hg rename voulez-vous arriver là où vous voulez aller. Voici une séquence:

[email protected] [~/hg] % mkdir test 
[email protected] [~/hg] % cd test/ 
[email protected] [~/hg/test] % hg init 
[email protected] [~/hg/test] % echo stuff > file1 
[email protected] [~/hg/test] % echo different > file2 
[email protected] [~/hg/test] % hg commit --addremove -m 'adding both separately' 
adding file1 
adding file2 
[email protected] [~/hg/test] % hg rename --force file1 file2 
[email protected] [~/hg/test] % hg commit -m 'overwrote 2 with 1' 
[email protected] [~/hg/test] % hg grep --follow different file2 
file2:0:different 
[email protected] [~/hg/test] % hg grep --follow stuff file2 
file2:1:stuff 

Notez que le fichier grep trouve que « choses » était en révision fichier2 1 et « différent » était dans le dossier deux révision 0, afin que les deux histoires sont maintenant en fichier2.

+0

Quelle commande montre que le nouveau fichier est dérivé des deux fichiers précédents? –

+0

Je ne sais pas que l'on peut facilement le faire à partir de la ligne de commande. Peut-être que l'invocation de 'hg log --follow' pourrait le faire. L'argument --follow dit "suivre renomme dans le temps" ce qui explique pourquoi les hggreps ont trouvé des trucs à partir de fichier1 et de fichier2. –

+0

Eh bien, même si je ne pouvais pas travailler 'hg' pour montrer réellement la fusion ou le changement de nom dans son journal, c'est la solution facile que je recherchais. –

1

Ce qui suit est un exemple de fusion entre deux fichiers non apparentés "a" et "b".

Veuillez noter que j'utilise abusivement un format de liste parce que je n'arrive pas à comprendre comment utiliser ce système. Les lignes qui semblent être des en-têtes mais qui commencent comme "summary:" sont en réalité sorties de hg et se trouvent être la dernière ligne avant une ligne vide. Tous les autres en-têtes sont mes propres commentaires expliquant une commande/séquence et sa sortie. Les commandes apparaissent en ligne avec 'timeless-mbp: ... $'. Toutes les autres lignes sont sorties.

Configuration

timeless-mbp:~ timeless$ cd /tmp 
timeless-mbp:tmp timeless$ rm -rf q 
timeless-mbp:tmp timeless$ hg init q 
timeless-mbp:tmp timeless$ cd q 

Définir mon nom d'utilisateur

timeless-mbp:q timeless$ echo '[ui]' > .hg/hgrc 
timeless-mbp:q timeless$ echo 'username = timeless' >> .hg/hgrc 

d'abord créer, ajouter et engager fichier un

timeless-mbp:q timeless$ echo a > a 
timeless-mbp:q timeless$ hg commit -Am a 
adding a 

Démarrer à une nouvelle révision de zéro (null)

timeless-mbp:q timeless$ hg up -r null 
0 files updated, 0 files merged, 1 files removed, 0 files unresolved 

Créer, ajouter et COMMIT fichier b

timeless-mbp:q timeless$ echo b > b 
timeless-mbp:q timeless$ hg commit -Am b 
adding b 
created new head 

Revenez à notre premier fichier, ceci est juste pour créer une histoire version entrelacée

timeless-mbp:q timeless$ hg up -r 0 
1 files updated, 0 files merged, 1 files removed, 0 files unresolved 

Renommer un à fichier parce que nous voulons fusionner avec b sous le nom de « fichier »

timeless-mbp:q timeless$ hg mv a file 
timeless-mbp:q timeless$ hg commit -m 'rename a to file' 

Revenez à notre deuxième fichier, ceci est juste pour créer une histoire version entrelacée

timeless-mbp:q timeless$ hg up -r 1 
1 files updated, 0 files merged, 1 files removed, 0 files unresolved 

Renommer b pour le fichier parce que nous voulons fusionner avec un sous le nom de « fichier »

timeless-mbp:q timeless$ hg mv b file 
timeless-mbp:q timeless$ hg commit -m 'rename b to file' 

Je forcer une fusion à l'aide interne parce que je ne veux pas un outil de fusion pour pop up, il existe d'autres outils de fusion que vous pourriez utiliser (par exemple sur OS X avec les versions modernes de Mercurial, il a tendance à afficher FileMerge.app, mais c'est difficile à afficher dans un journal).

timeless-mbp:q timeless$ hg --config ui.merge=internal:local merge 2 
0 files updated, 1 files merged, 0 files removed, 0 files unresolved 
(branch merge, don't forget to commit) 

Remplacez le contenu de ce que je veux

timeless-mbp:q timeless$ hg cat -r 2 file > file 
timeless-mbp:q timeless$ hg cat -r 3 file >> file 

Vérifiez qu'il a maintenant le contenu que je veux

timeless-mbp:q timeless$ cat file 
a 
b 

Commit le fichier "fusionné"

timeless-mbp:q timeless$ hg commit -m merging 

Consulter l'historique du référentiel

timeless-mbp:q timeless$ hg log 
changeset: 4:d9d3d23ec1cc 
tag:   tip 
parent:  3:01c6a61cbe04 
parent:  2:3de70df713a7 
user:  timeless 
date:  Wed Jun 02 16:10:08 2010 +0300 
summary:  merging 

changeset: 3:01c6a61cbe04 
parent:  1:e6b8058965b4 
user:  timeless 
date:  Wed Jun 02 16:09:43 2010 +0300 
summary:  rename b to file 

changeset: 2:3de70df713a7 
parent:  0:635f50240100 
user:  timeless 
date:  Wed Jun 02 16:09:30 2010 +0300 
summary:  rename a to file 

changeset: 1:e6b8058965b4 
parent:  -1:000000000000 
user:  timeless 
date:  Wed Jun 02 16:09:17 2010 +0300 
summary:  b 

changeset: 0:635f50240100 
user:  timeless 
date:  Wed Jun 02 16:09:01 2010 +0300 
summary:  a 

Vérifier annoter sortie

timeless-mbp:q timeless$ hg ann -f -c file 
635f50240100 a: a 
e6b8058965b4 b: b 
+0

Une solution très ardue, je verrai si d'autres sont meilleurs en premier. –

Questions connexes