web-dev-qa-db-ja.com

gitのフックへのシンボリックリンク

独自のカスタムポストマージフックを作成し、メインプロジェクトフォルダーに「hooks」ディレクトリを追加しました(gitは.git/hooksの変更を追跡しないため)、どこかでフックからシンボリックリンクを作成できることを読みました誰かがそれを変更するたびに1つのフォルダから他のフォルダにファイルをコピーする必要がないように.git/hooksに

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

しかし、それはうまくいかないようです、なぜアイデアがありますか? 「ln hooks/post-merge .git/hooks/post-merge」は正常に動作しますが、ハードリンクを作成することはcopyinと同じです。

77
Mateusz Dymczyk

間違ったパスを使用しただけで、次のようになります。

ln -s -f ../../hooks/post-merge .git/hooks/post-merge
152
Michal Čihař

シンボリックリンクを使用できますが、git設定でプロジェクトのフックフォルダーを変更することもできます。

git config core.hooksPath hooks/

これはデフォルトでローカルなので、他のプロジェクトのgitフックを台無しにしません。このリポジトリのすべてのフックで機能するため、複数のフックがある場合に特に役立ちます。

チームと共有したくない.git/hooks/に既にカスタムフックがある場合は、hooks /に追加して、共有されないように.gitignoreを追加できます。

11

リンクする前にディレクトリを変更する

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

なぜ単にcp ./hooks/* .git/hooks /

これはMac OSで私のために働いた

0
Frazko

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 /ディレクトリ内でファイル拡張子がサフィックスとして付けられていないファイルをシンボリックリンクします。このディレクトリ+このスクリプト(symlink.shという名前)にREADME.txtがあります。実際のgitフックはすべて「pre-commit」、「pre-Push」などの名前が付けられているため、シンボリックリンクされます。

0
cchoe1

パスの計算は、シンボリックリンクに対して行われます。例を使って理解しましょう。

ln -s path/to/file symlink/file

ここで、ファイルへのパスは、実際にはシンボリックリンクパスからの相対パスである必要があります。
システムは実際にファイルパスをsymlink/path/path/to/file
上記のコマンドは次のように書き換える必要があります。

ln -s ../path/to/file symlink/path

フォルダ構造は、

/コード
------ symlink/file
------ path/to/file

0
swayamraina