7

gitを使用してリモートサーバー上のデータを管理したいので、そこに非ベアリポジトリを設定しました。問題なくプッシュでき、リポジトリ自体は更新されますが、実際のファイルは変更/追加/削除されません。サーバーにSSHで接続し、

git reset --hard HEAD

実際に更新するファイル構造を取得します。

何をすべきか?

4

4 に答える 4

8

あなたはこれをすべきではありません。ベアリポジトリを用意することをお勧めします。つまり、チェックアウトされたファイルはなく、.gitディレクトリ自体だけです。次に、リポジトリをサーバー上の他の場所(たとえば、Webルート)にチェックアウトできます。このようにして、次のようになります。

  • gitのベストプラクティス。Gitのドキュメントによると、従わないと「予期しない結果」が発生する可能性があります。プログラミングを上手にやった人なら誰でも、「予期しない結果」が「おそらくあなたの子供を食べてしまうので、絶対に避けなければならない」というコードであることを知っています。

  • サーバー上のチェックアウトされたファイルにWebサーバーからアクセスできるようにする場合は、セキュリティが向上します。

  • チェックアウトされたコードのローカル変更、およびライブのチェックアウトされたコードにすばやく変更を加える機能。リポジトリで直接これを実行しようとすることもできますが、面倒でエラーが発生しやすくなります。

  • ライブサービスコードの更新とは別にサーバーリポジトリを更新する機能。これは、リモートで作業していて、サーバーに何かを送信してから、ライブサービスの準備が整う前にさらに作業を行う必要がある場合、またはライブサービスコードに変更がある場合(たとえば、異なる構成設定)、非常に重要です。 )そして、それらの変更をリポジトリ内の変更とマージする必要がありますが、現時点ではそれを行うことはできません。

次の手順をお勧めします。

  • ベアリポジトリの設定については、gitドキュメントに従ってください
  • リポジトリからライブサービスのターゲットディレクトリへのコードをチェックアウトします
  • リポジトリが更新されたときにライブサービスを更新するために、gitフックを設定します(ポストコミットは正しいIIRCである必要があります)。おそらくライブサービスディレクトリにcdし、git pull --rebaseを実行し、ファイルのアクセス許可を設定する必要があります。
  • これからは、開発ボックスからリポジトリにコードをプッシュするだけです。
于 2009-09-16T16:59:51.607 に答える
8

これは、幸いなことに、git自体で直接サポートされるようになりました。あなたは私がちょうど賛成したこの答えで詳細を見つけることができます:

https://stackoverflow.com/a/38363683/85360

でリモートを構成することをお勧めします

git config receive.denyCurrentBranch updateInstead

プッシュすると、作業コピーが更新されます。

于 2016-11-15T02:31:31.953 に答える
4

更新後のフックを使用します。

フック

そこで、更新ごとに必要なものを実行できます。

于 2009-09-16T16:04:57.083 に答える
1

Gitバージョン1.9.1UbuntuServer
14.04LTSLAMP
サーバー

Web開発者の1人がサーバーに変更をプッシュするたびに、Gitリポジトリの作業ディレクトリを更新するようにLAMPサーバーを設定しました。ログには新しいコミットが記録されますが、作業ディレクトリは更新されないことに気付きました。更新ごとに手動でこれを行う代わりに(git checkout -f)、プッシュが受信された後にこれを行うように自動的に設定できます。

  1. 「.git」ディレクトリで、「hooks」フォルダに移動します。
  2. 次のコンテンツを含む「hooks」フォルダ内に「post-receive」という名前のファイルを作成します。

    #!/ bin / sh

    #リモートクライアントからプッシュを受信した後、作業ディレクトリを更新します。
    #これはgit作業ディレクトリに向ける必要があります。

    GIT_WORK_TREE = / var / www / dev_site git checkout -f

  3. 「hooks」フォルダに「chmod+x post-receive」と入力して、ファイルを実行する権限を有効にします。

コミットがGitリポジトリにプッシュされると、作業ディレクトリが更新されるようになりました。私のサイトにブラウザでアクセスすると、変更が表示されるようになりました。

私の作業ディレクトリは/var/ www/dev_siteです

于 2015-01-28T00:01:28.313 に答える