Спаси меня от моей собственной SVN - PullRequest
1 голос
/ 19 июня 2009

При использовании svn, и я хочу проверить весь локальный репозиторий, я перехожу в его каталог и набираю:

svn commit -m "blah blah"

Я быстро понял (болезненный способ), что это не добавляет новые файлы автоматически.

Для этого я выполняю двухшаговый хаккастический монстр:

find . | grep -v ".svn" | grep -v "ignorepattern" | xargs svn add 2>/dev/null
svn commit -m "blah blah"

Теперь я не гуру, но я чувствую, что у меня неприятный запах. 1009 *

Любые предложения будут с благодарностью.

Спасибо

Ответы [ 6 ]

18 голосов
/ 19 июня 2009

ОК, это не прямой ответ на вопрос, но я должен сказать, что это действительно проблема рабочего процесса, а не то, что вы должны попробовать автоматизировать. Каталоги разработки, как правило, заполняются множеством случайных ошибок, которые не нужны при управлении исходным кодом, но забывают добавлять в файлы игнорирования. Этот процесс скоро заполнит ваш репозиторий мусором.

Более того, создание нового ресурса проекта, как правило, является довольно необычным процессом и должно быть предметом, который рассматривается, по крайней мере, немного осторожнее. Мне нравится то, что нужно выполнить команду «svn add» на каждом ресурсе (или пакетах с помощью глобализации), так как он останавливает случайные коммиты.

Если вы беспокоитесь о том, что собираетесь что-то забыть, команда «svn status» - ваш друг. Периодически запускайте его, чтобы убедиться, что вы отслеживаете все ресурсы, которые вам нужны.

17 голосов
/ 19 июня 2009

Более простой способ найти файлы для добавления:

svn status | grep "^\?" | awk {'print $2'}

Преимущество использования клиента svn для определения того, что должно быть добавлено - новые, не игнорируемые файлы - и, следовательно, безопаснее и быстрее.

6 голосов
/ 19 июня 2009

То есть, вы не просматриваете свои различия перед фиксацией? Тск, тск.

Вы можете сделать svn st перед каждым коммитом и vgrep в первом столбце для "?". Пока вы выполняете небольшие коммиты, их легко поймать.

В качестве альтернативы, если это вариант в вашей среде, вы можете использовать инструмент GUI, такой как TortoiseSVN для фиксации. В Черепахе неверсионные файлы выделяются, как больной большой палец, и их можно добавить из окна фиксации (либо щелкнув правой кнопкой мыши и выбрав «Добавить», либо просто установив флажок и нажав «ОК»).

0 голосов
/ 22 июня 2009

Я также фанат командной строки, и я часто выдаю команды, такие как svn status и svn update , из командной строки, но, как некоторые предлагали здесь, когда дело доходит до принятия время мне действительно нужно больше информации о том, что я собираюсь совершить, чем то, что предлагает командная строка. Конечно, я мог бы использовать svn diff , но это просто трудно прочитать вывод.

Я рекомендую использовать приличный GUI-клиент поверх командной строки. Общая кроссплатформенная (на основе Java), например, SmartSVN . Я думаю, что когда дело доходит до внесения изменений, GUI - это путь.

0 голосов
/ 19 июня 2009
find . | grep -v ".svn" | grep -v "ignorepattern" | xargs svn add

лучше написать как

find . -name .svn -prune -o ! -name '*ignorepattern*' -exec svn add {} +

Это исключает каталоги ".svn", без исключения файлов с именами (например) "foo/svn-bar", а также обрабатывает пробелы в именах файлов.

Если у вас нет GNU findutils, возможно, это должно быть

find . -name .svn -prune -o ! -name '*ignorepattern*' -print0 | xargs -0 svn add

Я согласен с другими ответами и комментариями, которые ставят под сомнение желательность этого рабочего процесса.

0 голосов
/ 19 июня 2009

Переключиться на Mercurial (... или мерзавец, или базар, или что-то еще. Я на самом деле довольно серьезен).

> hg addremove #adds files you added, removes the ones you've deleted.

... и .hgignore намного проще в управлении, чем кучка чертовых svn игнорирующих свойств.

SVN - не единственная бесплатная система контроля версий, вы можете подумать о переключении. ( Все круто Дети делают это .)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...