Come funziona il commit non ricorsivo di Tortoise?


110

Ho estratto localmente una copia del ramo SVN (il mio ramo) a cui ho unito da un ramo diverso (che ha una struttura di cartelle completamente diversa). Quindi fondamentalmente ci sono molte eliminazioni (di vecchi file) e aggiunte (di nuovi file).

Quando provo a eseguire il commit dell'unione nel repository (nel mio ramo), dice Tortoise

Questo commit non è ricorsivo e ci sono cartelle spostate / rinominate selezionate per il commit. Tali spostamenti / ridenominazioni vengono sempre eseguiti in modo ricorsivo nel repository. Vuoi impegnarti comunque?

Va bene procedere con questo commit? In caso contrario, cosa devo fare in modo che non ci siano problemi?

Inoltre, per alcuni file che ho aggiunto, ho apportato modifiche dopo l'aggiunta (se questo influisce sulla natura).

Risposte:


129

Trovato da Google come risolverlo: premi F5 nella finestra di commit (non nel "popup di avviso")

Vedere http://tortoisesvn.tigris.org/ds/viewMessage.do?dsForumId=757&dsMessageId=2831045 per i dettagli.

Il 26.08.2011 alle 22:39, Ryan J Ollos ha scritto:

Da diversi mesi sto vedendo la seguente finestra di dialogo apparire quando si avvia Commit. Succede spesso quando si tenta di eseguire il commit dopo un'unione.

La cosa che ho notato ultimamente, tuttavia, è che se annullo e quindi aggiorno manualmente l'elenco dei file (F5), non vedo più il messaggio quando avvio il commit una seconda volta. Il commit sembra avere successo e senza ulteriori problemi.

La finestra di dialogo di commit monitora la copia di lavoro in un thread in background per le notifiche di modifica. Tali notifiche vengono inviate dal sistema operativo nel caso in cui i file vengano modificati / spostati / rinominati / ... Se viene ricevuta una tale notifica, la finestra di dialogo di commit esegue prima alcuni controlli in modo da poter eliminare la maggior parte di essi. Se la notifica indica che un file non controllato e non visibile nella finestra di dialogo di commit è cambiato in qualche modo, torna al commit non ricorsivo. Questo perché se ad esempio hai un file aperto in un altro editor e salvi le modifiche mentre la finestra di dialogo di commit è aperta, anche quel file verrà salvato anche se non l'hai controllato nella finestra di dialogo di commit (non viene visualizzato finché non aggiorni la finestra di dialogo con F5).

Quindi, se vedi spesso quella finestra di dialogo di avviso, controlla se è in esecuzione un altro strumento / app che modifica i file nella tua copia di lavoro.

E come hai notato: se premi F5, quel 'flag non ricorsivo' viene ripristinato perché dopo un aggiornamento, vedi di nuovo tutti i file, anche quelli che hai modificato dopo aver avviato la finestra di dialogo.

Stefan


1
Il collegamento nella risposta sembra essere morto. Eccone uno valido dall'archivio Internet web.archive.org/web/20150306224932/http://…
buzz3791

1
Ho appena provato a premere F5. L'effetto è che ora l'elenco dei file della finestra di dialogo di commit mostra la maggior parte dei miei file due volte (con esattamente lo stesso percorso e nome) e il messaggio di avviso appare ancora quando tento di eseguire il commit.
OR Mapper

26

Ho riscontrato lo stesso problema ma l'ho risolto ripristinando le modifiche ai file che avevo contrassegnato come "ignore-on-commit"

Dopo aver ripristinato questi file, tortoisesvn è stato in grado di eseguire il commit di tutti gli altri file dall'unione


qual è una vera ragione? perché o come questi file causano il problema?
Mannoj

5

Va bene se procedo con questo commit?

No, il tuo commit ignorerà tutte le modifiche nell'albero WC e rifletterà solo le modifiche a livello di root (unione interrotta).

Hai commesso un errore durante il check-out non ricorsivo inizialmente. Puoi provare a eseguire un commit completo e corretto utilizzando il --depth infinityparametro nella CLI o trovare questa opzione nella GUI di TortoiseSVN.

svn commit --depth infinity . -m "Merge"

1
"Hai commesso un errore durante il check-out non ricorsivo inizialmente." No, non necessariamente. Ho controllato il mio WC nello stesso modo in cui faccio sempre, ma all'improvviso ho ancora questo problema. In effetti, questo non sembra essere affatto il caso di nessuna delle soluzioni alternative di seguito.
Keith M

