Domanda

Voglio che Subversion esegua il commit di un file anche se è invariato. C'è un modo per farlo?

È stato utile?

Soluzione

Se vuoi che il contenuto del file rimanga invariato (il che significa che non puoi semplicemente cambiare lo spazio bianco come suggerito da johnstok) puoi sempre cambiare una delle proprietà sul file.

ad es.

svn propset dummyproperty 1 yourfile
svn commit yourfile

Ciò eseguirà un commit senza dover cambiare il file.

Assicurati solo di non usare una delle speciali proprietà svn: . Qualsiasi altra cosa dovrebbe essere ok.


Modifica: Un certo numero di altri poster ha chiesto perché qualcuno vorrebbe farlo - presumibilmente anche le persone che hanno segnato questa risposta hanno avuto le stesse preoccupazioni.

Non posso parlare per il poster originale, ma uno scenario in cui ho visto questo usato è quando si tenta di sincronizzare automaticamente le attività su un repository di Visual Sourcesafe con un repository di sovversione.

Altri suggerimenti

Come rispondere al motivo per cui si vorrebbe fare commit forzati. Ho visto casi in cui qualcuno ha usato un messaggio di commit che era sbagliato o poco chiaro. È bello se puoi eseguire un commit forzato, dove puoi correggere questo errore. In questo modo il messaggio di commit aggiornato va nel repository, quindi non andrà perso.

Ho risolto il problema eliminando e aggiungendo nuovamente il file offensivo. Non è il modo migliore per farlo, e probabilmente ha rotto la cronologia delle revisioni, ma si adattava ai miei scopi.

Motivo per volerlo fare: il file era uno dei due eseguibili creati dalla stessa fonte (con diversi set #define). Un piccolo cambiamento alla fonte significava che uno era cambiato, uno no. Volevo registrare nella cronologia delle revisioni che l'avevo effettivamente aggiornato all'ultima versione (anche se non c'erano cambiamenti).

Forse il punto di Morten Holdflod Møller secondo cui "il file farà ancora parte della nuova revisione" coprirebbe questa indicazione, ma penso che un registro del file invariato non abbia mostrato commenti per quella revisione.

Se si tratta di un file di testo, aggiungi solo degli spazi bianchi, come un feed di riga.

Rispondere ad alcune persone che lo mettono in discussione dovrebbe essere possibile: per qualche ragione svn non riconosce le differenze tra i file doc, quindi vorrei forzare anche il commit!

Ora sto spostando la documentazione da dir statici a svn. i file sono come UG_v1.2, UG_v1.3 ecc. Quindi, solo per conservare la cronologia, prendo 1.2, rimuovo la versione dal nome del file e la aggiungo e la commetto in svn. Quindi prendo il ver dal secondo, lo copio sul primo e voglio impegnarlo e la versione più recente. Le dimensioni del file e la data di creazione cambiano (senza menzionare ciò che è all'interno del documento), ma svn afferma che è perfettamente lo stesso file e non mi consente di impegnarmi. Quando cambio manualmente il documento, svn vede il diverso. Diamine? : & Gt;

Non credo sia possibile, ma prima di tutto perché devi farlo? Se un file rimane invariato, non deve essere eseguito il commit.

Se vuoi davvero che quel file sia raggruppato con altri file in un commit, potresti cambiare qualcosa di minore all'interno (aggiungi uno spazio per esempio).

Il motivo per cui qualcuno vuole commettere un file invariato è il malinteso su come ripristinare una versione precedente di un file.

Ad esempio, è possibile ripristinare il file index.html nella revisione 680 semplicemente aggiornandolo a una revisione in passato, ad es. 650 :

svn update index.html -r 650

ma non risolve il problema, perché:

svn status -u index.html
        *      650   index.html
Status against revision:    680

svn dice chiaramente che index.html è modificato da remoto e non puoi commetterlo, cioè "pensa pensa" che index.html è vecchio e dovrebbe essere aggiornato con una revisione più recente. Quindi il prossimo svn update riporterà index.html alla revisione 680 .

Per ripristinare davvero un file è necessario unirlo nell'ordine inverso:

svn merge -r 680: 650 index.html

e poi commettilo svn ci -m " Ripristinato in r650 " index.html

In realtà, ho trovato un motivo per impegnare la forza. Probabilmente questa non è la migliore pratica ma inseriamo Truecrypt ( http://www.truecrypt.org/ ) volumi in SVN perché dobbiamo mantenere una stretta sicurezza su alcuni script di shell in quanto contengono informazioni riservate. Quando viene creato un volume Truecrypt, i suoi dati binari rimangono invariati, qualunque cosa tu faccia con esso. Quindi, in effetti, posso cambiare il contenuto del volume ma il volume non appare mai cambiato.

La modifica della proprietà NON forzerà il commit.

TortoiseSVN 1.4.5, Build 10425-32 Bit, 26/08/2007 11:14:13

Ho lo stesso problema con un volume trueCrypt.

Ho aggiunto una nuova proprietà (come suggerito sopra) " forceCommit1 " e loro sono stato in grado di eseguire il commit del file di volume. ma solo la proprietà è stata sottoposta a commit e non al contenuto del file.

Ho rimosso il file e l'ho aggiunto di nuovo a svn

Pensavo che potessi farlo dalla riga di comando?

svn ci -force <filename>

Non ho un repository qui per verificarlo, quindi potrei sbagliarmi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top