Как настроить gitattributes для фильтрации части файла? - PullRequest
2 голосов
/ 11 марта 2011

Я использую Visual Studio 2010 и git (git svn).Мой коллега использует чистый svn с плагином Ankhsvn.

Когда я пытаюсь открыть файл с включенным Git Source Control Provider, Visual Studion жалуется:

Source Control Plug-in
Активное решение или проект управляется подключаемым модулем управления источниками adifferen, отличным от выбранного вами.Если вы измените плагин управления исходным кодом, активное решение или проект будут закрыты.
Хотите продолжить?

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

Когда я клонирую репозиторий SVN, созданный моим коллегой, файл решения sln содержит следующее

GlobalSection (SubversionScc) = preSolution
Svn-Managed = True
Manager = AnkhSVN -Поддержка Subversion для Visual Studio
EndGlobalSection

Я удалил этот раздел, и теперь решение открывается без проблем, когда активирован Git Source Control Provider, но жалуется, когда вы выбираете Ankhsvn Provider - ситуацияполностью изменено.

Я хотел бы сказать git удалить эту часть файла .sln во время извлечения (git svn fetch) и добавить его, когда я фиксирую (git svn dcommit).Возможно ли это через gitattributes и как это сделать?

РЕДАКТИРОВАТЬ:

Я сейчас добавил

solutionname.sln filter = ankhsvn

в $ GIT_DIR / info / attribute

и

[filter "ankhsvn"]
  clean=sed '/^Global$/ r ../ankhsvnsection '
  smudge=sed '/GlobalSection(SubversionScc)/,/EndGlobalSection/d '

в мой файл .git / config.

ankhsvnsection содержит сектор, который удаляется нечетким образцомоперация.Я вроде ничего не делаю?!

1 Ответ

6 голосов
/ 11 марта 2011

Я не знаю, как это сделать точно в Windows, но я знаю, как бы это сделать в * nix.

Я бы написал скрипт sed / bash (называемый myscript), который удаляет эти строки.из файла, когда они извлекаются git с использованием фильтра git "smudge" .

Так что в "$ GIT_DIR / info / attribute" я бы добавил:

{sln filename} filter=myfilter

И определите пятнистую часть фильтра в файле "$ GIT_DIR / config":

[filter "myfilter"]
    smudge={path to myscript}

Для Linux я бы просто вызвал sed напрямую следующим образом:

[filter "myfilter"]
    smudge=sed '/GlobalSection(SubversionScc)/,/EndGlobalSection/ d'

Возможно, это то, что вы можете использовать в Windows, используя git bash.

Будьте внимательны, когда хотите зафиксировать изменения в файле, так как он проверяет "нечеткую" версию.Для этого вы можете определить «чистый» фильтр, который снова добавляет операторы svn.

...