Как `git добавить` файл с именем `foo/.git/bar`?

#git

Вопрос:

Как бы я ни старался, я не могу git отследить имя своего файла foo/.git/bar .

Что я пробовал

 git add foo                     # no result
git add foo/.git                # no result
git add foo/.git/bar            # no result
git add --force foo/.git/bar    # no result
cd foo amp;amp; git add .git          # no result
 

Я понимаю, что обычно вы не хотели бы отслеживать такой файл. Я думаю, что мой прецедент оправдывает это, хотя.

Мой вариант использования

У меня есть файл с именем foo/.git/hooks/pre-push в моем репозитории git. Я буду использовать GNU stow для установки этого pre-push файла в репозиторий git где-нибудь еще на моем диске. Чтобы было ясно, папка foo не является репозиторием git; это просто папка с именем foo , которая содержит папку с именем .git и файл .git/hooks/pre-push . Я хочу отследить это.

Как этого можно добиться?

Комментарии:

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

2. Да @the_previ, я пытался поставить git-крючки и файлы конфигурации git ( .git/hooks/... и .git/config ) под контроль версий. План состоял в том, чтобы использовать GNU stow для установки крючков и конфигурационного файла.

Ответ №1:

Ты не можешь.

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

Назовите файл как-нибудь иначе.

Комментарии:

1. Сначала я прочитал первое предложение как «Бог запрещает вам…» Спасибо за ответ 🙂

Ответ №2:

Ты не можешь, как было сказано. Просто чтобы расширить предыдущий ответ — если вы хотите сделать это для крючков, что вы можете сделать, это просто <repo>/hooks включить крючки и написать сценарий или Makefile настроить среду разработчика, которая разместит их на нужном месте. Если вы задокументируете это в README.md или CONTRIBUTING.md и скажете людям запустить скрипт первым делом, он будет работать довольно хорошо, а также будет работать для других git целей .

Также обратите внимание, что не рекомендуется доверять крючкам на компьютере разработчика, даже если разработчик забывает установить крючки, которые, например, проверяют код, добавляют подпись и т. Д. Удаленный сервер CI или VCS должен перехватывать эти плохие запросы на вытягивание и отклонять их.