Domanda

Ho sentito molte cose positive sui sistemi DVCS, in particolare sul bazaar.A parte il concetto di repository distribuito, vedo due vantaggi principali pubblicizzati:l'unione è automatizzata meglio e la ridenominazione viene gestita correttamente.

Qualcuno potrebbe indicarmi un testo che spiega come funzionano esattamente i miglioramenti?Come fa Bazaar a sapere che ho rinominato un file?Cosa succede se rinomino due file come parte dello stesso commit?Cosa succede quando eseguo il refactoring inserendo metà del contenuto del file in un nuovo file, rientrando tutto e perdendo alcuni spazi bianchi in quasi ogni riga?

In altre parole, mi piacerebbe sentire le persone che usano Bazaar (o un altro DVCS) nella vita reale, o persone che sanno come funziona.La fusione è davvero così migliore?E come si ottiene?


Domanda correlata, con una risposta utile:

Perché la ramificazione e la fusione sono più facili in Mercurial che in Subversion?

È stato utile?

Soluzione

L'unione non è intrinsecamente migliore in DVCS, è solo che sarebbero praticamente molto difficili da usare se il ramo/unione non funzionasse correttamente (svn probabilmente non implementa correttamente il ramo/unione), perché invece di effettuare un checkout, sei creare un nuovo ramo ogni volta che inizi a lavorare su un progetto da un codice esistente.Penso che alcuni SCS proprietari e centralizzati gestiscano correttamente l'unione/diramazione.

Il modo in cui funziona per tutti è registrare ogni commit in un grafico direttamente aciclico (DAG) e da questo sono disponibili diverse strategie di unione.Qui puoi trovare maggiori informazioni:

http://revctrl.org/CategoryMergeAlgorithm

Almeno hg, bzr e git possono utilizzare utilità di fusione esterne.

Altri suggerimenti

I DVCS ottengono unioni migliori monitorando le revisioni principali delle unioni.In Subversion, quando unisci un ramo in un altro, perdi informazioni sull'origine dell'unione.In un DVCS come Bazaar o Git, la revisione "unita" finisce con due revisioni principali.

La ridenominazione viene gestita in modo diverso tra i DVCS.Git, ad esempio, non tiene traccia della ridenominazione perché non era importante per Linus.Mercurial li registra come "copia il vecchio file nel nuovo, elimina il vecchio". Secondo Mark Shuttleworth, fondatore di Canonical, Darcs e Bazaar sono gli unici DVCS che gestiscono correttamente la ridenominazione dei file.

Come fa Bazaar a sapere che ho rinominato un file?

Le ridenominazioni sono specificate dall'utente, proprio come l'aggiunta o la rimozione di file.Usa il "bzr rename <old> <new>" comando per contrassegnare file o directory da rinominare.Se hai già rinominato un file nell'albero, puoi utilizzare il comando "--after" opzione.

Cosa succede se rinomino due file come parte dello stesso commit?

Quindi digiti "bzr rename <old> <new>" una volta per ogni file.Bazaar non tenta di indovinare quali file sono stati rinominati.

Cosa succede quando eseguo il refactoring inserendo metà del contenuto del file in un nuovo file, rientrando tutto e perdendo alcuni spazi bianchi in quasi ogni riga?

Quindi digiti "bzr add" sul nuovo file, dal momento che non lo stai realmente rinominando.

Quella che segue è una discussione su come darcs (http://darcs.net) si occupa delle patch - http://darcs.net/manual/node9.html.

Non ho familiarità con Bazaar, ma Git non tiene traccia delle ridenominazioni dei file.Per Git, questo sembra un'eliminazione e un'aggiunta.Tuttavia, git è abbastanza intelligente da vedere che il contenuto del file esiste già nel suo repository e ne traccerà la posizione nel sistema.Se dividi i file o li unisci, è abbastanza intelligente da tenere traccia di segmenti di codice (blob) e memorizzare anche tali informazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top