C'è un modo in mercurial per rimuovere i vecchi changeset da un database? Ho un repository di 60 GB e questo rende piuttosto doloroso fare un clone. Vorrei tagliare tutto prima di una certa data e mettere via l'enorme database per raccogliere la polvere.Mercurial Rimuovi cronologia
risposta
Puoi farlo, ma così facendo invalidi tutti i cloni là fuori, quindi generalmente non è saggio farlo a meno che tu non stia lavorando interamente da solo.
Ogni changeset in mercurial è identificato in modo univoco da un hashcode, che è una combinazione di (tra le altre cose) le modifiche al codice sorgente, i metadati e gli hash dei suoi uno o due genitori. Quei genitori devono esistere nel repo fino all'inizio del progetto. (Non avere questa restrizione potrebbe avere cloni superficiali, che non sono disponibili (ancora)).
Se stai bene cambiando gli hash dei nuovi changeset (che di nuovo rompono tutti i cloni là fuori in natura) puoi farlo con i comandi;
hg export -o 'changeset-%R.patch' 400:tip # changesets 400 through the end for example
cd /elsewhere
hg init newrepo
cd newrepo
hg import /path/to/the/patches/*.patch
Probabilmente dovrete fare un po 'di lavoro per gestire i changeset di unione, ma questa è l'idea generale.
Uno potrebbe anche farlo utilizzando hg convert
con tipo hg
come entrambi i tipi di origine e destinazione e utilizzando un splicemap
, ma questo è probabilmente ancora più coinvolto.
La domanda più grande è, come si digita 60 GB di codice sorgente o si stavano aggiungendo file generati contro ogni consiglio. :)
Risposta molto più dettagliata della mia risposta (cancellata). +1 – VonC
Sto importando da un altro sistema di controllo sorgente un progetto che include binari generati. Stiamo cercando di estrarre le DLL dal controllo del codice sorgente in questo momento. Grazie per l'aiuto! –
La risposta contiene un errore di battitura. Il nome del file deve contenere minuscolo% r (numeri con riempimento a zero), altrimenti i file non verranno elaborati nell'ordine corretto al momento dell'importazione. – Gili
Non esiste un modo semplice/consigliato per farlo direttamente a un repository esistente.
È possibile però "convertire" il tuo repo Mercurial per un nuovo repo Mercurial e scegli una revisione, da dove per includere la storia in poi tramite l'opzione convert.hg.startrev
hg convert --config convert.hg.startrev=1234 <source-repository> <new-repository-name>
Il nuovo repo conterrà tutto dal repository originale meno la cronologia precedente alla revisione iniziale.
Avvertenza: Il nuovo repository avrà ID di changeset completamente nuovi, vale a dire che non è in alcun modo correlato al repository originale. Dopo aver creato il nuovo repository, ogni sviluppatore deve clonare il nuovo repository ed eliminare i propri cloni dal repository originale.
L'ho utilizzato per ripulire i vecchi repository utilizzati internamente all'interno della nostra azienda, combinato con l'opzione --filemap per rimuovere anche i file indesiderati.
Quindi, in che modo questa soluzione è diversa dalla semplice rimozione della sottodirectory .hg/e facendo hg dentro? – grzaks
Siamo spiacenti, non capisco il tuo commento. Che cosa hanno a che fare la directory locale .hg e una hg init con la rimozione dei changeset da un repository? –
@Gaks, il tuo approccio distrugge l'intero repository e ne crea uno nuovo, l'approccio di Gerd distrugge selettivamente il repository da una certa revisione. Entrambi gli approcci sono utili a seconda delle circostanze. L'approccio di Gerd mi è utile in questo momento mentre sto per rendere pubblico un repository privato e voglio mantenere le revisioni dell'ultimo mese, ma non prima di questo. – lsh
- 1. Rimuovi cronologia revisioni
- 2. Git - Rimuovi commit dalla cronologia
- 3. Importa cronologia TFS in Mercurial (hg)
- 4. Mercurial: Rimuovi changeset dal ramo remoto
- 5. Come visualizzare la cronologia delle revisioni per il file Mercurial?
- 6. eliminare i file nella cronologia per risparmiare spazio in mercurial
- 7. Come si rimuovono i grandi file dalla cronologia in mercurial?
- 8. In Mercurial, come posso visualizzare la cronologia di un file?
- 9. git rimuovi tutti i file cancellati dall'intera cronologia
- 10. Rimuovi ORIG_HEAD e FETCH_HEAD dalla visualizzazione cronologia in Eclipse
- 11. Mercurial Commit Charts/Graphs
- 12. Mercurial: ripristinare i file
- 13. Migrazione da clearcase a mercurial
- 14. Rimuovi commit vuoto in git
- 15. Cronologia della cronologia Firefox Firebug
- 16. Conversione da Mercurial a Subversion
- 17. In Mercurial, "hg rinomina" funziona ma la cronologia non segue il file?
- 18. Come si esegue la migrazione da un server Mercurial a un altro senza perdere la cronologia?
- 19. Perché il comando di striscia di Mercurial non riscrive la cronologia?
- 20. Dividi grande repository in più sottorepos e conserva la cronologia (Mercurial)
- 21. C'è un modo per rimuovere la cronologia per un singolo file in Mercurial?
- 22. Come convertire un repository Mercurial esistente per utilizzare i sottorepository e mantenere intatta la cronologia?
- 23. pulizia di un Mercurial Repository
- 24. Passaggio da Visual Sourcesafe a Mercurial
- 25. Mercurial to Mercurial to Subversion Workflow Problem
- 26. Rimuovi la cartella e il suo contenuto da git/cronologia di GitHub
- 27. Mercuriale: rimuovi permanentemente i dati sensibili dal repository HG?
- 28. Rimuovi file dal commit modificato
- 29. Mercurial Release Management
- 30. Layout del repository Mercurial per più rami
Quali file sono grandi? – tonfa
Com'è diventato così grande per cominciare? – Santa
Se Jake ha dei file binari (che a volte sono necessari ... non tutti i file binari sono generati dal sorgente), quindi ogni piccola modifica a quel file si traduce in una nuova copia fatta nel repository. A seconda delle dimensioni del file o della frequenza delle modifiche, qualcosa come 60 GB potrebbe non richiedere molto tempo. – bobpaul