2010-08-19 12 views
13

Quello che mi piace di fossil è che utilizza plain sqlite per archiviare changeset, file, ecc. Posso usare il suo strumento da riga di comando per interrogare il repository, ma se voglio qualcosa non supportato da Posso ricorrere alla scrittura di una query sql.Database backend relazionale per mercurial o git

Mercurial e git sono più maturi, hanno più librerie, più slancio, ma usano il proprio formato di repository. Mi chiedo se è possibile avere sqlite come backend di repository. (So ​​che ci sono strumenti per interrogare un repo mercuriale o git direttamente, ma sql sembra più facile.)

+1

Non è il tipo di git per archiviare e interrogare i suoi dati in modo efficiente? – Cascabel

+6

git usa la conoscenza specifica del dominio (che i suoi oggetti sono immutabili e che tutti esistono in una struttura ad albero) per fare meglio di un RDB generale nella memorizzazione delle cose che git memorizza. (Ad ogni modo, SQL fa schifo nell'esprimere le relazioni tra gli alberi.) – masonk

risposta

12

Con git, il formato del repository è una parte piuttosto fondamentale del modo in cui tutto funziona. Dovresti fare un sacco di lavoro per cambiarlo.

Non ho letto nessuna delle fonti di Mercurial, ma immagino che la situazione non sia molto diversa.

Come ho suggerito nel mio commento, non sono proprio sicuro del perché tu voglia fare questo. Perché git possa ancora avere tutti i suoi vantaggi, dovrai immagazzinare oggetti git nel tuo database sqlite. Avresti comunque bisogno di tutti gli strumenti git di basso livello per accedervi e manipolarli: non dovrai semplicemente cercare blob e alberi dai loro SHA1 e fare tutto il resto del lavoro da solo. (E anche se per qualche ragione tu volessi, puoi farlo altrettanto facilmente guardando nella directory degli oggetti git.)

Il mio suggerimento sarebbe quello, se trovi che ci sono operazioni che vuoi eseguire in git che non sono supportati, ti familiarizzi con alcuni dei comandi idraulici e scopri come scriverli come script. Git espone davvero il livello più basso di operazioni che potresti desiderare.

P.S. Se si dovesse trovare un'operazione specifica non supportata che si desidera eseguire e si riscontrano problemi nel trovare l'impianto idraulico necessario per eseguirlo, o con gli script necessari per implementarlo, inserire qui una domanda! Non c'è motivo di rimanere bloccati solo perché non puoi usare sql.

13

Come scrive Jefromi, Mercurial sta anche utilizzando un formato personalizzato per ottenere una compressione elevata e un accesso rapido a qualsiasi revisione. Questa è la revlog format che è una struttura dati solo per l'aggiunta che sfrutta l'immutabilità dei changeset in Mercurial.

Tuttavia, è ovviamente possibile sostituire questo formato di archiviazione con un altro se lo si desidera. Google did this when they put Mercurial on Bigtable per code.google.com. Una conseguenza divertente di loro utilizzando il proprio formato di back-end è che non si vedono numeri di revisione nella loro interfaccia web. Nel normale Mercurial, i numeri di revisione (l'intero solo locale che è possibile utilizzare al posto dell'hash completo del changeset) sono l'indice dei changeset nel revlog. Quando i changeset non sono archiviati in revlogs, non esiste un indice naturale e pertanto Google non mostra alcun numero di revisione.

1

Per quanto riguarda Git, non è possibile utilizzare un backend diverso con i binari ufficiali. Tuttavia, il progetto libgit2 consente di utilizzare diversi backend per memorizzare il database. Tuttavia, dovrai costruire tutti i binari che desideri utilizzare per il commit, l'unione, il push, il pull, il rebasing, ecc. Inoltre, non potrai modificare il tuo repository con i binari ufficiali. Dovrai prima inserirlo in un repository standard.

Problemi correlati