Jeśli uruchomię svn rm file
, plik zostanie usunięty z lokalnej kopii roboczej.
Teraz robię:
$ cp file file2
$ svn rm file
$ svn ci
$ mv file2 file
Jak uniknąć usuwania przez svn również lokalnego pliku podczas używania svn rm
?
Jeśli uruchomię svn rm file
, plik zostanie usunięty z lokalnej kopii roboczej.
Teraz robię:
$ cp file file2
$ svn rm file
$ svn ci
$ mv file2 file
Jak uniknąć usuwania przez svn również lokalnego pliku podczas używania svn rm
?
Odpowiedzi:
Chcesz opcji --keep-local
wiersza poleceń. Spowoduje to usunięcie pliku z kontroli wersji bez usuwania go z systemu plików.
$ svn rm --keep-local my_important_file
Uwaga:--keep-local
tylko wpływa na svn rm
swojej kopii. Inni użytkownicy mogą mieć swoją własną lokalną kopię pliku usuniętą, chyba że istnieje konflikt między ich lokalną kopią a repozytorium z powodu wprowadzonych przez nich zmian. To może nie być pożądany rezultat. Zobacz komentarze poniżej.
Usunięcie pliku z SVN bez usuwania go lokalnie nigdzie nie jest częstym problemem. Jednym z wybitnych przykładów jest plik .classpath w projekcie Eclipse. Umieszczenie tego pliku konfiguracyjnego w SVN jest cudowne, o ile wszystkie maszyny używane w projekcie mają tę samą instalację Eclipse i Java. Gdy ten warunek zostanie naruszony, zatwierdzenia zaczynają przerywać inne projekty Eclipse. To jest punkt, w którym należy usunąć plik z SVN bez usuwania go w dowolnym miejscu.
svn rm --keep-local .classpath
wykonuje pracę doskonale na jednej maszynie iw tym momencie.
Problem polega na tym, że inne maszyny mogą utracić ten plik (podczas aktualizacji) lub wskrzesić go (po zatwierdzeniu). Wada SVN nie polega na tym, że nie radzi sobie --keep-local
w repozytorium ani nie przenosi go na inne kopie robocze. Stąd na wszystkich innych maszynach powyższe polecenie musi zostać wykonane - najlepiej przed jakimkolwiek zatwierdzeniem lub aktualizacją.
To oczywiście zadziała w najlepszym przypadku w 90%. Usuwanie i zmiana wersji nastąpi nagle. Moim rozwiązaniem jest, aby każda maszyna, do której mam bezpośredni lub pośredni dostęp, działała
svn rm --keep-local .classpath
copy .classpath .classpath-nameOfTheMachine
svn add .classpath-nameOfTheMachine
To jest tak po prostu brzydkie, że trudno go nazwać „rozwiązaniem”. Niemniej jednak zawsze pozwalał na szybką naprawę późniejszych wypadków.
Nie mam odpowiedzi na to dokładne pytanie, ale mam odpowiedź na pytanie pokrewne, jak usunąć wszystkie pliki (tj. Nie jeden konkretny) w katalogu z kontroli wersji bez usuwania ich lokalnie. To rozwiązanie pochodzi z implementacji Scientific Linux.
ls -a .svn
powinien pokazać katalog svn, który przechowuje dane kontrolne. Po prostu:
rm -r .svn
pozbywa się tego katalogu. Następnie wpisując:
svn status
wyświetli błąd „ostrzeżenie: ten katalog nie jest kopią roboczą”, ponieważ nie podlega już kontroli wersji.
Mam nadzieję, że to pomoże.