git의 후크에 대한 심볼릭 링크 메인 프로젝트 폴더에 추가했습니다 (git은 .git

나만의 커스텀 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에서 나를 위해 일했습니다.