Mam wymóg utworzenia kompilacji na podstawie znacznika lub gałęzi. Dlatego zautomatyzowałem proces kompilacji, aby przejść do znacznika lub gałęzi, gdy pytają o kompilacje. Iam za pomocą polecenia switch svn, aby skopiować kopię roboczą do znacznika lub gałęzi z kopii roboczej łącza. Problem polega na tym, że: Jeśli w wersji głównej są nowo dodane foldery, nie są one usuwane z kopii roboczej. Pozostają one niewersjonowane w kopii roboczej, ale niewersjonowane foldery w kompilacji powodują wiele problemów. Jak uniknąć tego problemu? Czy istnieje opcja uniknięcia niewersjonowanych plików podczas używania polecenia switch svn.Przełącznik SVN nie usuwa folderów/plików w działaniu, które nie są obecne podczas przełączania do znacznika lub gałęzi
Odpowiedz
Przełącznik SVN nie usunie niewersjonowanych plików, jak już znalazłeś.
Sposób w jaki postępuję w procesie budowania (Cruise Control) polega na tym, aby zawsze usuwać cały folder roboczy po każdym kompilacji. Następnie, gdy twój proces budowy otrzyma SVN, będzie on w pustym katalogu i nie będzie konfliktów.
BTW dlatego powinieneś używać oddzielnego serwera kompilacji - wtedy nie będziesz mieć niezaakceptowanej pracy programisty, która przeszkadza w kompilacji.
Dwa lata później ...
Po pewnym majstrować wokół i widząc Twoje pytanie (Sandy) odpowiedź brzmi tak, przełącznik należy usunąć katalog. Miałem ten sam problem i wymyśliłem ten jeden.
Żeby było jasne, kwestia jak rozumiem to jest, że dodać katalog/folder do swojej branży, a następnie powrócić do bagażnika. Ten dodany folder powinien zostać usunięty podczas przełączania.
Widziałem, że SVN Tortoise próbował usunąć folder, ale bez błędu i bez faktycznego usuwania folderu. Okazało się, że był problem z uprawnieniami. Po ręcznym usunięciu folderu znajdującego się na Trunkie przełączanie się tam iz powrotem powodowało oczekiwane rezultaty; folder zostanie usunięty.
Nie ma błędów, ale przed przełączeniem trzeba się upewnić, że obszar roboczy jest czysty. Jeśli jest czysty, przełączanie usuwa/tworzy pliki i katalogi, które są obecne tylko w jednej wersji. W tym celu podręcznik subversion 1.6 mówi:
"Przełączenie" kopii roboczej, która nie ma lokalnych modyfikacji do innego oddziału, powoduje, że kopia robocza wygląda tak samo, jak gdybyś zrobił nowe zakupy w katalogu.
Właśnie przetestowałem to z nowo utworzonym repozytorium testów. Jeśli z drugiej strony istnieją lokalne modyfikacje w bieżącym obszarze roboczym, svn nie odrzuci ich. svn jest dość konserwatywny pod tym względem. Na przykład. Stworzyłem katalog dir
na trunk i zatwierdziłem go. Następnie utworzyłem plik kopii zapasowej dir/file.~1~
. To nie było zgłaszane przez svn st
ponieważ *~
jest globalnie ignorowane z moim config. Kiedy przeszedłem z powrotem do oddziału svn powinien usunięty dir
ale to byłby usunięty plik kopii zapasowej, więc svn nie robić. Zachował katalog jako lokalną modyfikację.
dygresja: po włączeniu powrotem do tułowia svn ponownie zgłosił błąd, ponieważ dir
jako lokalnej modyfikacji na oddział był w konflikcie z wersjonowanym dir
na pniu. --force
rozwiązał ten problem.
Nie przeczytałeś wystarczająco dobrze problemu. "svn add", a następnie "svn switch" do starej wersji powoduje nierejestrowane pliki, ale powinny one zostać usunięte. Przy czystym zakupie "przełącznik svn" pomiędzy różnymi oddziałami i tagami nie powinien powodować konfliktów, ale w rzeczywistości powoduje konflikty. Może powinienem spróbować stworzyć powtarzalny scenariusz ... – tobixen
Testowałem teraz z czystym i pustym repo, stopniowo dodając kilka plików i katalogów i robiąc oznaczenia - ale SVN zrobił to, co trzeba, i usunął nowsze pliki. Dziwne. Jestem pewien, że zaobserwowałem problemy w zeszłym tygodniu, a problemy z pewnością nie wynikały z plików dodanych lokalnie. Będę grał z tym trochę więcej. – tobixen
OK, myślę, że być może coś tu jest. Moje badania tutaj są zbyt długie, aby zmieścić się w komentarzu, więc napiszę osobną odpowiedź. – tobixen
Rzeczy działają tak, jak powinny, przynajmniej w svn 1.6.11 i wyższych. Jednak proces kompilacji jest całkiem prawdopodobne, aby pozostawić pliki unrevisioned. Tych może być przezroczysta na „svn status” ze względu na ustawienia SVNIGNORE.Może to powodować problemy, gdy ktoś oczekuje, że svn usunie cały katalog.
Zrobiłem kilka testów - ustawiłem nowe i puste repozytorium, utworzyłem katalogi tułowia i znaczników, dodałem jeden i jeden plik podczas oznaczania go. (poniższe sekcje kodu nie zawierają danych wyjściowych i błędów zgłaszanych przez SVN, zachęcamy do skopiowania go do okna terminala i sprawdzenia, czy można powielić to zachowanie).
mkdir /tmp/workdir/
cd /tmp/workdir
svnadmin create /tmp/foobar
svn checkout file:///tmp/foobar/
svn mkdir foobar/tags
svn mkdir foobar/trunk
cd foobar
svn commit -m "trunk and tags"
## NOTE: in svn 1.8 and higher, it's needed with a --ignore-ancestry option below
svn switch file:///tmp/foobar/trunk
(i tu już widzimy, że robi słusznie - usunięcie znaczników i podkatalogów trunk)
touch file1
svn add file1
svn commit -m "added file1"
svn cp -m "file1 in tag1" . file:///tmp/foobar/tags/tag1
A potem znowu ...
touch file2
svn add file2
svn commit -m "added file2"
svn cp -m "file2 in tag2" . file:///tmp/foobar/tags/tag2
Powiedzmy wyraźnie usuń plik1 ze znacznika3
svn rm file1
svn commit -m "deleted file1"
svn cp -m "file1 removed from tag3" file:///tmp/foobar/trunk/ file:///tmp/foobar/tags/tag3/
... i nowy katalog, jak również ...
svn mkdir dir1
touch dir1/file3
svn add dir1/file3
svn commit -m "added dir1/file3"
svn cp -m "dir1/file3 in tag4" file:///tmp/foobar/trunk file:///tmp/foobar/tags/tag4/
... i niech go usunąć w tag5 ...
svn rm dir1
svn commit -m "removed dir1/file3"
svn cp -m "dir1/file3 removed in tag5" file:///tmp/foobar/trunk file:///tmp/foobar/tags/tag5/
... i sprawdźmy jak przełączanie utworów. ..
svn switch file:///tmp/foobar/tags/tag1
svn switch file:///tmp/foobar/tags/tag2
svn switch file:///tmp/foobar/tags/tag3
svn switch file:///tmp/foobar/tags/tag4
svn switch file:///tmp/foobar/tags/tag5
svn switch file:///tmp/foobar/tags/tag4
... żadnych problemów. Ale powiedzieć, że zmodyfikowane dir1/plik3 z emacs - to zazwyczaj zrobić kopię zapasową pliku:
touch dir1/file3~
nie pokazać się na „svn status” ze względu na ustawieniach domyślnych SVNIGNORE ...
svn status
ale to wystarczy, aby złamać rzeczy:
svn switch file:///tmp/foobar/tags/tag5
svn status
svn switch file:///tmp/foobar/tags/tag4
pierwsze polecenie wskazuje, że dir1 zostanie usunięty, ale ze względu na pliku unrevisioned katalog dostaje stojąco.
"svn przywrócić" niestety nie usuwa unrevisioned plików ...
svn revert -R .
svn switch file:///tmp/foobar/tags/tag5
svn status
svn switch file:///tmp/foobar/tags/tag4
"make clean" może i może nie działać, w zależności od środowiska. Można oczywiście zrobić skrypt, aby go usunąć, to znaczy tak:
rm -rf $(svn status --no-ignore | grep -E '^\?' | awk ' { print $2 ; }')
svn switch file:///tmp/foobar/tags/tag4
Należy pamiętać, że powyższe polecenie może robić złe rzeczy, kiedy napotykają nazwy plików ze spacjami.
One mogą uniknąć niektórych komunikatów o błędach powyżej za pomocą „force”:
touch dir1/file3~
svn switch --force file:///tmp/foobar/tags/tag5
svn switch --force file:///tmp/foobar/tags/tag4
Zauważ, że mydir1/plik3 ~ nigdy nie zostanie usunięty, ale że ostatni przełącznik nie zawiedzie
- 1. Dlaczego Git nie usuwa niektórych plików podczas przełączania gałęzi?
- 2. jak dokonać zatwierdzenia do różnych gałęzi svn bez przełączania
- 3. Jakie znaki NIE są obecne w Unicode?
- 4. jgitflow: release-finish nie usuwa gałęzi wydania
- 5. Zmienne środowiska Xcode nie są obecne podczas archiwizacji
- 6. Wypełnienie w zespole jest obecne lub nie
- 7. Wycieki pamięci, które wciąż są obecne w WPF 4
- 8. Czy usunięcie gałęzi w git usuwa ją z historii?
- 9. Na RDS mogę tworzyć tabele w Read Replica, które nie są obecne w Master?
- 10. Które zdarzenie jest uruchamiane podczas przełączania układu kb na X.org
- 11. Status git svn - pokazuje zmiany, które nie są zatwierdzone do svn
- 12. GIT: Jak zachować ignorowane pliki podczas przełączania gałęzi?
- 13. Migracja skomplikowanej hierarchii gałęzi SVN do Mercurial
- 14. zapytań SQL, aby znaleźć wiersze, które nie są obecne w innych tablicach
- 15. Porównaj dwa data.frames znaleźć wiersze w data.frame 1, które nie są obecne w data.frame 2
- 16. Czy istnieje narzędzie, które usuwa funkcje, które nie są używane w Pythonie?
- 17. Reakcja Natywne foldery na iOS i Android nie są obecne.
- 18. Porównanie dwóch DataTables i wybrać wiersze, które nie są obecne w drugiej tabeli
- 19. Tworzenie znacznika gałęzi Git w VSO lub VS2015
- 20. Jak mogę zmusić Emacs do przywrócenia wszystkich niezmienionych buforów podczas przełączania gałęzi w git?
- 21. Automatyczne kompilacje gałęzi z SVN
- 22. NotImplementedError podczas przełączania do Poltergeist
- 23. Zadzwoń do getLayoutInflater() w miejscach, które nie są w działalności
- 24. Ehcache - przy użyciu SelfPopulatingCache, gdy dane nie są obecne
- 25. SVN Zmień nazwę folderu w gałęzi, Konflikt
- 26. Jakie funkcje Lisp są obecne w Ruby?
- 27. SVN pokazuje pliki w katalogu roboczym, które są nieaktualne.
- 28. Czy "svn switch" usuwa kiedykolwiek pliki dodane lokalnie?
- 29. git: pobierz pliki z innej gałęzi do bieżącej gałęzi (nie przełączaj HEAD do drugiej gałęzi)
- 30. Punkt przerwania w działaniu nie działa
I Myślę, że nie dostałem moich pytań. Head rewizja będzie mieć niektóre foldery lub pliki przeznaczone na repozytorium, podczas gdy z powrotem te foldery zostaną usunięte z kopii roboczej.po przejściu do gałęzi/znacznika kopia robocza jest równa nowej gałęzi lub znacznikowi – sandy
Myślę, że przegapiłeś to, co miałem na myśli .. Jeśli usuniesz wszystkie z katalogu roboczego przed zmianą, to nie ma znaczenia, co tam było wcześniej lub w chwili obecnej w dowolnym innym oddziale/tagu. Będziesz miał tylko kod dla gałęzi, którą chcesz zbudować. –
po usunięciu, czy mogę zrobić przełącznik svn, zamiast tego mogę zrobić svn kasy. ponieważ kopia robocza jest pusta ?, a następnie wats cały punkt posiadania polecenia przełącznika svn. Popraw mnie, jeśli się mylę? – sandy