Teorie VCS - sloučení: rekurzivní revrision korespondenci nebo 3 sloučení revize?

hlasů
0

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):

  1. sloučit nejbližší revize předek jako první.

  2. sloučit výsledek s další nejbližší revizi z větve 1

  3. sloučit výsledek s další nejbližší revizi z větve 2 (je-li i nadále)

  4. 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:

  1. sloučit B a B‘

  2. sloučení výsledek s C

  3. sloučení výsledek s C‘

  4. sloučení výsledek s D

  5. 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í)

Položena 08/11/2013 v 14:01
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
0

Chceme spojit G a G‘na pobočce 1.

Proto chceme sloučit G do branch1? G je již v branch1. V nejlepším případě dáváme nic z tohoto sloučení, v nejhorším - konflikt. Stejný pro všechny ostatní revize bez '

Takže jen B ‚- G‘ potřeba být sloučeny do branch1. A to je 3-way sloučení.

MIMOCHODEM. Třetí složkou 3-way sloučení není ‚společný předek‘, ale ‚základnu‘. Společný předek může být základna, ale ne vždy.

Odpovězeno 09/11/2013 v 20:56
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more