Biorąc pod uwagę przypadek, dokonałem dwóch niezależnych zmian w jednym pliku: np. dodał nową metodę i zmienił inną metodę.
Często nie chcę zatwierdzać obu zmian jako jednego zatwierdzenia, ale jako dwóch niezależnych zatwierdzeń.
Na repozytorium git Chciałbym użyć trybu interaktywnego z git-add (1) , aby podzielić porcję na mniejsze:
git add --patch
Jaki jest najłatwiejszy sposób na zrobienie tego z Subversion? (Może nawet przy użyciu wtyczki Eclipse)
Aktualizacja:
W The Thing About Git Ryan nazywa to: „Problem splątanej kopii roboczej”.
Odpowiedzi:
Dzięki git-svn możesz utworzyć lokalne repozytorium GIT dla zdalnego repozytorium SVN, pracować z nim przy użyciu pełnego zestawu funkcji GIT (w tym częściowych zatwierdzeń), a następnie przesłać wszystko z powrotem do repozytorium SVN.
git-svn (1)
źródło
Tortoise SVN 1.8 obsługuje to teraz dzięki funkcji „Przywróć po zatwierdzeniu”. Pozwala to na edycję pliku, przy czym wszystkie zmiany są cofane po zatwierdzeniu
Zgodnie z dokumentacją:
źródło
Zrobiłem to za pomocą TortoiseSVN .
Wbudowane narzędzie scalające pozwala pokazać różnice między wersją repozytorium a kopią roboczą.
Użyj funkcji tworzenia kopii zapasowej narzędzia diff
Powinieneś teraz zatwierdzić wszystkie swoje zmiany, używając dwóch oddzielnych zatwierdzeń.
źródło
Spróbuj użyć,
svn diff > out.patch
a następnie skopiujout.patch
plik doout.patch.add
iout.patch.modify
Tylko wtedy, gdy masz działający plik poprawki, przywróć oryginalny plik za pomocą
svn revert out.c
.Ręcznie edytuj pliki łat, tak aby zawierały tylko porcje do dodania lub modyfikacji. Zastosuj je do oryginalnego pliku za pomocą
patch
polecenia, sprawdź, czy dodatek zadziałał, a następniesvn commit
dodatek.Powtórz płukanie w przypadku
out.patch.modify
plastra.Jeśli zmiany są oddzielne w pliku, jak zadałeś początkowe pytanie - dodałeś nową metodę, zmieniłeś istniejącą metodę - to zadziała
To bardzo żmudne rozwiązanie - chociaż nie jestem przekonany, że powinieneś mieć jakikolwiek powód, aby oddzielać zatwierdzenia.
Mogłeś również pobrać wiele kopii roboczych tego samego źródła, aby zastosować swoją pracę do:
Upewnij się
svn up
i przetestuj, aby upewnić się, że wszystko jest w porządku.źródło
Jest to możliwe przy użyciu TortoiseSvn (Windows) od wersji 1.8.
W Linuksie spróbowałbym http://webstaff.itn.liu.se/~karlu20/div/blog/2013-05-31_SVNPartialCommit.php . Jednak sam tego nie wypróbowałem.
źródło
Robiłem to:
Jest to uproszczone podejście, które zakłada, że jeden zestaw zmian można dość łatwo cofnąć. W bardziej złożonych sytuacjach zrezygnowałbym i wprowadził obie zmiany bez martwienia się o to.
Teraz, gdy używam git, mam nadzieję, że już nigdy nie będę tego musiał robić!
źródło
Używam lokalnego repozytorium Darcs lub po prostu wprowadzam zmiany stopniowo. Z scalaniem (opendiff otwiera FileMerge, program scalający dostarczany z Xcode; zastąp swoim ulubionym narzędziem do scalania):
scalić powiązane zmiany, zapisać scalenie, wyjść z programu scalającego
jeśli więcej niż jeden niepowiązany kawałek w pliku, przepłucz i powtórz (ale dlaczego miałbyś czekać tak długo przed zatwierdzeniem ?!)
Ponadto, jeśli znasz git, możesz użyć git-svn do utrzymywania lokalnego repozytorium git i synchronizowania zatwierdzeń z głównym serwerem svn; działa świetnie w moim ograniczonym doświadczeniu.
źródło
Wypróbuj VisualSVN dla programu Visual Studio . Najnowszy 6.1 release wprowadza funkcję QuickCommit. Możesz częściowo zatwierdzić wybrane zmiany w pliku za pomocą nowych poleceń menu kontekstowego Zatwierdź ten blok i Zatwierdź wybór w edytorze programu Visual Studio.
źródło
Jest to trochę bardziej ryzykowne niż pełna sugestia Spike'a, ale może być łatwiejsze do zrobienia. Upewnij się również, że najpierw wypróbujesz coś innego, ponieważ niektórzy redaktorzy odmówią zapisania na pliku, który zmienił się spod nich, chyba że ponownie załadujesz ten plik (tracąc wszystkie zmiany)
źródło
Myślę, że łatwiejszą opcją niż generowanie plików różnicowych, przywracanie itp. Byłoby wypisanie dwóch kopii repozytorium i użycie narzędzia wizualnego porównywania, takiego jak DeltaWalker, do kopiowania porcji z jednego do drugiego.
Pierwsza kopia byłaby tą, na której faktycznie pracujesz, a druga byłaby właśnie w tym celu. Gdy wprowadzisz mnóstwo zmian w pierwszej, możesz skopiować jedną sekcję do drugiej, zatwierdzić ją, skopiować inną sekcję, zatwierdzić itd.
źródło
svn diff
.svn revert
.patch
narzędzia, albo ręcznie edytując, lub cokolwiek innego.diff
później, aby porównać kopię roboczą z kopią zapasową, aby upewnić się, że poprawnie zastosowałeś części poprawki.źródło