2

このガイドhttp://toroid.org/ams/git-website-howtoに従った後、Gitを使用していくつかのWebサイトを維持しています

ローカル リポジトリに変更を加えてコミットし、サーバー上のリモート リポジトリに git push します hooks/post-receive では、次のようにします。

#! /bin/sh
GIT_WORK_TREE=/home/user/public_html/ git checkout -f

これは、root として ssh 経由でプッシュすることを除けば、非常にうまく機能します。そのため、チェックアウトされたすべてのファイルは root:root によって所有されます。これにより、許可の問題が発生します。

私が現在使用している解決策は、受信後のファイルに次のような行を追加することです。

chown -R user:user /home/user/public_html/*

public_html のすべてのファイルを user:user に設定するという明らかな問題は別として、これはうまく機能しますが、これは必ずしも必要なものではなく、おそらく少し非効率的です。また、user:user を間違って入力する別の機会が導入されます。

そう:

  1. public_html のすべてのファイルではなく、チェックアウトされているファイルのみを設定する方法はありますか?

  2. そもそも root:root によって所有されているファイルを停止する方法はありますか? 他のユーザーに ssh アクセスを許可したくないので、root として ssh する必要があります。

4

1 に答える 1

1

システムユーザーgitとしてファイルをプッシュすることは問題ではないと思います。必ずしもas を使用するとは限らないrootため。gitsystem usergit user

デプロイ ワークフローに誤りがあります。

ファイルを に直接チェックアウトする代わりに、.public_htmlにない別のフォルダを使用する必要がありますDocumentRoot。自分git repoを世界にさらすことは、あなたがやりたいことではないかもしれません。

別のフォルダを用意することをお勧めします/home/user/git_cache

cd /home/user/git_cache && git checkout -f
cp -RpP /home/user/git_cache/* /home/user/public_html/*
于 2013-10-20T16:39:20.963 に答える