SVN Zatwierdź określone pliki

219

Czy istnieje sposób zatwierdzenia tylko listy określonych plików (np. Tylko jedna z listy plików, które SVN chce zatwierdzić).

Pracuję na systemie Mac OS X pod terminalem, bez interfejsu użytkownika.

0100110010101
źródło

Odpowiedzi:

331

Pewnie. Wystarczy wymienić pliki:

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

Nie znam sposobu na to, aby zignorować pewien zestaw plików. Oczywiście, jeśli pliki, które chcesz zatwierdzić, są łatwo wyświetlane przez powłokę, możesz użyć tego:

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

Możesz także poprosić komendę svn o odczytanie listy plików do zatwierdzenia z pliku:

$ svn ci -m "Now works" --targets fix4711.txt
rozwijać
źródło
1
więc w zasadzie powinienem wyraźnie nazwać pliki? nie mogę po prostu powiedzieć, nie dotykaj tego konkretnego pliku?
0100110010101
16
możesz zrobić: svn st | Wytnij -c 9-> target.txt, a następnie edytuj plik target.txt, aby usunąć konkretny plik, i użyj parametru --targets, aby określić listę plików.
rein
17
Myślę, że moim nowym wyzwaniem jest stworzenie błędu, który podpala drukarkę.
James Webster,
3
To żałosne i śmieszne. Brak obszaru postoju. svn addsłuży do dodawania plików do repozytoriów.
Kandinski
68

Użyj list zmian. Przewagą nad określaniem plików jest to, że możesz wizualizować i potwierdzić, że wszystko, co chciałeś, jest faktycznie uwzględnione przed zatwierdzeniem.

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

Po wykonaniu tej czynności svn oddziela rzeczy dla Ciebie. Pomaga to w żonglowaniu wieloma zmianami

$ svn status
A       bar.c
A       baz.c

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

Na koniec powiedz, aby zatwierdził to, co chciałeś zmienić.

$ svn commit --changelist fix-issue-237 -m "Issue 237"
jcwenger
źródło
+1 za odpowiedź punktową. Changeliści to naprawdę droga!
Miro Markaravanes
1
Jeśli chcesz dodać nowe katalogi do listy zmian, nie zapomnij najpierw użyć svn add, a następniesvn changelist fix-issue-237 --recursive path/to/directory
Fabian Schmengler
W rzeczywistości listy zmian nie można używać z nowymi katalogami ... „Subversion obecnie nie obsługuje korzystania z
list zmian
1
@fschmengler: SVN to straszne narzędzie. Po prostu starałem się jak najlepiej wykorzystać złą robotę. Przełącz na git. : P
jcwenger,
10
Wiele lat temu przeszedłem na Git i nigdy nie oglądałem się za siebie. Został zmuszony ponownie użyć svn dla klienta, czuję się jak bieg z piłką i łańcuchem na obie nogi
Fabian Schmengler
38

Zasadniczo umieszczasz pliki, które chcesz zatwierdzić, w wierszu polecenia

svn ci file1 file2 dir1/file3
Wienczny
źródło
1
więc w zasadzie powinienem wyraźnie nazwać pliki? nie mogę po prostu powiedzieć, nie dotykaj tego konkretnego pliku?
0100110010101
2
jeśli prowadzony bez argumentów SVN zobowiązuje wszystkie zmienione pliki, jeśli prowadzony z pliku jako argumentu plik ten popełnił jeśli prowadzony z katalogów wszystkich zmienionych plików w katalogu są zaangażowani
Wienczny
22

Z powodu mojego stanu wywrotu musiałem być kreatywny. svn stpokazał M, Aa ~statusy. Chciałem tylko Mi Adlatego ...

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

To polecenie mówi, że znajdź wszystkie wiersze wypisane przez svn stten początek zaczynając od MlubA , wytnij używając separatora spacji, a następnie poprowadź kolumny 8 do końca. Zrzuć to do target.txt i nadpisz.

Następnie zmodyfikuj target.txt, aby dalej przycinać listę plików. Następnie uruchom poniżej, aby zatwierdzić:

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

Prawdopodobnie nie jest to najczęstszy przypadek użycia, ale mam nadzieję, że to komuś pomaga.

Eric
źródło
2
Możesz także użyć grep -v '^~'do umieszczenia na czarnej liście tego, czego chcesz.
Martin Konecny
7

spróbuj tego skryptu ..

#!/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'`
Abhijit Dhariya
źródło
1

Tworzę (pod) folder o nazwie „ukryj”, przenoszę plik, do którego nie chcę się tam przypisywać. Następnie dokonaj mojego zatwierdzenia, ignorując skargę na brakujący plik. Następnie przenieś ukryty plik z ukrycia z powrotem do ./

Nie znam żadnego minusu tej taktyki.

George Wyche
źródło