1

EC2 Amazon Linux 開発サーバーに git リポジトリがあります。SSH を使用して、ラップトップのローカル git リポジトリから変更をプッシュしています。

ローカル リポジトリのコンテンツが Dev サーバーにミラーリングされているため、プッシュが正しく機能していることを確認しました。ただし、受信後フックが起動していないようです。コードが html ディレクトリにチェックアウトされていないためです。

少なくともフックが起動していることを確認するためにエコーコマンドを入力しようとしましたが、ローカル側でプッシュの結果を除いてコマンドラインにフィードバックはありません。

#!/bin/sh
#
# An example hook script for the "post-receive" event.
#
# The "post-receive" script is run after receive-pack has accepted a pack
# and the repository has been updated.  It is passed arguments in through
# stdin in the form
#  <oldrev> <newrev> <refname>
# For example:
#  aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b7$
#
# see contrib/hooks/ for a sample, or uncomment the next line and
# rename the file to "post-receive".

#. /usr/share/git-core/contrib/hooks/post-receive-email
GIT_WORK_TREE=/var/www/html sudo git checkout -f
4

3 に答える 3

0

これを試して:

  1. --shared オプションを使用した初期リポジトリを忘れないでください。

    $ git init --shared --bare repo/html.git

    $ sudo chgrp -R git リポジトリ/html.git

    $ sudo usermod -a -G git www-data

  2. Git ユーザーを sudoers に追加します (www-data ユーザーの nopass を許可します):

    $ sudo visudo

    デフォルト:git !authenticate

    git ALL=(www-data) NOPASSWD: /usr/bin/git

  3. 1 行の post-receive フック:

    sudo -u www-data git --git-dir=/home/git/repo/html.git/ --work-tree=/var/www/html チェックアウト -f

于 2013-01-10T23:22:47.237 に答える
0

sudoは環境変数を保持していない可能性がありGIT_WORK_TREEます。特にroot. 環境変数が意図されているのと同じことを達成するgitいくつかのコマンドライン引数(具体的には)が--git-dirあります。--work-treeこの場合、おそらくそれらを使用する必要があります。

于 2012-08-21T17:08:21.997 に答える
0

これがクラウド サーバーの問題の解決に役立つかどうかはわかりませんが、手動で /etc/fstab ファイルを編集する必要がありました。/srv/git フォルダーは、fstab ファイルを介して「noexec,user」コマンドでマウントされたハードドライブにシンボリック リンクされていました。それを「デフォルト」に変更すると、最終的に問題が解決しました。それを理解するのに8時間かかりました。あなたも試すことができます

$cd /path/to/.git/hooks
$sudo chown git:git post-receive

受信後ファイル用。

于 2012-08-26T22:15:45.160 に答える