Проигнорируйте файлы/папки на слиянии

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

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

7
задан Bernd Ott 2 March 2015 в 14:49
поделиться

2 ответа

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

В версии для командной строки эта функция называется «только запись».

Из текст ссылки

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

2
ответ дан 7 December 2019 в 14:31
поделиться

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

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

#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, то пакетный файл тоже подойдет, вы можете просто набрать команды revert последовательно.

2
ответ дан 7 December 2019 в 14:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: