2013-11-01 3 views
1

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

Так что я хочу, это умение задавать строку как $Id$ или $SpecialName$, чтобы определить, что заголовок должны быть вставлено, который будет расширяет сборку кода (делает файлы zip или jar) в

$SpecialName: lots of customer specific stuff like a big header of copyright, legal, and 
other info 
blah blah blah $ 

И если они изменяют или исправляют что-то в файле и отправляют обратно, я хочу проверить изменения в git и игнорировать все между строкой расширенного "$SpecialName:" и следующим «$» способом $Id$ можно заставить работать при проверке вещи в.

Я видел ссылку на "$Format:" в this question, но не нашел ссылок на то, что это такое, и является ли это то, что я ищу или нет.

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


Похоже, один подход заключается в использовании «фильтры» - от мерзавца книги:

Однако этот результат имеет ограниченное применение. Если вы использовали ключевое слово в CVS или Subversion, вы можете включить datestamp - SHA не все так полезно, потому что он довольно случайный, и вы не можете сказать, если один SHA старше или старше другого.

Оказалось, что вы можете написать свои собственные фильтры для выполнения подстановок в файлах при фиксации/оформлении заказа. Это фильтры «чистый» и « » «smudge». В файле .gitattributes вы можете установить фильтр для конкретных путей, а затем настроить скрипты, которые будут обрабатывать файлы только , прежде чем они будут зафиксированы («чистые», см. Рис. 7.2) и непосредственно перед они вычеркнуты («Smudge», см. Рис. 7.3). Этими фильтрами могут быть , чтобы делать всевозможные забавные вещи.

Соответствующее дело здесь было бы уместно сделать это на сервере репозитория, а не на клиенте - это обработка данных «файл» перед фиксацией и, возможно, предварительно контроль на сервере репозитория?

+0

В git все машины имеют репозиторий, поэтому любая машина может в принципе выступать в качестве сервера хранилища. –

+0

Правда - но желание иметь новый клон или вытащить с сервера (peer), который считается «авторитетным», имеет все «предварительно настроенные», поэтому никаких дополнительных действий со стороны получающего партнера не требуется, чтобы все работало по желанию. И да, это конфликт между тем, чтобы сделать эту «одну кнопку бесшовной» и безопасностью, потому что вы не хотите, чтобы было легко нажимать автоматический запуск активного кода, например, крючки на одноранговых узлах или обратно на другие. Таким образом, единственный способ - создать набор скриптов, поддерживаемых и распределенных отдельно. – peterk

+0

И это делает процесс «поддержания синхронизации» более сложным и делает совместимость с протоколом, который использует несовместимые с интегрированными git-плагинами в IDE, которые часто недостаточно программируемы. – peterk

ответ

0

Традиционный способ сделать это для системы контроля версий, чтобы сделать это расширение. Но на самом деле это не обязательно для вас, так как вам нужно, чтобы он появлялся на клиентских машинах.

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

+0

Это больше похоже на то, что я верну весь файл и просто хочу зафиксировать его без предварительной обработки. Удивление, если есть какой-либо способ пометить блок внутри исходного файла как игнорируемый git $ Id $, и, следовательно, может быть использован, и было интересно, существует ли механизм, в котором возможно $ ArbiraryWord $ или $ PredefinedWord $ , Конечно, он может стать причудливым и положить на крючок предварительной обработки на сервере, который мог бы выбрать набор подстановок на основе того, какая ветка проверена, что позволит клиенту иметь доступ Git в реальном времени к репозиторию и т. Д., Но ... – peterk

+0

Если вы получаете файл, вы можете создать патч из него, выполнив простой «diff» (а не «git diff») против распределенного источника. –

+0

True - но вы не можете просто разархивировать 500 файлов по папке, а затем git передать ее ветке клиента, которая делает все это благодаря автоматизации :) То, что я действительно прошу, - это помощь в понимании возможностей набора инструментов git для обработки поэтому я могу использовать его для любого количества потенциальных вещей. – peterk