2017-01-17 6 views
0

У меня есть следующий фильтр GIT, определенный в файле .gitconfig моего репозитория, который я импортировал.Относительный каталог для фильтра GIT?

[filter "csprojarrange"] 
    clean = CsProjArrange 

Однако, это работает только в том случае CsProjArrange.exe является частью моей PATH, а не если CsProjArrange.exe проверяется в корневую директорию репозитория.

Можно ли использовать фильтры GIT для работы с относительными каталогами?

+0

Это будет кошмар безопасности. Представьте себе: вы клонируете репозиторий X. Он определяет фильтр smudge F. F содержит команды, которые настраивают регистратор нажатия клавиш (в то время как * также * появляется безвредным в противном случае). Через три недели ваша система полностью выложена. (Теперь вы * можете * поместить '.' на свой путь, но это кошмар безопасности ...) – torek

+0

Так что на самом деле ставить' .' на мой путь? Это частный репозиторий только для меня и нескольких других людей. –

+0

Я пробовал './Tools/CsProjArrange.exe' и, похоже, не работает. –

ответ

1

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

Очевидный способ снизить этот риск, используя сегодняшние инструменты и технологии, чтобы запустить в репо фильтр, если и только если этот фильтр имеет действительный digital signature (а-ля PGP/подписи GPG. То есть, ваш .gitattributes файл в следующей редакции:

[filter "csprojarrange"] 
    clean = helper-check-git-signature CsProjArrange 

или аналогичный Между тем helper-check-git-signature будет программа, которую придется устанавливать независимо от Git и любого хранилища, но вы должны были бы установить только один раз, когда (и, возможно, ваша операционная система поставляется с.. что-то подходящее, так как этот метод цифровой подписи - это то, как некоторые приложения для приложений Windows используют ветеринарные приложения, хотя они имеют тенденцию делать это один раз во время загрузки, а не на каждом запуске фильтра.)

Задача помощника состоит в том, чтобы найти файл в репозитории, убедитесь, что все в порядке, чтобы запустить, а затем запустите его. Поскольку помощник установлен в «доверенной» части вашего компьютера (например, /usr/local/bin или $HOME/bin на Linux), он просто запускается. Не нужно переустанавливать его при обновлении фильтра в репозитории.

Часть, которая не является «консервированной», здесь, как помощник выполняет проверку (если у вас есть gpg, вы можете использовать это, поскольку он имеет всю поддержку проверки подписи и аннулирования, которая вам понадобится), где сами сигнатуры живут против фильтров in-repo, как помощник находит различные части и так далее. Возможно, подумайте о том, чтобы сделать такую ​​вещь, как деловые возможности. :-)