Mám teoretickou otázku ohledně případného sloučení VCS. Vím, že mnozí VCS pouze 3 revize sloučení, což je společný předek, „moje“ a „váš“ revize. Vím, jak to funguje.
Přemýšlel jsem o jinou alternativu, rekurzivní sloučení revize, nenašli to v Googlu. „Našli jste Ameriku!“ můžeš si myslet. Vím, že Git používat rekurzivní korespondence. Ale důvod, proč Git používá rekurzivní korespondence je na křížovém sloučení
Mluvím o normálním případě, křížovém sloučení zákazu.
Například jsme mají společného předka, A a větví, 1 a 2.
branch 1: B, C, D, E, F, G
branch 2: B', C', D', E', F', G'
Jak již bylo řečeno, A je společný předek, takže je to rodič B a B‘.
Chceme spojit G a G‘na pobočce 1. běžným způsobem, který Git a Mercurial použití je diff3:
diff3(ancestor = A, mine = G, yours = G')
To bude počítat korespondence výpočtem jen 3 verze, která je O (1).
Alternativní algoritmus jsem o je O (n):
sloučit nejbližší revize předek jako první.
sloučit výsledek s další nejbližší revizi z větve 1
sloučit výsledek s další nejbližší revizi z větve 2 (je-li i nadále)
opakovat (ve smyčce) ke kroku 2 v případě, že jakákoli revize v pobočce 1 zůstat.
Ve výše uvedeném příkladu to vypadá takto:
sloučit B a B‘
sloučení výsledek s C
sloučení výsledek s C‘
sloučení výsledek s D
a tak dále...
Otázkou jsem nemohl vyřešit je - Je nějaký případ, že můj způsob je bezpečnější a přesnější (v non- merge křížovém ) než tradiční 3 revize korespondenci?
Může se můj způsob, jak vyhnout se konfliktům, že tradiční způsob, jak vyvolat?
Může se můj způsob, jak vytvořit nové konflikty, že tradice způsob nezpůsobuje?
Má moje konflikty way nejsou „skutečné“ v konfliktu? (Což je tradice způsobem nezpůsobí)