Git merge In pubblico nudo repos

0

Domanda

Siti come GitHub e GitLab fornire modi per unire i rami direttamente nell'interfaccia web. Dato che i siti negozio solo nuda pronti contro termine, come si svolgono questi si fonde? È possibile che la stessa cosa venisse fatta sulla riga di comando in un bare clone? Ho trovato questa come una possibile risposta utilizzando idraulico comandi.

git github gitlab merge
2021-11-23 22:52:54
1

Migliore risposta

3

Perché GitHub è closed source, possiamo dire con certezza esattamente come backend gestisce le operazioni di unione. Tuttavia, GitLab è Open Source e si può sbirciare i dettagli di implementazione, che sono cambiati nel tempo.

Come GitLab fa

Oggi, la maggior parte git-le relative caratteristiche che sono emerse nell'interfaccia utente, tra cui git si fonde sulla GitLab sono gestiti dal gitaly componente di GitLab, che interagisce con l'archiviazione fisica dei repository git. Si utilizza principalmente il suo dipendente libreria, git2go, per l'esecuzione di effettivo git operazioni.

Guardando da vicino il codice sorgente per gitalyla migliore valutazione che posso fare è che gitaly in realtà non fanno un ampio uso di alberi di lavoro per git operazioni, anche per le unioni. Repository e di lavoro alberi sono generalmente aperti e clonato "quarantena" directory, che sono solo le directory temp effettuata on-the-fly e il repository di lavoro dell'albero è clonato nella directory temp. (vedere quarantena.vai#L40-58, chiamato da unire.vai#L53).

come si svolgono questi si fonde?

Quindi, per rispondere alla tua domanda: almeno con GitLab, lavorando alberi sono utilizzati per le unioni (tra le altre operazioni) e non sono presenti in archivi bare. Semplicemente non li vede perché temporanee si utilizzano le directory prima di essi si sono impegnati per l'effettivo percorso del repository.

Possiamo forse supporre che GitHub fa qualcosa di simile, ma è impossibile sapere con certezza.

Può essere fatto?

È possibile che la stessa cosa venisse fatta sulla riga di comando in un bare clone?

Lei ha fatto un esempio che sembra funzionare senza il controllo di un albero? Ma funziona scrivendo l'albero con git write-tree), che a livello pratico non sembrano avere alcun vantaggio rispetto a, diciamo clonazione da nudo repo e il check-out l'albero di lavoro e l'utilizzo di git le operazioni normalmente. Per le prestazioni (anticipando possibili obiezioni), si potrebbe utilizzare tempfs o qualche altro mappati in memoria di posizione.

Sono anche sicuro che collegato risposta sarebbe sufficiente per svolgere diverse di unione strategie utilizzate da git merge.

Così, in un tecnicismo, forse? La risposta è legata sembra rispondere a quella domanda di bene. A livello pratico che sarebbe utile, no, non mi sembra così.

2021-11-24 00:59:11

Grazie per rintracciare quei frammenti di codice. Hanno un aspetto come prova per un usa e getta, camere non-nudo clone. È interessante notare che queste linee guardare come essi possono essere cercando di condividere gli oggetti da nudo repo in clone, forse per le prestazioni. Mi ricorda git clone --shared.
Jim

@Jim hmmm. Io non sono sicuro al 100%. Sulla base della mia lettura, sembra che relativePath in questo caso è la directory temporanea creata relativa al repo su disco. Sembra che la clonazione repo, quindi ignorando l'oggetto del percorso (quarantinedRepo.GitObjectDirectory = relativePath) in quarantineRepo oggetto del punto all'tempdir (rispetto a quello che presumo sia il default dell'attuale repo posizione degli oggetti restituiti dal metodo clone).
sytech

In altre lingue

Questa pagina è in altre lingue

Русский
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................