SVN Esegue il commit di file specifici


219

Esiste un modo per eseguire il commit solo di un elenco di file specifici (eq solo uno degli elenchi di file che SVN vuole impegnare).

Sto lavorando su MAC OS X sotto Terminal, senza alcuna interfaccia utente.

Risposte:


331

Sicuro. Elenca solo i file:

$ svn ci -m "Fixed all those horrible crashes" foo bar baz graphics/logo.png

Non sono a conoscenza di un modo per dirlo di ignorare un determinato set di file. Naturalmente, se i file che si desidera eseguire il commit sono elencati facilmente dalla shell, è possibile utilizzare quello:

$ svn ci -m "No longer sets printer on fire" printer-driver/*.c

Puoi anche fare in modo che il comando svn legga l'elenco dei file da eseguire da un file:

$ svn ci -m "Now works" --targets fix4711.txt

1
quindi, in sostanza, dovrei nominare i file esplicitamente? non posso semplicemente dire di non toccare questo particolare file?
0100110010101

16
potresti fare: svn st | tagliare -c 9-> target.txt, quindi modificare il file target.txt per rimuovere il file specifico e utilizzare il parametro --targets per specificare l'elenco file.
Rein

17
Penso che la mia nuova sfida sia quella di creare un bug che dia fuoco alla stampante.
James Webster

3
È patetico e ridicolo allo stesso modo. Nessuna area di stadiazione. svn addviene utilizzato per aggiungere file ai repository.
Kandinski,

68

Usa le liste dei cambiamenti. Il vantaggio rispetto alla specifica dei file è che è possibile visualizzare e confermare tutto ciò che si desidera sia effettivamente incluso prima di eseguire il commit.

$ svn changelist fix-issue-237 foo.c 
Path 'foo.c' is now a member of changelist 'fix-issue-237'.

Fatto ciò, svn ora mantiene le cose separate per te. Questo aiuta quando si destreggiano tra più modifiche

$ svn status
A       bar.c
A       baz.c

--- Changelist 'fix-issue-237':
A       foo.c

Infine, digli di impegnare ciò che volevi fosse cambiato.

$ svn commit --changelist fix-issue-237 -m "Issue 237"

+1 per la risposta puntuale. Le liste dei cambiamenti sono davvero la strada da percorrere!
Miro Markaravanes,

1
Se si desidera aggiungere nuove directory a un elenco modifiche, non dimenticare di utilizzare prima svn add, quindi utilizzaresvn changelist fix-issue-237 --recursive path/to/directory
Fabian Schmengler

In realtà le liste dei cambiamenti non possono essere usate con nuove directory .... "Subversion attualmente non supporta l'uso delle liste dei cambiamenti con le directory."
Fabian Schmengler

1
@fschmengler: SVN è uno strumento orribile. Stavo solo cercando di trarre il meglio dal cattivo lavoro che fa. Passa a git. : P
jcwenger,

10
Sono passato a Git molti anni fa e non ho mai guardato indietro. Fu costretto a usare di nuovo svn per un cliente, sembra di correre con la palla e la catena su entrambe le gambe
Fabian Schmengler,

38

Fondamentalmente metti i file che vuoi commettere sulla riga di comando

svn ci file1 file2 dir1/file3

1
quindi, in sostanza, dovrei nominare i file esplicitamente? non posso semplicemente dire di non toccare questo particolare file?
0100110010101

2
se eseguito senza argomenti svn esegue il commit di tutti i file modificati se eseguito con un file come argomento, viene eseguito il commit di questo file se eseguito con una directory viene eseguito il commit di tutti i file modificati nella directory
Wienczny

22

A causa del mio stato di sovversione, ho dovuto diventare creativo. svn stha mostrato M, Ae ~gli stati. Volevo solo Me Aquindi ...

svn st | grep ^[A\|M] | cut -d' ' -f8- > targets.txt

Questo comando dice di trovare tutte le linee svn stche iniziano con quella che inizia con Mo A, tagliare usando il delimitatore di spazio, quindi ottenere le colonne 8 alla fine. Scaricalo in target.txt e sovrascrivi.

Quindi modificare target.txt per eliminare ulteriormente l'elenco dei file. Quindi esegui di seguito per eseguire il commit:

svn ci -m "My commit message" --targets targets.txt

Probabilmente non è il caso d'uso più comune, ma si spera che aiuti qualcuno.


2
Puoi anche usare grep -v '^~'per inserire nella blacklist ciò che desideri.
Martin Konecny,


7

prova questo script ..

#!/bin/bash
NULL="_"
for f in `svn st|grep -v ^\?|sed s/.\ *//`; 
     do LIST="${LIST} $f $NULL on"; 
done
dialog --checklist "Select files to commit" 30 60 30 $LIST 2>/tmp/svnlist.txt
svn ci `cat /tmp/svnlist.txt|sed 's/"//g'`

1

Faccio una (sotto) cartella denominata "nascondi", muovo il file a cui non voglio impegnarmi. Quindi esegui il commit, ignorando il reclamo per il file mancante. Quindi spostare il file nascosto da hide a ./

Non conosco alcun aspetto negativo di questa tattica.

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.