git copy

Feb 02, 2012 12:48

Раз речь зашла о git'е, добавлю пример забавного глюка.



Здесь скриншот одного комита, показанного trac'ом. Смысл в том, что гит полагает, что пара сишных файлов была переименована в пару совсем не сишных (отмечены серыми квадратиками).

Причина такого поведения в том, что в репозитории принципиально (разработчики настаивют на этом) не сохранятеся информация о копировании или перемещении файла, поскольку ее можно извлечь путем анализа содержимого репозитория. То есть команда git mv является по сути не более чем композицией git add, git rm, а git copy вообще ни в каком виде не существует (предлагается ручками выполнить просто cp и git add). В данном примере произошло ложное срабатывание, поскольку
все четыре файла одинаковы (они пустые). (Если кому интересно, почему файлы пусты - я посквошил несколько комитов: добавил файлы, формально необходимые для GNU autotools, и удалил сишныеы файлы, которые ранее стали пустыми из-за того, что их содержимое полностью перекочевало в хедера.)

Отсюда я хочу сделать вывод о том, что всё-таки следует сохранять информацию о копировании, даже если она будет лежать сбоку от дерева и нарушать его стройность. Команды git mv, git cp должны существовать и быть нетривиальными.

software

Previous post Next post
Up