Questo è completamente falso. Ricevo questo messaggio di tanto in tanto e ho controllato la mia copia di lavoro in modo ricorsivo nello stesso modo in cui ho sempre fatto
1800 INFORMAZIONI

1

Anche per alcuni file che ho aggiunto con SVN, ho apportato modifiche dopo l'aggiunta (se questo influisce sulla natura).

Nel mio caso questo era esattamente ciò che ha causato la visualizzazione del messaggio, anche se ho deselezionato quei file per il commit.

Brutta soluzione che funziona in sicurezza solo se sono interessati solo pochi file:

  1. Crea una copia dei file modificati
  2. Ripristina i file modificati
  3. Conferma la fusione / reintegrazione
  4. Copia i file modificati nella posizione originale

Promemoria a se stessi: reintegrare un ramo solo se l'obiettivo (tronco) è pulito.


1

Sembra che TortoiseSVN esegua una sorta di controllo di validità prima di chiamare il commit. Buono ma il messaggio di errore non è chiaro.

Quando ho riscontrato questo problema, sono tornato a utilizzare la riga di comando svn per eseguire il commit. Il commit non è riuscito a causa del motivo per cui una delle cartelle non era aggiornata. Dopo aver aggiornato solo quella cartella, ho eseguito di nuovo "svn commit" ed è andata a buon fine.

Modifica: PS: prima di utilizzare provalo, assicurati di non avere alcun file contrassegnato come "ignora al commit". "Ignora al commit" è specifico della tartaruga e anche il commit SVN sceglie queste modifiche.


1

Ho solo pensato di postarlo perché ha funzionato per me ...

Il motivo per cui ciò è accaduto è perché avevo parzialmente rinominato uno dei nuovi progetti che avevo creato e per qualche motivo sono stati tutti visualizzati come "Mancanti" nella schermata di commit.

Dopo aver rimosso il progetto e la cartella (su cui SVN aveva messo un segno di spunta) e averli rimessi come nuovo progetto, improvvisamente tutto il "Mancante" si è trasformato in "Aggiunto" e il commit è andato a buon fine senza avvisarmi di nulla .

Spero che questo ti aiuti!


1

Ho visto questo problema e la causa era che alcuni file aggiunti non avevano lo stato aggiunto senza motivo apparente. Erano "normali" anche se la cartella principale veniva visualizzata correttamente come "aggiunta". Ho annullato quelle modifiche "normali" e poi le ho rifatte manualmente. Questo ha fatto apparire ogni elemento aggiunto due volte nell'elenco dei commit ma ha risolto l'errore e ora tutto sembra funzionare.

Non aveva nulla a che fare con l'ignore-on-commit come in un'altra risposta, sembrava solo un bug in TortoiseSVN.


Da quello che posso dire, TortoiseSVN non sposta i file in modo ricorsivo. Lo spostamento di una cartella cambia la cronologia della cartella, ma non i file in essa contenuti. Ciò significa che per spostare le cartelle con TortoiseSVN è necessario ricreare la cartella nella destinazione desiderata, aggiungere la cartella, quindi spostare il contenuto della cartella originale su quella nuova. Oppure usa semplicemente la riga di comando.
Bradley Singer

Credo che questo provenisse da una fusione, non da una mossa. A meno che queste non siano operazioni simili, non le sto seguendo.
Chris

0

Il problema potrebbe essere che il tuo mergeinfo viene cancellato da qualcuno o automaticamente, perché le informazioni si sono spostate in alto nell'albero. Se li unirai di nuovo, per il momento funzionerà. Ma tutti gli altri avranno problemi con i loro rami non uniti. SVN perderà del codice e unirà nuovamente il codice già inviato.

Quindi ripristinare quei file e modificarli di nuovo potrebbe funzionare, ma non dovresti limitarti a eseguire il commit delle modifiche.


0

Ho appena avuto lo stesso problema. Invece di selezionare tutti i file, ho cliccato su versioned e tutto ha funzionato bene. Nel mio caso, l'opzione versioned ha selezionato tutti i file, quindi ora è tutto ok.


-4

Non conosco un'opzione per tortoisesvn ma potresti usare la riga di comando

svn commit --non-recursive [folder]

questo potrebbe funzionare proprio come ti piace lavorare i greeings


Altre risposte dicono che questo non impegnerà ciò che si desidera effettivamente impegnare.
Keith M
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.