
GitHub ga se feela sefala sa go amogela mafelo a polokelo—ke tshepedišo yeo e phatlalatšwago yeo e ka lekanyetšwago kudu yeo e šomago dimilione tša ditirišano letšatši le letšatši. Go tloga go go swara dikgopelo tša go kgorometša git go ya go diphapano tša faele tša khomphutha ka bokgoni, GitHub e ithekgile ka dialgoritmo tše di tiilego le mohlwaela go netefatša tshepedišo ya godimo le go botega.
Sehlogo se se hlahloba ka moo GitHub e šomago ka gona palo e kgolo ya data, e lekanya go swara dimilione tša ditirišano, le go thwala di-algorithm tša go fapana go latela diphetogo tša faele ka bokgoni. Sehlogo se akaretša gape le diphethagatšo tša JavaScript tše di tletšego tša dialgoritmo tša motheo tšeo di šomišwago ka ditshepedišong tša taolo ya phetolelo.
Ditshepedišo tša sebjalebjale tša taolo ya phetolelo di swanetše go šomana le ditlhohlo tše mmalwa tše bohlokwa:
Melao ye ya motheo ga se ya GitHub fela. Ditlhamo tše di swanago le dialgoritmo di šomišwa ka go GitLab, Bitbucket, le diforamo tše dingwe tšeo di šomago ka taolo ya phetolelo ka tekanyo.
Ge o latela diphetogo ka faeleng, GitHub (le Git ka boyona) e šomiša dialgoritmo tša go fapana go bala palo ya fasefase ya diphetošo tše di nyakegago go fetoša phetolelo ye nngwe ya faele go ba ye nngwe. Algorithm yeo e dirišwago kudu bakeng sa se ke Myers’ Diff Algorithm.
Algorithm ya Myers e hwetša tatelano ye kopana kudu ya go tsenywa le go phumolwa mo go nyakegago go fetolela faele e tee go ye nngwe. E šoma ka go ipoeletša ka bokgole bja go rulaganya bjo bo kgonegago (d) le go diriša dikhomphuthara tša diphetogo tše di kgonegago go bapa le “didiagonal” ka gare ga kerafo ya go rulaganya.
/** * Computes the minimum edit distance between two arrays using Myers' Diff Algorithm. * @param {Array} a - The original array (eg, characters of a file) * @param {Array} b - The modified array * @returns {number} The minimum number of edit operations required */ function myersDiff(a, b) { const N = a.length; const M = b.length; const maxD = N + M; let v = { 1: 0 }; for (let d = 0; d <= maxD; d++) { for (let k = -d; k <= d; k += 2) { let x; if (k === -d || (k !== d && (v[k - 1] || 0) < (v[k + 1] || 0))) { x = v[k + 1] || 0; } else { x = (v[k - 1] || 0) + 1; } let y = x - k; while (x < N && y < M && a[x] === b[y]) { x++; y++; } v[k] = x; if (x >= N && y >= M) { return d; } } } return maxD; } // Example usage: const oldVersion = Array.from("Hello World"); const newVersion = Array.from("Hello GitHub World"); const operations = myersDiff(oldVersion, newVersion); console.log(`Minimum number of edits: ${operations}`);
Karoganyo ya khoutu: .
Go thoma: Algorithm e thoma lenaneo la v go boloka palomoka ya dikelo tša x tša diagonale ye nngwe le ye nngwe ka go kerafo ya go rulaganya.
Loop ka bokgole bja go rulaganya bjo bo kgonegago (d): E boeletša ka palo ye nngwe le ye nngwe ye e kgonegago ya diphetošo tše di nyakegago.
Go dira khomphuthara tsela ye e loketšego: E laola ge eba go tsenywa goba go phumola go ya ka dikelo tša v[k].
“Greedy match” kgato: E sepela ka diagonally ge fela baanegwa ba swana, e fokotša ditiro tše di sa nyakegego.
Go swara dimilione tša ditirišano, GitHub e thwala mohlwaela wa methaladi ye mentši. Mona ke kamoo kgwebišano e tlwaelegilego e elelago ka gona:
Sebopego se se dumelela GitHub go lekalekantšha ka bokgoni, go netefatša gore ga go na karolo e tee yeo e fetogago bottleneck
GitHub e šoma ditirišano ka go se sepelelane go swara sephethephethe se se phagamego. Khoutu ye e latelago ya JavaScript e ekiša tshepedišo ya go bapelana ya ditirišano ka go šomiša Ditshepišo.
/** * Simulates a transaction in a version control system. */ class Transaction { constructor(id, action, payload) { this.id = id; this.action = action; this.payload = payload; } } /** * Simulates processing a transaction step-by-step. * @param {Transaction} tx - The transaction to process * @returns {Promise<string>} The result of processing */ function processTransaction(tx) { return new Promise((resolve) => { console.log(`Processing transaction ${tx.id}: ${tx.action}`); setTimeout(() => { console.log(`Indexing ${tx.id}...`); setTimeout(() => { console.log(`Computing diff for ${tx.id}...`); setTimeout(() => { console.log(`Updating database for ${tx.id}...`); resolve("success"); }, 100); }, 50); }, 100); }); } /** * Simulates processing multiple transactions in parallel. */ async function processTransactions() { const transactions = [ new Transaction("tx001", "commit", "Modified file A"), new Transaction("tx002", "commit", "Fixed bug in file B"), new Transaction("tx003", "merge", "Merged branches"), ]; const promises = transactions.map(async (tx) => { const result = await processTransaction(tx); console.log(`Transaction ${tx.id} result: ${result}`); }); await Promise.all(promises); console.log("All transactions processed."); } // Run transaction processing processTransactions();
Key takeaways go tšwa go khoutu ye:
Bokgoni bja GitHub bja go šoma dimilione tša ditirišano ka letšatši bo ithekgile ka motswako wa:
Dithekniki tše ga se tša go ikgetha go GitHub-di šomišwa kudu ka go GitLab, Bitbucket, le ditshepedišo tša go šoma ka datha ya tekanyo ye kgolo. Go kwešiša melawana ye go thuša bahlami go aga dikgopelo tše di šomago gabotse, tše di ka lekanyetšwago bakeng sa go swara dibolumo tše di phagamego tša ditirišano.