2009-09-14 11 views
6

Ho un file in un repository Subversion che cambia quasi ogni volta che viene aperto nell'IDE, creando conflitti su quasi tutti gli aggiornamenti.È possibile sovrascrivere sempre le modifiche locali durante l'aggiornamento da SVN?

È possibile forzare SVN a sovrascrivere sempre il file locale con quello nel repository, anche se sono presenti modifiche locali?

MODIFICA: È un file di progetto VB6. Quelli contengono GUID delle classi ActiveX di riferimento e i loro nomi di file locali. Quando viene aperto un progetto, i nomi dei file locali vengono aggiornati automaticamente. Deve essere sotto controllo di versione perché l'applicazione non può essere costruita senza di essa.

+1

Che file è? È necessario averlo sotto Subversion? – RichardOD

+0

@RichardOD: aggiornato alla domanda –

risposta

4

In primo luogo, mi dispiace per te per aver dovuto lavorare in VB6.

In secondo luogo, suppongo che ciò che è veramente necessario fare è eliminare il file prima dell'aggiornamento. Quindi, in questo caso, si potrebbe avere un file bat chiamato "do update", e basta fare doppio clic su questo, invece di usare effettivamente TortiseSVN (o qualsiasi altra cosa) per fare gli aggiornamenti. Fai fare a questo pipistrello di eliminarlo e quindi, senza sorprese, aggiornalo.

Incredibilmente zoppo, ma vedo il tuo problema che il file deve essere nel controllo del codice sorgente, eppure vuoi ignorare le modifiche generali se non esplicitamente impegnato.

0

Bene, è sempre possibile utilizzare il checkout dell'aggiornamento.

Non sono sicuro al 100%, ma poiché SubVersion memorizza solo la differenza tra i file, non sono sicuro che sia possibile farlo. Puoi anche utilizzare il ripristino dell'intero repository locale.

0

Prima di tutto, se questo file cambia ogni volta che si apre IDE, probabilmente non dovrebbe essere nel controllo di versione. Dovresti rimuoverlo e aggiungerlo alla lista di ignorare.

Se si desidera rifiutare le modifiche locali prima dell'aggiornamento, è necessario eseguire un ripristino prima dell'aggiornamento. SVN stesso non lo farà, è necessario farlo manualmente.

1

Immagino che questo sia un file, che viene sempre creato/modificato dinamicamente dal tuo IDE.

Penso che se si aggiunge questo file al svn: ignora le impostazioni, questo sarebbe più adatto alle tue esigenze. Guarda lo svn-configuration per maggiori dettagli. Questa impostazione fa sì che SVN ignori questo file durante l'aggiunta o l'importazione. Con esso puoi anche mantenere le modifiche locali al file, nel caso in cui tu abbia la necessità di farlo a un certo punto.

1

Aggiornamento: Poiché il file che descrivi viene generato automaticamente, la soluzione migliore è annullare il file e lasciare che ogni copia di lavoro abbia una copia indipendente. Non devi preoccuparti della creazione del progetto senza di essa, poiché VB ricrea il file quando necessario (giusto?). Se stai usando un'integrazione continua o un altro server di build, tieni solo una copia del file sul tuo build server, o anche una copia in SVN (chiamata diversamente, in modo che non sia in conflitto), che è appropriata per il tuo server di build, e modifica il tuo processo di compilazione per rinominare il file come prima cosa.

Ad esempio, supponendo che il file sia denominato "foo", è possibile mantenere un file "foo.example" in SVN. Quindi quando controlli il progetto per la prima volta su su una macchina, la prima cosa che devi fare è rinominare "foo.example" in "foo", e quindi aprire l'IDE. L'IDE lo modificherà, ma le tue modifiche rimarranno locali. Quindi non saranno influenzati dagli aggiornamenti, e se metti "foo.example" nell'elenco svn:ignore, non dovrai preoccuparti di verificarlo accidentalmente. L'unico inconveniente è che rende il tuo checkout iniziale leggermente più coinvolto , ma sembra un piccolo prezzo da pagare.

Una buona regola empirica è che se si dispone di file il cui contenuto può essere completamente generato da altri file nel repository, probabilmente non appartengono al repository. Invece, o lasciarli fuori completamente, o sostituirli con uno script che li genera come necessario.

+0

Il file non viene generato automaticamente, è solo aggiornato automaticamente. –

+0

@DR: OK, ho pensato che avrei potuto ricordarlo (non ho fatto VB6 da anni, scusa). Ma la mia risposta è ancora valida: conserva una copia di "esempio" del file in SVN, ma mantieni il file * actual * come un file non modificato nella tua copia di lavoro. Sembra la soluzione più semplice e pulita. –

1

E 'possibile forzare SVN per sempre sovrascrivere il file locale con quello nel repository

che sarebbe una cattiva idea. I file di progetto VB6 contengono informazioni che devono essere versionate. Ad esempio, una riga con un riferimento al file viene aggiunta lì ogni volta che aggiungi un modulo al progetto. Pertanto non dovresti semplicemente scartare automaticamente le modifiche locali apportate ad esso.

Il tuo problema è con i commit, non gli aggiornamenti: il modo migliore per evitare conflitti è da non commettere i cambiamenti indesiderati fatta dai IDE.This VB6 può essere raggiunto educando gli sviluppatori di rivedere in realtà i cambiamenti che stanno commettendo. In TortoiseSVN è abbastanza facile ispezionare le modifiche a ciascun file dalla finestra di commit e ripristinare le modifiche riga per riga.

Rivedere le modifiche quando si esegue il commit è qualcosa che si dovrebbe fare comunque. E direi che è ancora più importante per le modifiche rese semi-automatiche da un IDE. Devi mantenere il controllo su ciò che sta accadendo alla tua base di codice.

Problemi correlati