Szukam dobrego sposobu, aby automatycznie „svn dodać” wszystkie niewersjonowane pliki w kopii roboczej do mojego repozytorium SVN.
Mam serwer na żywo, który może utworzyć kilka plików, które powinny być pod kontrolą źródła. Chciałbym mieć krótki skrypt, który mogę uruchomić, aby automatycznie je dodać, zamiast przeglądać i dodawać je pojedynczo.
Na moim serwerze działa system Windows Server 2003, więc rozwiązanie uniksowe nie będzie działać.
svn
command-line
windows-server-2003
JerSchneid
źródło
źródło
Odpowiedzi:
svn add --force * --auto-props --parents --depth infinity -q
Świetna wskazówka! Jedna uwaga: mój Eclipse automatycznie dodaje nowe pliki do listy ignorowanych. Może to być kwestia konfiguracji, ale tak czy inaczej: istnieje
--no-ignore
opcja, która pomaga.Następnie możesz zatwierdzić:
źródło
alias magic="svn add --force * --auto-props --parents --depth infinity -q"
- Wyjaśnione:svn help add
*
na końcu, bo inaczej by to nie zadziałało (na wynajem dla mnie)To jest inne pytanie niż moje, ale odpowiedź na to pytanie brzmi:
źródło
Co to działa:
Dodaje zawartość podkatalogów.
Nie dodaje ignorowanych plików.
Wyświetla listę plików, które zostały dodane.
Kropka w poleceniu wskazuje bieżący katalog, który można zastąpić określoną nazwą katalogu lub ścieżką, jeśli chcesz dodać katalog inny niż bieżący.
źródło
.\*
lub jeśli katalog główny svn znajduje się w innym katalogustuff\svn_root\*
.stuff\svn_root
nie dodaje plików do podkatalogów (np. Wstuff\svn_root\already_in_svn\not_in_svn.txt
). Stąd gwiazda na końcu.To działało dla mnie:
( Źródło )
Ponieważ rozwiązałeś już problem z Windows, jest to rozwiązanie UNIX (po Samie). Dodałem tutaj, ponieważ uważam, że nadal jest przydatny dla tych, którzy odpowiedzą na to pytanie, prosząc o to samo (ponieważ tytuł nie zawiera słowa kluczowego „WINDOWS”).
Uwaga (luty 2015): Jak skomentował „bdrx”, powyższe polecenie można dodatkowo uprościć w następujący sposób:
źródło
awk '/^[?]/{print $2}'
; Nie ma potrzeby dodatkowego procesu grep.Spowoduje to dodanie dowolnego niewersjonowanego pliku do bieżącego katalogu i wszystkich wersjonowanych katalogów podrzędnych.
źródło
Ta metoda powinna obsługiwać nazwy plików, które zawierają dowolną liczbę / kombinację spacji ...
Oto wyjaśnienie działania tego polecenia:
Użyj argumentu -i do xargs, aby poradzić sobie z możliwością importowania nazw plików ze spacjami do 'svn add' - w zasadzie -i ustawia {} do użycia jako symbol zastępczy, abyśmy mogli umieścić znaki "wokół nazwy pliku używanej przez 'svn Dodaj'.
Zaletą tej metody jest to, że powinna ona obsługiwać nazwy plików ze spacjami.
źródło
TortoiseSVN ma tę funkcję wbudowaną, jeśli chcesz użyć rozwiązania innego niż wiersz poleceń. Kliknij prawym przyciskiem myszy folder najwyższego poziomu i wybierz Dodaj ...
źródło
Jest to udokumentowane w książce svn i najprostsze i działa idealnie dla mnie
http://svnbook.red-bean.com/en/1.6/svn.ref.svn.c.add.html
źródło
Posługiwać się:
źródło
svn status | cut -d ? -f 2 -s | xargs svn add
Zawsze używam:
Kopiuj wklej
źródło
Ponieważ ten post jest oznaczony jako Windows, pomyślałem, że opracuję rozwiązanie dla systemu Windows. Chciałem zautomatyzować ten proces i utworzyłem plik nietoperza. Opierałem się tworzeniu pliku console.exe w języku C #.
Chciałem dodać pliki lub foldery, które nie są dodawane do mojego repozytorium, kiedy rozpoczynam proces zatwierdzania.
Problem z wieloma odpowiedziami polega na tym, że będą wyświetlać niewersjonowane pliki, które należy zignorować zgodnie z moją listą ignorowania w TortoiseSVN .
Oto moje ustawienie haka i plik wsadowy, który to robi
Skrypt haka żółwia:
svnadd.bat
źródło
W ramach tej implementacji będziesz mieć kłopoty, jeśli twoje foldery / nazwy plików mają więcej niż jedno miejsce, jak poniżej:
takie przypadki są objęte prostymi:
źródło
Jeśli korzystasz z systemu Linux lub Cygwin lub MinGW w systemie Windows, możesz użyć rozwiązań typu bash, takich jak poniżej. W przeciwieństwie do innych podobnych tutaj przedstawionych, ten uwzględnia przestrzenie nazw plików:
źródło
Po spędzeniu czasu na zastanawianiu się, jak rekurencyjnie dodawać tylko niektóre pliki, pomyślałem, że warto udostępnić to, co zadziałało:
Oto wyjaśnienie.
Pierwsze polecenie dodaje wszystkie katalogi. Drugie polecenie dodaje tylko pliki zgodnie z określonymi wzorami.
Pozwól, że podam więcej szczegółów:
W drugim poleceniu jedynymi różnicami są polecenie dir i polecenie svn, myślę, że jest wystarczająco jasne.
źródło
Możesz użyć polecenia
lub
Jeśli Twoje pliki / katalogi nie są dodawane rekurencyjnie. Następnie sprawdź to.
Dodawanie rekurencyjne jest właściwością domyślną . Możesz zobaczyć w książce SVN .
Problem może znajdować się na liście ignorowanych lub we właściwościach globalnych.
Mam rozwiązanie Google do śledzenia problemów
Sprawdź właściwości globalne pod kątem ignorowania gwiazdki (*)
TortoiseSVN > Properties
.svn:global-ignores with a value of *
star(*)
to zignoruje dodawanie rekurencyjne. Więc usuń tę właściwość.Sprawdź globalny wzór ignorowania dla ignorowania gwiazdy (*)
TortoiseSVN > Settings > General
.star(*)
, usuń tę właściwość.Ten facet też wyjaśnił dlaczego ta właściwość została dodana w moim projekcie.
Najbardziej podobnym sposobem jest to, że ktoś kliknął plik prawym przyciskiem myszy bez rozszerzenia i wybrał TortoiseSVN -> SVN Ignoruj -> * (rekurencyjnie), a następnie dokonał tego.
źródło
W systemie Linux możesz wprowadzić następujące polecenie:
źródło
Ponieważ określił system Windows, w którym awk i sed nie są standardowe:
lub w pliku wsadowym:
źródło
Jest to leniwy i niebezpieczny sposób synchronizacji katalogu z SVN, w tym nowych plików:
Chociaż może to działać w skrócie, może mieć również poważne konsekwencje. Na przykład SVN często traci historię pliku.
Idealnym sposobem synchronizacji katalogu jest możliwość różnicowania, a następnie używania łatki svn, jednak różni się ona od formatów w poleceniu diff, a polecenie svn diff porównuje różnice w katalogu roboczym, a nie różnice na poziomie systemu plików.
źródło
Myślę, że zrobiłem coś podobnego z:
ale nie jestem pewien, czy moja pamięć jest poprawna ;-p
źródło