検索

ホームページ  >  に質問  >  本文

git - サーバー上のファイルをどのように管理しますか?

Web サイトには何千ものファイルがあり、数十のファイルが変更されるたびに Web サイト全体を再アップロードすることは不可能ですが、毎回どのファイルが変更されたかを覚えておくのは簡単ではありません。そして、これらの変更されたファイルはさまざまなフォルダーに分散しているため、1 つずつ見つけてアップロードするのはさらに面倒になります。

では、変更されたファイルのみを毎回正確かつ便利にアップロードするにはどうすればよいでしょうか?

追伸。私の現在のアプローチは、ローカル開発環境に git をインストールし、リモート サーバーに git をインストールしてから、ここでプッシュし、そこにプルすることです。ただし、プルするにはリモート エンドに Telnet または SSH を接続する必要があります。プッシュ後にサーバーが自動的に更新される方法はありますか?みんなの提案を聞きたい。

淡淡烟草味淡淡烟草味2795日前617

全員に返信(4)返信します

  • 仅有的幸福

    仅有的幸福2017-05-02 09:29:07

    最も簡単な方法は、git を使用してアップロードすることです。git には自動デプロイを実現できるフックが付属しています。
    私も以前質問者さんと同じことをしたことがありますが、複数人で共同作業をするとプロジェクトがめちゃくちゃになりやすいです。

    返事
    0
  • 世界只因有你

    世界只因有你2017-05-02 09:29:07

    リマインダーをくれた @Cocbin に感謝します。これに基づいて、Git のフック原理を注意深く研究し、自分のプロジェクトに基づいて次のことを実行しました:

    まず、プロジェクトを github ウェブサイトにデプロイしたので、複雑なフックを自分で設定する必要はなく、github に付属の Webhook を使用するだけです。 Webhook は、GitHub にプッシュするときに設定したコールバック URL をトリガーし、この URL でプル操作を実行できます。

    さらに、サーバーでは、開発者独自の ssh キーを使用してプルしないでください。代わりに、デプロイ キーを生成して、github に配置します。このキーは、手動でのパスワード入力を必要とせず、特に github からプルするために使用されます。 . コンテンツのダウンロード後、自動展開は完全に完了します。

    Hudson と Jenkins も調べました。どちらも非常に優れたツールです。Java プロジェクトを実行している場合は、Jenkins を使用する必要があります。Hudson が Oracle に買収されてから、徐々にオープンではなくなったためです。しかし、私のプロジェクトは PHP なので、このために別の Java 8 セットをインストールする余裕はないので、それを検討しませんでした。実際には、PHP 用の特別な Jenkins もありますが、それでも重すぎると感じました。将来的にプロジェクトが大きくなるまで、それを使用することを検討するかもしれません。

    上記はいくつかの経験談ですが、同じ問題を抱えている学生さんの参考になれば幸いです。

    ----------これがゴージャスな分かれ目です--------------------------#🎜🎜 #

    追加:

    実際の操作プロセスは想像よりもはるかに複雑です。コードは次のとおりです:

    リーリー

    このとき、プッシュアップロードがあるとgithubはコールバックをしますが、問題は、コールバック中にsshイン時に使用したユーザー名ではなく、ユーザー名apacheが使用されることです。ユーザー名 apache は適切ではありません そのディレクトリには操作権限がありません:

    エラー: .git/FETCH_HEAD を開けません: 権限が拒否されました
    したがって、ssh_user を最初の Apache グループ: error: cannot open .git/FETCH_HEAD: Permission denied
    所以你需要先把ssh_user加到apache组中:

            $sReqData = file_get_contents('php://input');
            try {
                $payload = json_decode($sReqData);
            } catch (Exception $e) {
                exit(0);
            }
    
            if ($payload->ref === 'refs/heads/master') {
                exec('cd /var/www/your_repo; git pull;');
            }
    

    然后修改权限:

    usermod -a -G apache ssh_user

    之所以放在这个目录,是因为apache这个用户的缺省目录就是/var/www,当然你可以把它改到另外一个目录下,可能会更安全一些。

    然后:

    chmod -R g+w /var/www
    chown -R ssh_user:apache /var/www
    chmod -R g+s /var/www

    它会在apache的.ssh文件夹下产生一个known_hosts文件,然后如果你是用的ssh方式,你还需要把上面生成的deploy key里的两个文件id_rsaid_rsa.pub リーリー

    次に権限を変更します:

    リーリー

    このディレクトリに配置される理由は、Apache ユーザーのデフォルトのディレクトリが /var/www であるためです。もちろん、より安全な別のディレクトリに変更することもできます。

    その後:
      リーリー
    1. Apache の .ssh フォルダーに known_hosts ファイルが生成されます。ssh を使用している場合は、上記で生成されたデプロイ キーに 2 つのファイルを追加する必要もあります< Copy code>id_rsa< /code> と id_rsa.pub を .ssh フォルダーにコピーします。次に、次のコマンドを数回実行して、エラーが再度報告されないことを確認します。次に、クライアントから新しいバージョンをプッシュして、自動展開が成功するかどうかを確認できます。

      ================ 国内版 =====================
    Githubのサーバーが中国にないため、push/pullができないトラブルが多発するため、中国のgit.oschina.netへの移行を検討してください。移行プロセスについては詳細には説明しません。注意する必要があることがいくつかあります:
    1. Webhook コードについて:
    #🎜🎜# リーリー #🎜🎜##🎜🎜##🎜🎜#重要なステップは実行することです。私はここで行き詰まり、長い間理由を見つけることができませんでした: #🎜🎜##🎜🎜##🎜🎜# リーリー

    返事
    0
  • 習慣沉默

    習慣沉默2017-05-02 09:29:07

    git がバージョン管理であることは誰もが知っています

    返事
    0
  • 黄舟

    黄舟2017-05-02 09:29:07

    私が使用した方法についてお話します:
    1. まず、バージョン管理サービスと rsync サービスが必要です
    2。バージョン サーバーを一時ファイル フォルダー
    3. rsync サーバー ディレクトリを一時フォルダー
    に指定します。 rsync コマンドを使用して、サーバー ディレクトリをデプロイメント ディレクトリ
    5 に同期します。 : バージョン コードの更新 一時フォルダーに移動し (増分)、一時フォルダー ファイルに対して更新操作を実行します (必要な場合)。rsync は一時フォルダー ファイルを展開ディレクトリに同期します (増分)

    上記のプロセスが完了したら、コードを送信するたびに上記の項目 5 のシェルを実行するだけで済みます。
    少し面倒ですが、嫌な場合はスプレーしない方が効果的です。

    返事
    0
  • キャンセル返事