Команда структуры частично верна и, в основном, нет, но ее можно сделать достаточно корректной.
У вас есть:
cd folder-with-all-folders-to-git-init
for D in `find . -type d`
do
git init && git add . && git commit -m "Initial commit"
done
Как минимум, вам нужно cd
в каждом каталогедо запуска git init
.Это должно быть сделано следующим образом:
cd folder-with-all-folders-to-git-init
for D in `find . -type d`
do
(cd "$D" && git init && git add . && git commit -m "Initial commit")
done
Это запускает подоболочку, которая устраняет проблемы с символическими ссылками и возвращает вас к тому, с чего вы начали.
Использование обратных кавычек не рекомендуется;используйте обозначение $( … )
.Но чтение имен из этого результата также не очень хорошая идея, если в именах могут быть пробелы.Вы бы лучше всего с «шаром».Возможно, стоит попробовать проверить отсутствие подкаталога .git
, прежде чем пытаться выполнить git init
, особенно если вам нужно запустить скрипт несколько раз.Кроме того, find
найдет подкаталоги, такие как существующие .git
подкаталоги.
Это приводит к:
cd folder-with-all-folders-to-git-init
for D in *
do
if [ -d "$D" ] && [ ! -d "$D/.git" ]
then (cd "$D" && git init && git add . && git commit -m "Initial commit")
fi
done
Это достаточно надежное решение проблемы,Если действительно есть вложенные каталоги, которые вы хотите превратить в независимые Git-репозитории, вам придется работать немного усерднее, но, вероятно, это не то, что вам нужно.