Mergeinfo je verzovaná property svn:mergeinfo
, obsahuje historii merge operací nad daným adresářem nebo souborem.
Když má cesta nastavenou mergeinfo property tak o této cestě říkáme, že má explicitní mergeinfo. Cestou se myslí adresář nebo soubor.
Běžně je mergeinfo nastavené pouze na cíli merge operace. Subtree mergeinfo se objeví když:
Několik případů, kdy nedojde k vytvoření nebo změně mergeinfo:
--ignore-ancestry
Pokud cesta nemá explicitní mergeinfo používá mergeinfo svého rodiče/nadřazený adresář (nebo jeho prarodiče atd.) s explicitním mergeinfo. Koncept nejbližšího rodiče není omezen na pracovní kopii. Při zjišťování zděděného mergeinfo na cestě bez explicitního mergeinfo Subversion nejdříve prohlíží pracovní kopii směrem k jejímu kořenu. Pokud se dostane až ke kořenu pracovní kopie a stále nemůže najít explicitní mergeinfo, požádá repository o další prarodiče až ke kořeni celé repository. Pouze pokud nebyla nalezena žádná cesta s explicitním mergeinfo lze říci, že daná cesta nemá žádné (zděděné) mergeinfo. Pokud cesta dědí mergeinfo, dědí jen pouze z nejbližšího rodiče s explicitním mergeinfo.
Empty mergeinfo is a svn:mergeinfo
property which has the empty string as a value. It simply means the state of this path is as if nothing was ever merged into it.
Prázdné mergeinfo je svn:mergeinfo
property, která má prázdný řetezec jako svojí hodnotu. Tato hodnota znamená, že stav této testy je takový jako kdyby do ní nebylo nikdy nic zamergované.
Na konci každé merge operace se Subversion pokusí "konsolidovat" přebývající subtree mergeinfo. Po dokončení merge operace Subversion prochází pracovní kopii merge cíle. Když nalezne cestu s explicitním mergeinfo. která má subtree se stejným explicitním mergeinfo, tak toto subtree mergeinfo odstraní.
Předpokládejme, že pracujete na kódu ve větvi, která bylo zkopírovaná z trunku. Během vývoje se pravidelně provádí merge na všechny nové změny z trunku takže větev je vždy synchronizovaná s prací v trunku. Když nakonec větev zamergujete do trunku, je tato operace nazvána cyklickým merge. Cyklický merge má tyto problémy:
Subversion již umí řešit cyklicé mergování. Jde o stejný typ merge operace existující již před verzí 1.5 a říká se mu 2-URL merge (Reintegrace)
Je třeba zdůraznit, že jakmile je větev reintegrovaná zpět, měla by být smazána z repository. Pokud je potřeba provést další změny, je třeba větev znovu vytvořit z nové kopie. Jsou pro to dva důvody:
Nový přepínač reintegrate je zkratka pro 2-URL merge s bezpečnostní kontrolou. Kontrola ověřuje, zda pracovní kopie obsahuje pouze jednu revizi, nemá žádné přepnuté potomky a nejde o "řídký" checkout (t.j. hloubka pracovní kopie je nekonečno). Nejvíce kontroverzí kontrola při reintegraci je ověření, že merge zdroj neobsahuje žádné subtree mergeinfo. Bez těchto kontrol je 2-URL merge náchylný na chyby jako je použití špatného URL nebo špatného čísla revize. Více informací o reintegraci můžete nalézt na Subversion merge reintegrate, část Reintegrate to the Rescue
Zjistit mergeinfo na celém stromu, XML formát je vhodný pro lepší čitelnost výstupu:svn propget svn:mergeinfo --recursive --xml
Smazat mergeinfo na stromu kromě rootu (cíl merge operace)svn propdel --recursive svn:mergeinfo ./*
Subversion merge reintegrate
Subversion 1.5 Mergeinfo - Understanding the Internals