1

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

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

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

Папки:

- '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' 
- ... 

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

+0

Это маловероятно, что мерзавец предлагает автоматизированный способ сделать именно это. Но это должен быть довольно короткий скрипт Python ... –

ответ

0

Вот сценарий я бросил вместе, что должен делать эту работу:

#!/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, но у меня есть heard, что /. синтаксис не работает с mv. (Также использование cp оставит исходные файлы в маловероятном случае, если что-то пойдет не так.)

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

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

+1

Вы уверены, что 'cp $ source/$ i /. ./'works correclty? Здесь он просто говорит, что '2013_08_01/.' опущен. Вероятно, вы имели в виду 'cp -r $ source/$ i /. ./ 'как в моем решении? Также вы не обрабатываете случай, когда файлы удалены. с вашим сценарием они будут жить в каталоге. Btw. почему вы делаете «pushd» в своем скрипте? – Vampire

+1

Теперь 'for i in *' больше не будет работать, так как он перечисляет файлы и директории в '$ dest', и вы по-прежнему не обрабатываете удаленные файлы. Btw. делает 'for i in *' список отсортированных каталогов? – Vampire

+0

@ Vampire Упс, да, я имел в виду 'cp -r'. «Pushd» остался с прежней попытки, исправлена. –

1

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

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 "[]"' 

 Смежные вопросы

  • Нет связанных вопросов^_^