LINUX.ORG.RU

Создание «истории» git из набора локальных «слепков» исходных кодов

 


0

1

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

Есть ли инструмент, которому можно скормить все эти локальные копии и он автоматизировано создаст git репозиторий создав «голову» из самого древнего кода и коммиты/ветки путем именно анализа исходного кода?

★★★

Есть ли инструмент, которому можно скормить все эти локальные копии и он автоматизировано создаст git репозиторий создав «голову» из самого древнего кода и коммиты/ветки путем именно анализа исходного кода?

Сомневаюсь, что найдётся готовое решение. Готовься к тому, что тебе придётся самому на коленке склеивать скрипт.

присутствует множество копий проекта

О каком именно количестве копий идёт речь? 10? 50? 500?

Временные метки файлов, даже если есть, не внушают доверия.

Метки побиты для всех копий проекта, или только некоторых? Самая древняя версия известна?

runtime ★★★★
()

Есть ли инструмент, которому можно скормить все эти локальные копии и он автоматизировано создаст git репозиторий создав «голову» из самого древнего кода и коммиты/ветки путем именно анализа исходного кода?

Конечно, он же и вечный двигатель создаст.

Надо просто отсортировать слепки и создать по коммиту на каждый. Вроде даже была какая-то команда у гита, но сейчас не вижу, может выкинули уже. Дальше можно просмотреть изменения и пересортировать. Коммиты можно попробовать делать GIT_DIR=newrepo.git GIT_WORK_TREE=my/snapshot git commit -a -m 'commit', так что для скрипта останется только итерироваться по каталогам в правильном порядке.

xaizek ★★★★★
()
Ответ на: комментарий от runtime

О каком именно количестве копий идёт речь? 10? 50? 500?

7-10

Метки побиты для всех копий проекта, или только некоторых? Самая древняя версия известна?

можно считать что меток времени нет. Самая первая версия неизвестна.

думаю что вручную можно определить, «кто на ком стоял» с помощью рекурсивного diff

если diff между 2мя версиями покажет что изменения только в одну сторону, то очевидно какая из них более старая. Трудности только в «ветках», но и это руками можно разложить.

Мне просто казалось, что задача формализуется нормально и наверняка уже есть готовый инструмент.

vyv ★★★
() автор топика
Ответ на: комментарий от vyv

если diff между 2мя версиями покажет что изменения только в одну сторону, то очевидно какая из них более старая. Трудности только в «ветках», но и это руками можно разложить.

хотя сейчас подумал - совсем неочевидно…

vyv ★★★
() автор топика

Предположим для удобства, что в проекте всего один файл. И у тебя две версии: поменьше и побольше. Технически невозможно определить, было ли это добавлением нового или удалением легаси-кода. Поэтому не рассчитывай ни на какую автоматику. Возможны какие-то эвристики, но это сложно. Собери все семь-десять проектов, запусти и выбери тот, который делает все, что тебе нужно. Массу времени сэкономишь.

filosofia
()
Последнее исправление: filosofia (всего исправлений: 1)

А, ещё некоторые разработчики ведут TODO и/или Changelog. Погрепай исходники, если найдёшь что-то подобное, из этого можно восстановить историю.

filosofia
()
Ответ на: комментарий от vyv

7-10

Тогда делай руками. 99% что это в итоге будет быстрее, чем поиск готовый решений или объяснение ЛОРовцам всех нюансов задачи.

Сперва грубой силой определи, какая версия первая. Потом её можно использовать за основу в 3-way diff (тот же Meld умел 3-way diff), сравнивая остальные версии между собой. То есть, может быть проще визуально сравнить между собой diff’ы версий X и Y относительно Root, чем сравнивать diff между X и Y.

А дальше просто git commit.

runtime ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.