2013-07-24 1 views
2

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

Вы можете себе представить, что ищет что-то вроде этого:

SomeHeader{ 
    -SomeProperty : x 
    -NameOfUserThatGenerateCode: myName 
    -DateTimeCodeGenerated: 2013-07-23 06:28 
    -SomeOtherProperty: y 
} 

То, что я хочу, это способ сказать ублюдка, чтобы сказать, что «это хорошо», если и имя и CodeGeneration время изменить (например: Игнорируйте, что произошли изменения), но НЕ заботитесь, если «SomeProperty» изменяется, чтобы сказать «z».

В этом втором случае он будет передавать весь файл (с обновленными автогенерированными файлами).

Есть ли все-таки сделать это? Я признаю, что git делает изменения на уровне «файла», но я надеюсь, что может быть какой-то крюк предварительной обработки, который я могу связать, это будет работать только тогда, когда git пытается сравнить изменения файлов.

Для тех, кто заботится, это позволит мне правильно управлять версиями файлов рапсодии.

+0

Кто-то уже спросил, что: http://stackoverflow.com/questions/12382447/can-git-ignore-specific-lines-matching-a-pattern – Udy

+0

Я видел, что статья stackoverflow ... это не достаточно делать то, что я хочу, поскольку я не могу избавиться от «специальных» свойств. Я собираюсь попробовать ответ VonC, чтобы увидеть, может ли это работать. – Aerophilic

ответ

2

Я бы рекомендовал:

  • сохраняя копию этих файлов (как личные файлы, а это означает не версионируется): ваше программное обеспечение будет генерировать код в тех скопировать
  • clean сценария, как content filter driver, объявленные в .gitattributes file (подробно описано в Git Pro book).

http://git-scm.com/figures/18333fig0703-tn.png

Идея заключается в том, что сценарий к обнаружить на git add:

  • содержание файла свойств 'SomeHeader'
  • , если копия того файл изменился так, как вам нужно сохранить (в этом случае вы перезаписываете файл с версией с содержимым этой копии)
  • , если копия этого файла существенно не изменилась, и в этом случае вы не изменяете фактический файл свойства.

Обратите внимание, что «сохранить копию» часть может быть автоматизирована и драйвером фильтра содержимого, с smudge скрипта активируется автоматически на git checkout.

+0

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