Я написал свой собственный хук после слияния, теперь я добавил каталог "хуков" в мою основную папку проекта (поскольку git не отслеживает изменения в .git / hooks), где-то я читал, что могу сделать символическую ссылку из хуков в .git / hooks, поэтому мне не нужно копировать файл из одной папки в другую каждый раз, когда кто-то его изменяет, поэтому я попробовал:
ln -s -f hooks/post-merge .git/hooks/post-merge
Но, похоже, это не работает, есть идеи, почему? "ln hooks / post-merge .git / hooks / post-merge" работает нормально, но создание жесткой ссылки - то же самое, что и копирование, я думаю ....
.git/hooks/
, указывающая на,hooks/post-merge
разрешается на.git/hooks/hooks/post-merge
, которого не существует. Вы хотитеln -s -f ../../hooks/post-merge .git/hooks/post-merge
. Или сделать вашу жизнь проще:ln -s -f ../hooks .git/hooks
. Ваша проблема не имеет ничего общего с git..git/hooks
.Ответы:
вы просто использовали неправильный путь, он должен быть:
источник
cd
попал. Разве это не должно быть просто такln -s ./hooks/
?.git/hooks
качестве своего рабочего каталога, поэтому относительные пути должны быть относительно этого каталога. Это больше самопонятны если вы первыйcd
в.git/hooks
прежде чем сделать символическую ссылку, и фигура из относительного пути оттуда.ln
будет сохранено как цель и разрешено относительно местоположения ссылки.cd
войдете в систему.git/hooks
перед тем, как создать ссылку, это поможет вам написать команду, так как затем вы можете автозаполнить правильный путь.prepare-commit-msg
. Проблема в том, что если я редактирую сообщение фиксации с помощью nano, затем Ctrl + X выходит для прерывания, git все равно завершает фиксацию вместо прерывания, как это было до того, как я сделал это изменение. Есть ли способ выполнить нано-выход без завершения этого коммита?Хотя вы можете использовать символические ссылки, вы также можете изменить папку хуков для своего проекта в настройках git с помощью:
Который по умолчанию является локальным, поэтому он не повредит git-хуки для других ваших проектов. Он работает для всех хуков в этом репозитории, поэтому особенно полезен, если у вас более одного хука.
Если у вас уже есть настраиваемые хуки,
.git/hooks/
которыми вы не хотите делиться со своей командой, вы можете добавить их в хуки / и добавить,.gitignore
чтобы они не использовались.источник
Смена каталога перед связыванием
источник
cd
:ln -s -f ../../hooks/post-merge
Расчет пути выполняется относительно символической ссылки. Давайте разберемся на примере,
ln -s path/to/file symlink/file
Здесь путь к файлу должен быть относительным путем от пути символической ссылки.
Система фактически вычисляет путь к файлу, так как
symlink/path/path/to/file
Вышеупомянутая команда должна быть переписана как
ln -s ../path/to/file symlink/path
Структура папок,
источник
Используя комментарий Майкла Цихара, вот пример сценария bash, который я написал для простого создания этих символических ссылок. Этот скрипт находится в git_hooks / dir, который находится в корне проекта. Моя папка .git / также находится на том же уровне каталога.
Мой сценарий должен запускаться из фактического каталога git_hooks /. Вы можете изменить его поведение, если хотите.
Этот скрипт создаст символическую ссылку на любой файл, который не имеет суффикса с расширением файла в каталоге git_hooks /. У меня есть README.txt в этом каталоге + этот скрипт (с именем symlink.sh). Все фактические хуки git называются pre-commit, pre-push и т. Д., Поэтому они будут иметь символические ссылки.
источник
почему бы просто не cp ./hooks/* .git / hooks /
это сработало для меня в Mac OS
источник
I don't have to copy the file from one folder to the other every time someone changes