2010-05-26 10 views
7

In ClearCase il male gemello si verifica quando vengono trovati due file con lo stesso nome in due versioni differenti della directory e Se gli OID dell'elemento sono diversi ma i nomi sono uguali.Il GIT ha problemi di doppia identità?

In GIT l'ID SHA1 è sempre univoco e il file con lo stesso nome ha sempre ID SHA1 diversi.

Non abbiamo un concetto di gemelli Evil, ma ci sono probabilmente casi in cui vi è la possibilità per 2 o più sviluppatori di creare un file con contenuti diversi con lo stesso nome di file nella stessa directory. Durante l'unione, quando entrambi i file sono completamente diversi, ci sono possibilità per gli sviluppatori di mantenere le proprie modifiche da sole e lasciare altre modifiche con conseguente perdita di codice.

Qualcuno può farmi sapere se ci saranno problemi in GIT simili a ClearCase o sine ogni id SHA1 è unico non ci saranno problemi di Evil twin in GIT.

+0

Il tuo profilo dice: "ClearCase Admin Research on GIT"? Sto facendo la stessa cosa !! ;) – VonC

+0

:) Sono stato in ClearCase negli ultimi 3,5 anni e ora stiamo migrando da CC a GIT. Quindi ho provato varie opzioni in GIT e verificato se i problemi in CC si verificano in GIt o meno. E Von, le vostre risposte alla maggior parte delle domande sono state davvero utili, grazie mille. –

+0

"ora stiamo migrando da CC a GIT" Sei così fortunato. Sto anche cercando di intrufolare Git nella mia azienda. Dopo più di 8 anni di ClearCase e Subversion (e occasionalmente Perforce o CM Synergy), questo è rinfrescante;) – VonC

risposta

7

Git fa il monitoraggio a livello dell'intero albero, non i singoli file e directory, quindi non ha un concetto come un OID.

Quando si uniscono cronologie che includono modifiche incompatibili a un file (ad esempio entrambi hanno aggiunto un nuovo file con contenuti diversi), Git genererà un conflitto di unione e si fermerà per consentire all'utente di risolvere il conflitto o interrompere l'unione.

Ovviamente Git non può costringere l'utente a fare l'unione a fare la cosa giusta, ma forse è più difficile ignorare completamente una parte del conflitto. In Git, il conflitto si troverà nel file stesso, non nella directory che contiene il file. In altre parole, il conflitto riguarderà il contenuto del file invece di quale OID dovrebbe essere collegato alla directory.Ovviamente, a seconda dello strumento utilizzato, l'utente potrebbe semplicemente premere il tasto "prendi la mia parte in tutti i conflitti", ma a Git non importa minimamente (anche se il capo e i colleghi pigri possono preoccuparsi molto!).

0

Oh male errori gemelli, che mi riporta indietro. No, non dovresti avere errori di questo tipo in git. Git in realtà non traccia l'intero file tanto quanto tiene traccia di blocchi di file.

+0

Git traccia davvero l'intero file (nella rappresentazione dei dati del repository). Tuttavia, gli strumenti creati sul repository sono liberi di apparire come tracce di chunks (se lo desiderano). –

+1

Dai un'occhiata al git community book (http://book.git-scm.com/1_the_git_object_model.html) o Pro Git (http://progit.org/book/ch9-2.html) per vedere cosa Greg's parlare di. Git traccia davvero interi file o, se preferisci, il contenuto di interi file. – Cascabel

3

No, ma c'è un detached head. Spiacente, non potevo aiutare :)

Che cosa accadrebbe è che il file verrà visualizzato come in conflitto quando il secondo sviluppatore tira prima di fare una spinta. Quando i file sono completamente diversi, sarà ovvio che dovrebbero avere nomi di file diversi. Il secondo sviluppatore farà quindi qualcosa (rinominando il suo file quindi non c'è conflitto).

3

Sì, ci sono alcuni tipo di operazione "male" in Git, ma non per la stessa ragione che il evil twins of ClearCase:

Essi sono chiamati evil merge:

un'unione che introduce modifiche che non compaiono in nessun genitore.

I.e: inserire nel codice codice che nessuno ha mai chiesto di essere presente, denominato "unione malvagia" perché è un angolo difficile per "git blame" da risolvere durante l'annotazione del file.
Queste unioni sono generalmente correlate a semantic conflict tra le due versioni (e non un semplice conflitto testuale).
Un effetto collaterale sarà che, invece di aggiungere, rimuovere o modificare una linea cambiato, si finisce con entrambe le linee, (dai due versioni essendo fusa) nel risultato di unione ...

+0

Bene, come ho commentato [lì] (http://stackoverflow.com/q/1461909/85371) non è tanto un fenomeno Git; piuttosto un modo sconsiderato di lavorare con Git. Git ha un sacco di potere per lasciarti fare cose che molto spesso non dovresti! – sehe