Ввод списка скопированных папок версий проекта для автоматической сборки репозитория Git?

Поэтому за последние несколько лет мне очень понравилось изучать и использовать Git для всех моих проектов кодирования. Мне нравится иметь четкие сроки всех изменений и видеть, когда были сделаны изменения.

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

Есть ли автоматизированный способ сделать это? То, что я хочу сделать автоматически, заключается в следующем:

Folders:

- '2013_08_01' - '2013_08_04' - '2013_08_12' - ... and many many more (*~70) 

Импорт в репозиторий Git (отдельная ветка):

 - Base commit A (+ note of date) of '2013_08_01' - Commit B with changes (+ note of date) of '2013_08_04' - Commit C with changes (+ note of date) of '2013_08_12' - ... 

Не сделав этого вручную, какой бы быстрый способ это сделать? Все папки находятся на одном локальном диске.

Solutions Collecting From Web of "Ввод списка скопированных папок версий проекта для автоматической сборки репозитория Git?"

Этот однострочный лайнер будет делать то, что вы хотите

 git init repo && ls -1d 2* | sort | xargs -i[] sh -c 'find repo -mindepth 1 -not -path repo/.git -not -path repo/.git/\* -exec rm -rf {} + && cp -r []/. repo/ && git -C repo add -A && git -C repo commit -am "Commit version []" && git -C repo tag "[]"' 

Вот сценарий bash, который я собрал вместе, чтобы выполнить эту работу:

 #!/bin/bash source=$1 dest=$2 cd $dest git init cd $source for i in * do cd $dest # Remove old version, see https://stackoverflow.com/a/22347541/2747593 git rm -rf . git clean -fxd # Add next version. cp -R $source/$i/. ./ git add -A git commit -m "Auto import to Git, from folder $i" done 

Запустите его как:

 script.sh /path/to/source /path/to/dest 

Вы можете использовать mv вместо cp , но я слышал, что /. синтаксис не работает с mv . (Также использование cp оставляет исходные файлы в маловероятном случае, если что-то пойдет не так).

Еще одна вещь, о которой нужно помнить, заключается в том, что в зависимости от типа проекта могут быть некоторые файлы, которые вы не хотите отслеживать Git. (Например, двоичные файлы.) Возможно, вы захотите добавить .gitignore перед импортом старых копий; если это так, соответствующим образом измените сценарий.

Благодаря @ Vampire за то, что вы указали пару ошибок в исходной версии моего скрипта.