Kaip pašalinti nereikalingus keitimus su mercurial transplant?

Išsiaiškinau įdomų dalyką, nusprendžiau pasidalinti atradimu.

Tarkime turite visą eilę pakeitimu, failuose su kuriais dirbate. Visus pakeitimus saugote Mercurial DVCS pagalba. Po kurio laiko pastebite, kad dalis darytų pakeitimų, gadina jūsų darbą ir norite juos pašalinti.

Pateiksiu pavyzdį, su vienu failu, kad būtų aiškiau. Tarkime turiu tokių keitimų sąrašą:

  1. @ changeset: 6:e17baf640494
  2. | user: sirex
  3. | date: Tue Jan 12 22:20:33 2010 +0200
  4. | summary: c
  5. |
  6. o changeset: 5:95fc32abe5f2
  7. | user: sirex
  8. | date: Tue Jan 12 22:20:27 2010 +0200
  9. | summary: b
  10. |
  11. o changeset: 4:66c0e9ff6c77
  12. | user: sirex
  13. | date: Tue Jan 12 22:20:21 2010 +0200
  14. | summary: a
  15. |
  16. o changeset: 3:9f0e3fcf1600
  17. | user: sirex
  18. | date: Tue Jan 12 22:20:04 2010 +0200
  19. | summary: b
  20. |
  21. o changeset: 2:53fb42c364d2
  22. | user: sirex
  23. | date: Tue Jan 12 22:19:57 2010 +0200
  24. | summary: a
  25. |
  26. o changeset: 1:c9fa842d083d
  27. | user: sirex
  28. | date: Tue Jan 12 22:19:43 2010 +0200
  29. | summary: b
  30. |
  31. o changeset: 0:9c2929bb13fc
  32. user: sirex
  33. date: Tue Jan 12 22:19:11 2010 +0200
  34. summary: a

Visi šie keitimai keičia failą file.txt, kiekviename pakeitime į failą įkelta nauja eilute su raide, kuri nurodytą keitimo aprašyme. Galutinis failo turinys yra toks:

  1. $ cat file.txt
  2. a
  3. b
  4. a
  5. b
  6. a
  7. b
  8. c

Mano užduotis – pašalinti visus b keitimus. Norint tai atlinkti, reikia visus gerus pakeitimus iškelti į kitą šaką.

Prieš pradedant transplant veiksmą, grąžiname savo darbinį katalogą į paskutinį gerą keitimą:

  1. $ hg up 0

Tada pradedam transplant veiksmą:

  1. $ hg transplant -b 6
  2. changeset: 1:c9fa842d083d
  3. user: sirex <sirexas@gmail.com>
  4. date: Tue Jan 12 22:19:43 2010 +0200
  5. summary: b
  6.  
  7. apply changeset? [ynmpcq?]: ?
  8. y: transplant this changeset
  9. n: skip this changeset
  10. m: merge at this changeset
  11. p: show patch
  12. c: commit selected changesets
  13. q: cancel transplant
  14. ?: show this help
  15. apply changeset? [ynmpcq?]:

Toliau reikia tiesiog spaudyti y, jei pakeitimas yra geras arba n, jei blogas.

Jei geras keitimas yra susijęs su bloguoju, mercurial gali nesugebėti įkelti gero keitimo, nes paprasčiausiai failo turinys, kurio pagrindu buvo atliktas gerasis keitimas pasikeitė, pašalinus blogą keitimą.

Gaila, bet m: merge at this changeset nepavyko panaudoti, todėl jei nepavyksta sujungti keitimų, tenka tai spręsti rankiniu būdu, taip:

  1. applying 9e6f5cccf15b
  2. patching file file.txt
  3. Hunk #1 FAILED at 0
  4. 1 out of 1 hunks FAILED -- saving rejects to file file.txt.rej
  5. patch failed to apply
  6. abort: Fix up the merge and run hg transplant --continue

Atsidarykite nurodytą failą file.txt ir informacinį failą su informacija apie nesutampantį fragmentą file.txt.rej. Peržiūrėkite kas nesutampa ir pataisykite originalų failą file.txt.

Galiausiai turėsite naują šaką, tik su gerais pakeitimais:

  1. @ changeset: 9:e17baf640494
  2. | user: sirex
  3. | date: Tue Jan 12 22:20:33 2010 +0200
  4. | summary: c
  5. |
  6. o changeset: 8:c4671106cf7a
  7. | user: sirex
  8. | date: Tue Jan 12 22:20:21 2010 +0200
  9. | summary: a
  10. |
  11. o changeset: 7:f45376781321
  12. | parent: 0:9c2929bb13fc
  13. | user: sirex
  14. | date: Tue Jan 12 22:19:57 2010 +0200
  15. | summary: a
  16. |
  17. o | changeset: 6:e17baf640494
  18. | | user: sirex
  19. | | date: Tue Jan 12 22:20:33 2010 +0200
  20. | | summary: c
  21. | |
  22. o | changeset: 5:95fc32abe5f2
  23. | | user: sirex
  24. | | date: Tue Jan 12 22:20:27 2010 +0200
  25. | | summary: b
  26. | |
  27. o | changeset: 4:66c0e9ff6c77
  28. | | user: sirex
  29. | | date: Tue Jan 12 22:20:21 2010 +0200
  30. | | summary: a
  31. | |
  32. o | changeset: 3:9f0e3fcf1600
  33. | | user: sirex
  34. | | date: Tue Jan 12 22:20:04 2010 +0200
  35. | | summary: b
  36. | |
  37. o | changeset: 2:53fb42c364d2
  38. | | user: sirex
  39. | | date: Tue Jan 12 22:19:57 2010 +0200
  40. | | summary: a
  41. | |
  42. o | changeset: 1:c9fa842d083d
  43. | | user: sirex
  44. | | date: Tue Jan 12 22:19:43 2010 +0200
  45. | | summary: b
  46. |/
  47. o changeset: 0:9c2929bb13fc
  48. user: sirex
  49. date: Tue Jan 12 22:19:11 2010 +0200
  50. summary: a

