Игнорировать файлы / папки при слиянии - PullRequest
7 голосов
/ 04 марта 2010

В настоящее время я использую SVN для управления версиями своих программных проектов. В текущем проекте у меня есть магистраль для общих функций и спецификаций клиентов и веток, для конкретных клиентов.

Есть ли способ пометить некоторые файлы / папки, которые не следует объединять в ветки каждый раз, когда я выполняю такую ​​операцию?

Ответы [ 2 ]

2 голосов
/ 05 марта 2010

Существует опция, которую вы объединяете фактически, это означает, что объединение не изменяет файлы в целевом объекте, но помечает его в подпорках отслеживания слияния. Таким образом, изменения никогда не произойдут в файлах, которые будут объединены, никогда!

Функция называется только для записи в версии командной строки.

С текст ссылки

Опция --record-only работает с -r и делает именно то, что вы думаете: она помечает ревизию как объединенную (или не слитую, если используется синтаксис отрицания номера ревизии "-"), фактически не изменяя ничего, кроме Mergeinfo. Например, это было бы полезно, когда кто-то вручную отредактировал файл таким образом, чтобы эффективно включить изменение, которое уже было сделано где-то еще. Вместо того, чтобы исходное изменение было перенесено при следующем слиянии синхронизации, что может привести к текстовым конфликтам, когда три версии отличаются друг от друга, вы можете просто записать изменение как уже объединенное. (Подробнее см. Требования к отслеживанию слияний и блокирование изменений в книге Subversion.)

2 голосов
/ 04 марта 2010

Я не сразу вижу решение, но было бы достаточно легко что-то написать. То, что я даю вам, не проверено на ошибки.

Сначала вы должны составить список каталогов, которые вы хотите исключить. Вызывается ~ / .svn-merge-exclude

#regexes to exclude
./helpfiles/
./deploy_scripts/
./models/customer_integration

Тогда вы бы написали еще один скрипт для возврата этих каталогов в ветке после того, как вы включили в них тернк.

#/usr/bin/bash
# I am assuming that you made the excludes based on the root directory 
# so that relative paths will work
for dir in $(cat ~/.svn-merge-excludes) ; do
    svn revert -R $dir
done

Это должно сработать. Здесь важна опция '-R' в revert, которая рекурсивно действует на каталог. Поэтому ваш рабочий процесс будет выглядеть примерно так.

# cd path/to/branch
# svn merge -r123:245 svn://svnserver.com/svn/trunk
# revert_excludes_from_branch.sh

Тогда вы бы обработали конфликты, а затем зафиксировали. Если вы используете Windows, то пакетный файл тоже будет работать, вы можете просто набрать команды возврата последовательно.

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