나만의 커스텀 post-merge hook을 작성했고, 이제는 “hooks”디렉토리를 내 메인 프로젝트 폴더에 추가했습니다 (git은 .git / hooks의 변경 사항을 추적하지 않기 때문입니다). 어딘가에 후크에서 심볼릭 링크를 만들 수 있다고 읽었습니다. .git / hooks로 변경하여 누군가 파일을 변경할 때마다 한 폴더에서 다른 폴더로 파일을 복사 할 필요가 없으므로 시도했습니다.
ln -s -f hooks/post-merge .git/hooks/post-merge
그러나 작동하지 않는 것 같습니다. 이유가 무엇입니까? “ln hooks / post-merge .git / hooks / post-merge”는 잘 작동하지만 하드 링크를 만드는 것은 copyin과 동일합니다 ….
답변
잘못된 경로를 사용했습니다. 다음과 같아야합니다.
ln -s -f ../../hooks/post-merge .git/hooks/post-merge
답변
심볼릭 링크를 사용할 수 있지만 다음을 사용하여 git 설정에서 프로젝트의 후크 폴더를 변경할 수도 있습니다.
git config core.hooksPath hooks/
기본적으로 로컬이므로 다른 프로젝트의 git 후크를 망치지 않습니다. 이 저장소의 모든 후크에서 작동하므로 후크가 두 개 이상인 경우 특히 유용합니다.
.git/hooks/
팀과 공유하고 싶지 않은 사용자 지정 후크가 이미있는 경우 후크 /에 추가하고 .gitignore
공유되지 않도록 추가 할 수 있습니다 .
답변
연결하기 전에 디렉토리 변경
cd /path/to/project-repo/.git/hooks
ln -s -f ../../hooks/post-merge ./post-merge
답변
경로 계산은 심볼릭 링크를 기준으로 수행됩니다. 예를 들어 이해합시다.
ln -s path/to/file symlink/file
여기서 파일 경로는 실제로 심볼릭 링크 경로의 상대 경로 여야합니다.
시스템은 실제로 파일 경로를 계산합니다 symlink/path/path/to/file
. 위의 명령은
ln -s ../path/to/file symlink/path
폴더 구조가 다음과 같이 다시 작성되어야합니다 .
/ code
—— 심볼릭 링크 / 파일
—— 경로 / 대상 / 파일
답변
Michael Cihar의 설명을 활용하여 이러한 심볼릭 링크를 간단히 생성하기 위해 작성한 bash 스크립트의 예가 있습니다. 이 스크립트는 프로젝트 루트에있는 git_hooks / dir에 있습니다. 내 .git / 폴더도 동일한 디렉토리 수준에 있습니다.
#!/usr/bin/env bash
pwd=$(pwd);
# Script is designed to be ran from git_hooks/ dir
if [[ "$pwd" == *"git_hooks"* ]]; then
files=$(ls | grep -v -e '.*\.');
while read -r file; do
ln -s ../../git_hooks/$file ../.git/hooks/
echo "Linked $file -> ../.git/hooks/$file"
done <<< "$files";
else
echo "";
echo "ERROR: ";
echo "You must be within the git_hooks/ dir to run this command";
exit 1;
fi
내 스크립트는 실제 git_hooks / 디렉토리 내에서 실행되어야합니다. 원하는 경우 다르게 작동하도록 수정할 수 있습니다.
이 스크립트는 git_hooks / 디렉토리 내에서 파일 확장자가 접미사가없는 모든 파일을 심볼릭 링크합니다. 이 디렉토리에 README.txt와이 스크립트 (symlink.sh라는 이름)가 있습니다. 모든 실제 git 후크는 ‘pre-commit’, ‘pre-push’등으로 명명되어 심볼릭 링크됩니다.
답변
왜 그냥 cp ./hooks/* .git / hooks /
이것은 Mac OS에서 나를 위해 일했습니다.