Jak odrzucić lokalne zmiany w kasie SVN?
Chciałem złożyć diff do recenzji, dla projektu Open Source.
Kod otrzymałem używając SVN (z terminala, Ubuntu). I zrobiłem drobne zmiany w kilku plikach. Teraz jest tylko jedna zmiana, którą chcę zgłosić. Pozostałe zmiany, które wprowadziłem, były do debugowania i nie są już wymagane.
Wygenerowałem diff używając svn di > ~/os/firstdiff.diff
Czy jest na to sposób SVN? Jeśli nie, będę musiał przejść do każdego pliku i usuń wszystkie moje edycje. Następnie wygenerowałbym nowy diff i przesłał go.
8 answers
Po prostu użyj svn revert
polecenie, na przykład:
svn revert some_file.php
Jest to (jak każde inne polecenie svn) dobrze udokumentowane w zasobie svnbook lub na stronie podręcznika, a nawet w Komendzie svn help
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-17 18:06:26
Musisz cofnąć wszystkie zmiany używając svn revert komendy:
- Przywróć zmiany do pliku:
svn revert foo.c
- Przywróć cały katalog plików:
svn revert --recursive .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-12 19:58:46
Aby odrzucić lokalne zmiany w jednym konkretnym pliku:
$ svn revert example_directory/example_file.txt
Aby odrzucić lokalne zmiany w jednym konkretnym folderze:
$ svn revert -R example_directory/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-16 13:47:51
Proste svn revert
wystarczyło na oryginalny plakat. Jednak prosty svn revert
nie zrobi się w bardziej ogólnym przypadku, gdy ty
- mieć zarówno edycje, które chcesz udostępnić, jak i edycje, których nie chcesz udostępnić W tym samym pliku ,
- miej lokalne zmiany, które nadal jesteś zainteresowany utrzymaniem dla własnej prywatnej korzyści .
@ErichBSchulz sugestia użycia git add -p
jest bardzo rozsądna i znacznie bardziej ogólnie zastosowanie w takim przypadku. W odpowiedzi brakowało tylko szczegółów. Zakładając, że Twój bieżący katalog jest katalogiem, w którym chcesz wprowadzić łatkę sharable, możesz zrobić coś takiego:
-
Checkout nieskazitelna wersja z subversion do innego katalogu (wybierz nazwę katalogu, który nie istnieje, tutaj używając podkatalogu
TMP/
).$ url=$(svn info . | awk '/^URL/ {print $2}') $ svn checkout "$url" TMP
-
Używając tego nieskazitelnego SVN checkout jako podstawy, init repozytorium git, ignorując .katalogi svn; commit wszystko w svn przechodzi do tymczasowego repozytorium git
$ cd TMP $ git init && echo ".svn/" > .gitignore $ git add -A && git commit $ cd ..
-
Skopiuj nowo przygotowane metadane repozytorium git do oryginalnego katalogu roboczego; ponieważ nieskazitelny katalog kasy subversion nie jest potrzebny, możesz się go pozbyć. Twój katalog roboczy jest teraz zarówno repozytorium git jak i subversion:
$ mv TMP/.git . $ rm -rf TMP/
-
Możesz teraz użyć potężnego i wygodnego
git add -p
, aby interaktywnie wybrać dokładnie to, co chcesz udostępnić i zatwierdzić je do swojego repozytorium git. Jeśli chcesz dodać pliki do commita, wykonaj równieżgit add <file-to-add>
przedgit commit
$ git add -p <interactively select (and edit) the chunks you want to share> $ git add ${the_list_of_files_not_in_yet_in_svn_you_want_to_add} $ git commit
-
Używając commita, przygotuj łatkę, którą chcesz udostępnić. W tym celu możesz również użyć
git diff HEAD^..HEAD
, lubgit format-patch
(ten ostatni może być użyty do bezpośredniego przygotowania wiadomości e-mail do wysłania zawierających łatkę lub wiele łatek):$ git show -p HEAD > my-mighty-patch.patch
Aby pozbyć się metadanych git, po prostu zrób rm -rf .git/
. Jeśli planujesz kontynuować hakowanie z oryginalnym katalogiem roboczym, możesz nadal używać git
aby zarządzać lokalnymi zmianami. W tym przypadku prawdopodobnie skorzystasz z inwestycji w naukę korzystania z git svn
.
Uwaga: jeśli jesteś zaznajomiony z git
jest to raczej banalna rzecz do improwizacji. W przeciwnym razie wygląda to trochę niechlujnie. Możesz uogólnić to podejście, pisząc skrypt z tych kroków, aby zaimplementować "interactive commit" lub "interactive patch creation" dla svn, który mógłby być użyty bez żadnego zrozumienia Gita.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-23 04:59:05
You could use
svn diff important/file1.c important/file2.c > $HOME/os/firstdiff.diff
Publikując swój diff, nie zapomnij podać wersji, wobec której się różnisz.
Jak odpowiedzieli inni, Możesz również używać svn revert
ostrożnie. To zależy, czy chcesz zachować lokalne zmiany w swojej przyszłej pracy, czy nie...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-27 11:16:30
Przejdź do katalogu głównego tego repozytorium i uruchom następujące polecenie
svn revert --depth=infinity .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-22 16:23:07
Możesz użyć polecenia commit na pliku, który chcesz umieścić, i użyć polecenia SVN revert, aby odrzucić pozostałe zmiany lokalne
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-27 10:51:36
Użyj Git!
git add -p
Daje interaktywną możliwość wyboru zmian do zatwierdzenia.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-12 19:59:46