Git-îmbinare În public goale repos

0

Problema

Site-uri ca GitHub și GitLab oferi modalități de a fuziona ramuri direct in interfata lor web. Având în vedere faptul că aceste site-uri magazin doar goale repos, cum fac cei îmbină? Poate același lucru se facă pe linia de comandă într-un gol clona? Am găsit acest lucru ca un posibil răspuns folosind sanitare comenzi.

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

Cel mai bun răspuns

3

Pentru că GitHub este sursa închisă, nu putem spune sigur exact cum backend lor se ocupă de operațiile de combinare. Cu toate acestea, GitLab este Open Source și putem privire la detaliile de implementare, care s-au schimbat de-a lungul timpului.

Cum GitLab nu

Astăzi, cele mai multe git legate de caracteristici care sunt scoase la suprafață în UI, inclusiv git unește pe GitLab sunt gestionate de către gitaly componentă de GitLab, care interacționează cu mediul fizic de depozitare de arhive git. Se folosește în principal dependente de bibliotecă, git2go, pentru efectuarea efectivă git operațiuni.

Privind mai de aproape la codul sursă pentru gitalycel mai bun de evaluare pot face este că gitaly de fapt nu face utilizarea extensivă de lucru copaci pentru git operațiuni, inclusiv pentru fuzionează. Centrale de tranzacții și de lucru copaci sunt, în general, deschis și clonate la "carantină" directoare, care sunt doar directoarele temporare de făcut pe-the-fly și depozit lucrează copac este clonat în directorul temp. (a se vedea carantină.du-te#L40-58, numit de îmbinare.du-te#L53).

cum fac cei îmbină?

Deci, pentru a răspunde la întrebarea dumneavoastră: cel puțin cu GitLab, lucru copaci sunt utilizate pentru fuzionează (printre alte operațiuni) și nu sunt efectuate în magazii goale. Nu le vezi pentru că temporară directoare sunt utilizate înainte de a fi comise la real depozit cale.

Poate putem presupune că GitHub face ceva similar, dar e imposibil să știu sigur.

Poate fi făcut?

Poate același lucru se facă pe linia de comandă într-un gol clona?

Ai subliniat un exemplu care pare să lucreze fără să verific un lucru copac? Dar funcționează de scris copac (folosind git write-tree), care la nivel practic nu pare a avea nici un avantaj față de clonarea de goale repo și verificarea arborele de lucru și folosind git operațiunile în mod normal. Pentru performanță (anticipând obiecțiile posibile), ai putea folosi tempfs sau alte de memorie mapate locație.

Sunt, de asemenea, sigur legate de faptul că răspunsul ar fi suficiente pentru a efectua diferite de îmbinare a strategiilor utilizate de către git merge.

Deci, pe de o tehnicitate, poate? Răspunsul legate pare să răspundă la această întrebare bine. La nivel practic, care ar fi utile, nu, nu mi se pare așa.

2021-11-24 00:59:11

Multumesc pentru depistarea aceste fragmente de cod. Ele arata ca dovezi pentru un telefon cu cartelă, non-goale clona. Interesant, aceste linii arata ca acestea ar putea fi încercarea de a partaja obiecte de goale repo în clona, poate pentru performanță. Asta-mi aduce aminte de git clone --shared.
Jim

@Jim hmmm. Nu sunt 100% sigur. Bazat pe lectura mea, se pare ca relativePath în acest caz, este directorul temporar, care este creat relativă la repo de pe disc. Se pare ca e clonarea repo, apoi imperative obiectul calea (quarantinedRepo.GitObjectDirectory = relativePath) în quarantineRepo obiect pentru a indica tempdir (spre deosebire de ceea ce cred că este cel default de la real repo obiecte locație s-a întors din clona metoda).
sytech

În alte limbi

Această pagină este în alte limbi

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