Как мне объединить Git-файл с предварительной и последующей обработкой? - PullRequest
6 голосов
/ 21 октября 2011

Я хотел бы иметь возможность вызывать некоторую предварительную обработку файлов до того, как Git попытается объединить их, и выполнить последующую обработку объединенного результата.Общая идея здесь заключается в том, что некоторые файлы трудно автоматически объединить как есть, но их можно преобразовать в более простую форму для обработки.Вот мой конкретный пример использования:

У меня есть хранилище в основном не очень чувствительных данных.В этом хранилище у меня есть немного зашифрованных конфиденциальных данных в файле с именем sensitive.pgp.Мне нравится эта схема, потому что я не должен доверять безопасному управлению моим репозиторием, я просто должен доверять шифрованию и паролю.Прелесть, конечно, в том, что Git не может объединять зашифрованный текст, поэтому, если sensitive.pgp изменяется в двух извлечениях одновременно, объединение недоступно - даже если изменения в открытом тексте легко разделяются.Ручной рабочий процесс выглядит следующим образом:

  1. Обнаружен конфликт слияния для sensitive.pgp.
  2. Запустите git-mergetool.Инструмент также не может объединить файлы PGP.
  3. Теперь у меня есть временные файлы для моей версии, базовой версии и удаленной версии.
  4. Расшифруйте все три файла.
  5. Запустите мой инструмент слияния для расшифрованных версий.
  6. Зашифруйте результат.
  7. git - добавьте новый sensitive.pgp.

Я бы хотел сказать Git применить мою предварительную и последующую обработкупрежде чем он даже попытается слиться, поэтому он может обработать это автоматически.Я могу представить множество других сценариев с тем же общим шаблоном: практически каждый раз, когда у вас есть сжатый формат файла с текстовой структурой (например, PDF, OpenOffice, Word).

Любые предложения

1 Ответ

6 голосов
/ 21 октября 2011

У вас есть несколько вариантов:

  1. определить фильтр извлечения / регистрации в .gitattributes (см. git help attributes), который расшифровывает файлы при оформлении заказа (оставляя их незашифрованными в рабочем дереве) изашифровывает их перед проверкой в ​​
  2. определяет пользовательский драйвер слияния (см. git help attributes и параметры merge.<driver>.* в git help config)
  3. определяет пользовательский инструмент слияния (см. git help mergetool иmergetool.<tool>.* опции в git help config), которые дешифруют перед вызовом инструмента реального слияния и шифруют, когда инструмент реального слияния возвращает

Вы можете настроить git только для применения пользовательских фильтров и драйверов слияния к определенным файламно инструмент слияния применяется ко всему хранилищу, если вы не ограничите его, передав имена файлов команде git mergetool.Вы можете создать свой собственный инструмент слияния, чтобы изменить его поведение в зависимости от имени объединяемого файла.

...