2016-03-29 5 views
2

У меня есть требование в моей команде написать pre-commit hook в git, который должен ограничивать добавление или удаление каталогов.Как узнать, добавлен или удален новый каталог в репозитории git

Поскольку git всегда рассматривает файлы для создания нового каталога, пользователи могут просто добавить требуемый или фиктивный файл и добавить его, однако, прежде чем совершить мой крюк с предварительной фиксацией, следует сравнить известную структуру каталогов в удаленном режиме и вернуть ненулевое число, если оно нарушено.

git log -n1 --pretty="format:" --name-only дает мне список изменений в pre commit, однако мне нужны некоторые идеи, как я могу сравнить структуру каталогов.

ответ

0

Как ни странно, каталоги не хранятся в git. Единственными каталогами, которые вы получите на git clone, являются те каталоги, которые необходимы для хранения файлов, хранящихся в репозитории, причем каждый файл хранится по его пути. Поэтому все, что вы можете сделать, это отклонить файлы с путями, которые выходят за рамки нужной структуры каталогов. Поэтому разумное использование dirname или эквивалент на вашем любимом языке в сочетании с соответствием этому шаблону будет полезно.

1

Как упоминалось ранее, git не направляет их самостоятельно.

Причиной этого является мерзавец tracks content и каталоги не имеет никакого содержания они просто метаданные.

После того, как мы очистили это вне вопрос остается:

Как я могу отслеживать addition or deletion of directories

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

# get a list of all the directories 
git ls-files | xargs -n 1 dirname | uniq 

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


Как вы можете видеть, этот скрипт распечатывает только каталоги.

enter image description here

+0

проголосовало за вопрос. его хороший, я должен признать. – CodeWizard

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