Dołączanie nowych plików w SVN diff
Mam skrypt, który buduje moją aplikację, przesyła ją do zdalnego komputera, uruchamia tam test wydajności i rejestruje pewne metryki, na których mi zależy. Skrypt tworzy plik łatek dla lokalnych modyfikacji, które wykonuję w moim obszarze roboczym i pokazuje go wraz z numerami wydajności. Pomaga mi to porównać efekt różnych opcji tuningu. Jeśli chcę odtworzyć Mój obszar roboczy w późniejszym terminie, mogę użyć numeru wersji SVN i poprawki.
svn diff
nie zgłasza nowych plików Dodaję do przestrzeni roboczej, chyba że najpierw użyję svn add
na nich. Czy jest jakiś sposób na utworzenie pliku łatki, który będzie zawierał również nowe pliki?
PS: podobne pytanie zostało zadane tutaj , ale nie otrzymano odpowiedniej odpowiedzi, IMO.
2 answers
Aby svn diff
dołączyć wszystkie niewystawione pliki z lokalnej kopii roboczej, musisz najpierw dodać te pliki. svn diff
wyświetla ten sam zestaw zmian, który svn commit
użyłby.
Jeśli wiesz na pewno, że wszystkie nieweryfikowalne pliki powinny zostać dodane, oto co możesz zrobić.
Przygotuj listę niezweryfikowanych plików, pobierając z wyjścia svn status
wszystkie linie rozpoczynające się znakiem zapytania:
svn status | grep ^? | sed -r 's/^\? +//' > ../unversioned_files_list.txt
Możesz następnie przekazać tę listę plików do svn add
za pomocą xargs
:
xargs -r -d '\n' svn add < ../unversioned_files_list.txt
A następnie wyprodukuj łatkę:
svn diff > ../my_patch.patch
Jeśli nie chcesz, aby te pliki były dodawane, Użyj listy plików, aby je usunąć:
xargs -r -d '\n' svn rm --keep-local < ../unversioned_files_list.txt
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
2010-11-24 01:17:14
Dzięki Alexandre. Na początku jego podejście nie działało w moim przypadku. ByĹ 'em pewien, Ĺźe wszystkie nowe pliki zostaĹ' y umieszczone A
w svn status
, jednak plik diff nadal byĹ ' pusty. W końcu znalazłem różnicę w wyjściach svn status
, czwarte kolumny w moim przypadku są wypełnione +
, Jak:
$ svn st
M .
A + New.java
Oznacza to, że pozycja jest zaplanowana na addition-with-history
[1]. Zazwyczaj dzieje się tak, gdy svn move
lub svn copy
plik lub katalog[2]. W moim przypadku New.java
jest svn merged
z innej gałęzi, w tym poprzedniej historia zmian w tej gałęzi. Usuńmy te informacje historyczne.
Najpierw znajdź wszystkie addition-with-history
pozycje:
svn status | grep ^A | sed -r 's/^A[ +]+//' > /tmp/add_list
Opcjonalnie Usuń ścieżki katalogów w /tmp/add_list
, aby uniknąć ostrzeżeń w następnym kroku.
Następnie usuń informacje o zatwierdzeniu ich historii przez svn remove
:
xargs -r -d '\n' svn remove --keep-local --force < /tmp/add_list
Następnie wróć do rozwiązania Alexandre ' a, aby dodać je ponownie do subversion i uzyskać diff.
Bibliografia:
[1]http://svnbook.red-bean.com/nightly/en/svn.ref.svn.c.status.html
[2]http://www.linuxtopia.org/online_books/programming_tool_guides/version_control_with_subversion/svn.ref.svn.c.status.html
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
2013-08-27 10:45:42