Grįžtame atgal į pagrindinę šaką ir prijungiame atrinktus geruosius keitimus, visiškai eliminuojant bloguosius:

  1. $ hg up 6
  2. $ hg --config ui.merge=internal:other merge 9
  3. $ hg ci -m "Atstatyti tik gerieji keitimai."

Galiausiai gausite tokį file.txt turinį:

  1. $ cat file.txt
  2. a
  3. a
  4. a
  5. c

Ir tokį keitimų medį:

  1. @ changeset: 9:e17baf640494
  2. | user: sirex
  3. | date: Tue Jan 12 22:20:33 2010 +0200
  4. | summary: Atstatyti tik gerieji keitimai.
  5. |\
  6. | o changeset: 9:e17baf640494
  7. | | user: sirex
  8. | | date: Tue Jan 12 22:20:33 2010 +0200
  9. | | summary: c
  10. | |
  11. | o changeset: 8:c4671106cf7a
  12. | | user: sirex
  13. | | date: Tue Jan 12 22:20:21 2010 +0200
  14. | | summary: a
  15. | |
  16. | o changeset: 7:f45376781321
  17. | | parent: 0:9c2929bb13fc
  18. | | user: sirex
  19. | | date: Tue Jan 12 22:19:57 2010 +0200
  20. | | summary: a
  21. | |
  22. o | changeset: 6:e17baf640494
  23. | | user: sirex
  24. | | date: Tue Jan 12 22:20:33 2010 +0200
  25. | | summary: c
  26. | |
  27. o | changeset: 5:95fc32abe5f2
  28. | | user: sirex
  29. | | date: Tue Jan 12 22:20:27 2010 +0200
  30. | | summary: b
  31. | |
  32. o | changeset: 4:66c0e9ff6c77
  33. | | user: sirex
  34. | | date: Tue Jan 12 22:20:21 2010 +0200
  35. | | summary: a
  36. | |
  37. o | changeset: 3:9f0e3fcf1600
  38. | | user: sirex
  39. | | date: Tue Jan 12 22:20:04 2010 +0200
  40. | | summary: b
  41. | |
  42. o | changeset: 2:53fb42c364d2
  43. | | user: sirex
  44. | | date: Tue Jan 12 22:19:57 2010 +0200
  45. | | summary: a
  46. | |
  47. o | changeset: 1:c9fa842d083d
  48. | | user: sirex
  49. | | date: Tue Jan 12 22:19:43 2010 +0200
  50. | | summary: b
  51. |/
  52. o changeset: 0:9c2929bb13fc
  53. user: sirex
  54. date: Tue Jan 12 22:19:11 2010 +0200
  55. summary: a

Komentarai

Anonymous portretas

O jeigu tų "blogųjų"

O jeigu tų "blogųjų" pakeitimų dar niekas kitas negavo (t.y. nepadarė iš repozitorijos `hg pull`), tai žymiai paprasčiau yra naudoti hg histedit komandą.

Anonymous portretas

Ar aš neteisingai žiūriu, ar

Ar aš neteisingai žiūriu, ar šakotą istoriją rodančios iliustracijos klaidingos? Dešinėse šakose po du "a" pakeitimus, o kairėse ir "a", ir "b", ir "c".

-rtfb

sirex portretas

Kiek žiūriu, tai lyg taip ir

Kiek žiūriu, tai lyg taip ir turi būti. Po šakos sukūrimo gaunasi:
Kairėje: ababac
Dešinėje: aac

Dešinėje, dingo vienas a, nes jis laikomas, kaip „paskutinis geras keitimas“, todėl jis niekur nejuda ir pasilieka pozicijoje 0.

Skelbti naują komentarą

Šio laukelio turinys bus laikomas privatus ir nerodomas viešai. If you have a Gravatar account, used to display your avatar.
  • Leidžiamos HTML žymės: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Linijos ir paragrafai atskiriami automatiškai
  • Web puslapiu adresai ir el. pašto adresai automatiškai tampa nuorodomis.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. Beside the tag style "<foo>" it is also possible to use "[foo]".

Daugiau informacijos apie teksto formatavimą

CAPTCHA
Šis klausimas skirtas patikrinti ar esi žmogus, taip apsisaugant nuo internetinių reklamos robotų.
Image CAPTCHA
Enter the characters (without spaces) shown in the image.
Surinktas turinys