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.

Author: Community, 2010-11-22

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
 40
Author: Alex Jasmin,
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
 12
Author: guiwuu,
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