Автор |
Сообщение |
Romani Гуру Предупреждений : 1
|
|
Тут у нас вроде есть несколько прожженых линуксоидов, так вот, мне нужна помощь.
Как известно, git не трекает пустые папки, единственный путь решения, на сколько я знаю, это держать в таких папках пустые файлики .gitkeep или любой другой. Вот чтобы не создавать все это руками нужен скрипт или команда, да не простой, а такой, чтобы искал не просто пустые папки, а те папки, в которых нет именно файлов.
Есть структура например
folder1/folder2/file.txt
folder1 не содержит файлов, а содержит только папку, обычной командой
Код: |
find . -type d -empty -not -path "./.git/*" -exec touch {}/.gitkeep \; |
не добавится файл .gitkeep, так как по факту директория не пустая, но с точки зрения git директория пустая и не затрекается, так как наличие директории folder2 в директории folder1 для него не повод трекать файл в директории folder2.
В общем надеюсь не запутал и доходчиво объяснил проблему, помогите решить, очень не хочется руками все проверять перед комитами.
P.S. есть вот такая команда, но она сработала только на определенную вложенность и глубоко не посмотрела.
Код: |
find ./ -type d \( -name upload -o -name bitrix \) -prune -exec bash -c '[ "x`find "{}" -maxdepth 1 -type f`" = x ] && touch {}/.gitkeep' \; |
|
|
|
|
|
ДобрыйФей Мечтатель Предупреждений : 5
|
|
В лоб.
Код: |
#!/bin/sh
if [ -z "$1" ]; then
exit 1
fi
list=`find $1 -type d -name '*'`
for i in $list; do
nonempty=`ls $i`;
if [ -z "$nonempty" ]; then
echo "" > $i/.gitkeep
fi
done |
|
|
|
|
|
Romani Гуру Предупреждений : 1
|
|
Не правильно что-то оно работает.
Сделал так
Код: |
#!/bin/sh
if [ -z "$1" ]; then
exit 1
fi
list=`find $1 ! -path "./bitrix/*" ! -path "./upload/*" ! -path "./.git/*" -type d -name '*'`
echo $list > list.txt
for i in $list; do
nonempty=`ls $i`;
echo $nonempty > nonempty.txt
if [ -z "$nonempty" ]; then
echo "write to $i"
#echo "" > $i/.gitkeep
fi
done |
Вот куда он собирается писать файлы
Код: |
write to ./includes
write to ./local/templates/.default/lang/ru/page_templates
write to ./local/templates/.default/lang/en/page_templates
write to ./local/templates/beststroy/components/bitrix/catalog.section
write to ./local/templates/beststroy/components/bitrix/catalog/podryad/lang/ru
write to ./local/templates/beststroy/components/bitrix/catalog/podryad/lang/en
write to ./local/templates/beststroy/components/bitrix/catalog/podryad/bitrix/catalog.top/slider/lang/ru
write to ./local/templates/beststroy/components/bitrix/catalog/podryad/bitrix/catalog.top/slider/lang/en
write to ./local/templates/beststroy/components/bitrix/catalog/podryad/bitrix/catalog.compare.list
write to ./local/templates/beststroy/components/bitrix/catalog/podryad/bitrix/catalog.compare.result
write to ./local/templates/beststroy/components/bitrix/catalog/podryad/bitrix/forum.topic.reviews
write to ./local/templates/beststroy/components/bitrix/catalog/podryad/bitrix/forum.topic.reviews/.default/bitrix/rating.vote
write to ./local/templates/beststroy/components/bitrix/catalog/podryad/bitrix/catalog.search
write to ./local/templates/beststroy/components/bitrix/catalog/podryad/bitrix/catalog.search/.default/bitrix/search.page
write to ./local/templates/beststroy/components/bitrix/catalog/podryad/bitrix/iblock.vote/stars/lang/ru
write to ./local/templates/beststroy/components/bitrix/catalog/podryad/bitrix/iblock.vote/stars/lang/en
write to ./local/templates/beststroy/components/bitrix/catalog/podryad/bitrix/catalog.filter
write to ./local/templates/beststroy/components/bitrix/catalog/podryad/bitrix/catalog.element
write to ./local/templates/beststroy/components/bitrix/catalog/podryad/bitrix/catalog.link.list
write to ./local/templates/beststroy/components/bitrix/catalog/podryad/bitrix/catalog.link.list/.default/lang/ru
write to ./local/templates/beststroy/components/bitrix/catalog/podryad/bitrix/catalog.link.list/.default/lang/en
write to ./local/templates/beststroy/components/bitrix/breadcrumb |
Но надо не так. Например в папке ./local/ есть две папки templates и php_interface, но нет ни одного файла, вот сюда то и надо записать файлик
А вот в папке /local/templates/.default/lang/ru/page_templates есть файл .content.php, сюда наоборот не надо. |
|
|
|
|
ДобрыйФей Мечтатель Предупреждений : 5
|
|
Нажмите сюда, чтобы просмотреть текст
Код: |
$ ls -Rla root_dir/
root_dir/:
итого 28
drwxr-xr-x 5 user user 4096 дек. 12 16:13 .
drwxr-xr-x 20 user user 12288 дек. 12 16:10 ..
drwxr-xr-x 2 user user 4096 дек. 12 16:10 empty-dir
drwxr-xr-x 2 user user 4096 дек. 12 16:10 nonempty-dir
drwxr-xr-x 3 user user 4096 дек. 12 16:13 subdir
root_dir/empty-dir:
итого 8
drwxr-xr-x 2 user user 4096 дек. 12 16:10 .
drwxr-xr-x 5 user user 4096 дек. 12 16:13 ..
root_dir/nonempty-dir:
итого 8
drwxr-xr-x 2 user user 4096 дек. 12 16:10 .
drwxr-xr-x 5 user user 4096 дек. 12 16:13 ..
-rw-r--r-- 1 user user 0 дек. 12 16:12 somefile
root_dir/subdir:
итого 12
drwxr-xr-x 3 user user 4096 дек. 12 16:13 .
drwxr-xr-x 5 user user 4096 дек. 12 16:13 ..
drwxr-xr-x 2 user user 4096 дек. 12 16:13 emptydir
root_dir/subdir/emptydir:
итого 8
drwxr-xr-x 2 user user 4096 дек. 12 16:13 .
drwxr-xr-x 3 user user 4096 дек. 12 16:13 ..
$ ./test.sh root_dir
$ ls -Rla root_dir/
root_dir/:
итого 28
drwxr-xr-x 5 user user 4096 дек. 12 16:13 .
drwxr-xr-x 20 user user 12288 дек. 12 16:10 ..
drwxr-xr-x 2 user user 4096 дек. 12 16:14 empty-dir
drwxr-xr-x 2 user user 4096 дек. 12 16:10 nonempty-dir
drwxr-xr-x 3 user user 4096 дек. 12 16:13 subdir
root_dir/empty-dir:
итого 12
drwxr-xr-x 2 user user 4096 дек. 12 16:14 .
drwxr-xr-x 5 user user 4096 дек. 12 16:13 ..
-rw-r--r-- 1 user user 1 дек. 12 16:14 .gitkeep
root_dir/nonempty-dir:
итого 8
drwxr-xr-x 2 user user 4096 дек. 12 16:10 .
drwxr-xr-x 5 user user 4096 дек. 12 16:13 ..
-rw-r--r-- 1 user user 0 дек. 12 16:12 somefile
root_dir/subdir:
итого 12
drwxr-xr-x 3 user user 4096 дек. 12 16:13 .
drwxr-xr-x 5 user user 4096 дек. 12 16:13 ..
drwxr-xr-x 2 user user 4096 дек. 12 16:14 emptydir
root_dir/subdir/emptydir:
итого 12
drwxr-xr-x 2 user user 4096 дек. 12 16:14 .
drwxr-xr-x 3 user user 4096 дек. 12 16:13 ..
-rw-r--r-- 1 user user 1 дек. 12 16:14 .gitkeep |
|
Romani писал(а): |
нет ни одного файла |
Значит, в дочерних есть. git по самой младшей папке будет смотреть. |
|
|
|
|
Romani Гуру Предупреждений : 1
|
|
Странно, а почему у меня git не видит изменения файла?
/beststroy.rf/public_html/local/templates/beststroy/components/bitrix/catalog/podryad/bitrix/catalog.section/.default/template.php
В gitignore его и его родителей нет 100%.
Может какую-то настройку не сделал? Что может быть? |
|
|
|
|
Romani Гуру Предупреждений : 1
|
|
Добавлю, что это гит на таймвебе |
|
|
|
|
ДобрыйФей Мечтатель Предупреждений : 5
|
|
Попробуй
Код: |
git add /beststroy.rf/public_html/local/templates/beststroy/components/bitrix/catalog/podryad/bitrix/catalog.section/.default/template.php
git status |
Что говорит? |
|
|
|
|
Romani Гуру Предупреждений : 1
|
|
Ахренеть я протупил, в gitignore поставил просто папку bitrix без путей, надо было ./bitrix игнорировать, а он игнорировал все папки bitrix, спасибо большое за помощь и скриптик тоже пригодится. |
|
|
|
|
Luke_Skywalker Гуру |
|
а зачем вам папки пустые в гите? |
|
|
|
|
|