Управление XML-документами в Subversion, игнорируя форматирование - PullRequest
4 голосов
/ 21 апреля 2009

Мне нужно управлять XML-документами в Subversion, но я не хочу управлять форматированием, которое может отличаться в зависимости от того, кто редактирует файл.

Я вижу два решения: Либо отформатируйте файл каждый раз с известным форматированием, прежде чем регистрироваться. Или предоставьте svn программу diff, которая активно отклоняет форматирование из алгоритма diff. В конечном счете, diff должен поддерживать трехстороннее слияние, активно игнорируя форматирование XML.

Что вы рекомендуете?

(То же самое обычно применяется к исходным файлам кода, но проблема сложнее.)

Ответы [ 4 ]

3 голосов
/ 21 апреля 2009

У меня нет большого личного опыта с такой настройкой.

Для второго метода (пользовательский diff) я нашел пример, «Описание API для библиотеки репозитория Netopeer» , который представляет собой подробное описание настройки с Subversion и, среди прочего, вещи, xmldiff .

Для другого подхода, преобразования в известный формат перед сохранением в Subversion, я рекомендую Канонический XML в качестве формата. Например, инструмент xmllint может конвертировать в этот формат:

% cat complique.xml
<?xml version="1.0" encoding="utf-8"?>
<toto   >
    <truc      a="1" >Machin &#x43; </truc >café</toto>

% xmllint --c14n complique.xml    
<toto>
    <truc a="1">Machin C </truc>café</toto>

Чтобы интегрировать с Subversion, вы можете предварительно проверить, что переданный файл равен каноническому. Возможный такой скрипт мой предварительный коммит с использованием xmllint . См. Также сценарий принудительного применения для примера.

1 голос
/ 21 апреля 2009

Считаете ли вы, что следующие два фрагмента XML одинаковы ...?

Fragment1:

<foo xmlns="http://foo.com/foo">
    <bar>Hello</bar>
</foo>

FRAGMENT2:

<ns1:foo xmlns:ns1="http://foo.com/foo">
    <ns1:bar>Hello</ns1:bar>
</ns1:foo>

... потому что если вы это делаете (так как эти фрагменты имеют одинаковый набор данных xml), вам нужно подумать о написании собственного инструмента сравнения.

0 голосов
/ 21 апреля 2009

Просто разместите всех своих разработчиков на одной странице. В любом случае, все они должны кодироваться по одному и тому же стандарту. Если все ваши кодеры используют разные стандарты форматирования, вам нужно решить более серьезные проблемы.

0 голосов
/ 21 апреля 2009

Если под «форматированием» вы подразумеваете «пробел», вы можете настроить svn diff на игнорирование пробелов с помощью ключа -w в команде diff:

$ svn diff -x -w [file]

См. svn help diff для получения дополнительной информации.

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