2009-05-25 20 views

risposta

4

Ho usato l'estensione hg mqueue per modificare la cronologia. Sembra che abbia funzionato. Grazie a tutti.

+1

ya, http: //mercurial.selenic. com/wiki/EditingHistory ti consente di tornare alle tue revisioni ed eliminare singole revisioni o apportare modifiche (rimuovere le password) nelle tue revisioni – xster

34

Mercurial cerca molto duramente per mantenere i tuoi dati al sicuro, quindi in genere non puoi cambiare la cronologia.

Detto questo, esistono numerose estensioni per Mercurial che consentono di cambiare facilmente la cronologia in ogni caso. C'è un page on the wiki about editing history. Quella pagina spiega anche le conseguenze.

Nel tuo caso specifico, devi chiederti se gli altri avranno già tirato il tuo changeset? Se è così, allora anche se lo rimuovi, esisterà ancora nei loro cloni e potresti stare meglio accettando l'errore.

Se si decide di rimuoverlo, suggerisco di utilizzare hg clone per ottenere una copia senza di esso. Questo è il modo sicuro poiché lascerà sempre un backup. Se spinto [z] al repository remoto:

[x] --- [y] --- [z] 

e ora desidera rimuovere, quindi accedere al server e fare

hg clone -r y repo repo-without-z 

Poi repo-without-z conterrà tutti changests fino ad [y] - vale a dire, [z] saranno stati rimossi:

[x] --- [y] 

È quindi possibile continuare a lavorare e spingere un nuovo changeset:

[x] --- [y] --- [w] 

Se avessi tirato il [z] di modifiche già e ora tirare [w] vedrò due teste nel repository:

  [w] 
     /
[x] --- [y] --- [z] 

Questo non è pericoloso per sé - ma la gente può essere sorpresi. Se rimuovo [z] dal mio clone, finirò con lo stesso repository di te. Ma, come scritto sopra, questo potrebbe essere poco pratico se hai molti utenti.

È inoltre possibile utilizzare la striscia MQ extension a sul posto. In questo modo non farai un nuovo clone.

Infine, se si è certi che il push era l'ultima operazione eseguita sul server, è possibile utilizzare hg rollback per rimuovere l'ultima transazione. Ma non farlo se sei l'unico che può inviare al repository, altrimenti potresti finire con il rollback di una transazione diversa.

Se il repository si trova su Bitbucket, non è possibile accedere al server. Ma Bitbucket ha recentemente aggiunto una funzionalità strip alla sua interfaccia web. Cerca "Gestione repository" nella sezione "Amministrazione".

+1

Grazie per il tuo post. In effetti sto usando bitbucket, stavo cercando di rimuovere un commit dal repository di bitbucket, ma sembra che non sia possibile. Anche usando strip, bitbucket mi dice che sto occupando molto spazio (a causa della guerra che ho caricato). –

+4

Sì, Bitbucket esegue un backup delle revisioni spogliate e il backup conta alla tua quota :-( Puoi eliminare il repository su Bitbucket, crearlo di nuovo con lo stesso nome e spingere dal clone locale. –

+1

Il mio commento sopra non è più valido, per favore vedi la risposta di [Jesper's] (http://stackoverflow.com/a/909290/110204). –

13

Bitbucket offre un pacchetto (backup) in fase di rimozione, e questo corrisponde a non contro la tua quota. Il motivo per cui sembra farlo, è solo perché non abbiamo invalidato la chiave di cache specificando quanto spazio si utilizza.

Questo è un bug nel nostro sistema e verrà risolto.Fino ad allora, state certi che il changeset è stato rimosso e il backup è gratuito :-)

+6

Nice Jesper, grazie per essere passato da :-) –

1

ho avuto un caso simile in cui voglio rimuovere un ramo fusione "A" di modifiche di ramo "Dev" in remoto utilizzando TortoiseHg:

  1. Creare ramo AA di ramo genitore ramo di A; la sua origine
  2. Unisci A in AA (directory di lavoro) e assicurati che l'opzione: "Elimina tutte le modifiche dall'altra revisione" sia selezionata.
  3. Unisci AA nel ramo Dev (con un messaggio di commit che indica che le modifiche del ramo A sono state rimosse).

Vedrete quel ramo Le modifiche non sono più presenti in Dev.

+1

Questo ha funzionato per me, ottima soluzione. Vorrei solo chiarire che per (2), penso che tu intenda "unire A in AA" e scartare. Questo è quello che ho fatto comunque, e quindi il passaggio 3 ha creato un bel commit che ha annullato tutte le modifiche indesiderate. –

Problemi correlati