2011-01-04 4 views
54

Я написал собственный пользовательский крюк после слияния, теперь я добавил каталог «hooks» в свою основную папку проекта (так как git не отслеживает изменения в .git/hooks), где-то я прочитал, что я могу сделать символическую ссылку с крючками на .git/крючки, так что я не должен скопировать файл из одной папки в другую каждый раз, когда кто-то изменяет, так что я пробовал:Символическая ссылка на крючок в git

ln -s -f hooks/post-merge .git/hooks/post-merge

Но это, кажется, не работает, какие-то идеи почему? «ЛУ Крючки/после слияния .git/Крючки/после слияния» отлично работает, но делает жесткую связь такая же, как copyin я думаю ....

+15

Поскольку символическая ссылка разрешена относительно ее местоположения. Символьная ссылка в '.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. –

+1

http://stackoverflow.com/questions/3462955/putting-git-hooks-into-repository и http://stackoverflow.com/questions/427207/can-git-hook-scripts-be-managed-along-with -the-repository (и http://stackoverflow.com/questions/3703159/git-remote-shared-pre-commit-hook) указывают на то, что symlink может работать. – VonC

ответ

123

вы просто использовали неправильный путь, он должен быть:

ln -s -f ../../hooks/post-merge .git/hooks/post-merge 
+7

Я не понимаю, почему мне нужно перейти к двум каталогам, чтобы связать ресурс, который живет в папке, в которой я «cd''d». Разве это не должно быть 'ln -s./Hooks /'? – Droogans

+27

Это. Когда git оценивает символическую ссылку, она, по-видимому, делает это с использованием '.git/hooks' как своего рабочего каталога, поэтому относительные пути должны относиться к этому каталогу. Это более понятно, если вы сначала 'cd' в' .git/hooks' перед созданием символической ссылки и выясните относительный путь оттуда. – Eliot

+10

@ Невозможно создать ни создание, ни разрешение символических ссылок. Все, что вы даете 'ln', будет сохранено в качестве цели и разрешено относительно местоположения ссылки. –

2

Изменение каталога перед соединением

cd /path/to/project-repo/.git/hooks 
ln -s -f ../../hooks/post-merge ./post-merge 
1

почему не только ф ./hooks/* .git/крючки/

это работало для моих в Mac OS

+6

Потому что «мне не нужно копировать файл из одной папки в другую каждый раз, когда кто-то меняет» –

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