gitを使用してリモートサーバー上のデータを管理したいので、そこに非ベアリポジトリを設定しました。問題なくプッシュでき、リポジトリ自体は更新されますが、実際のファイルは変更/追加/削除されません。サーバーにSSHで接続し、
git reset --hard HEAD
実際に更新するファイル構造を取得します。
何をすべきか?
gitを使用してリモートサーバー上のデータを管理したいので、そこに非ベアリポジトリを設定しました。問題なくプッシュでき、リポジトリ自体は更新されますが、実際のファイルは変更/追加/削除されません。サーバーにSSHで接続し、
git reset --hard HEAD
実際に更新するファイル構造を取得します。
何をすべきか?
あなたはこれをすべきではありません。ベアリポジトリを用意することをお勧めします。つまり、チェックアウトされたファイルはなく、.gitディレクトリ自体だけです。次に、リポジトリをサーバー上の他の場所(たとえば、Webルート)にチェックアウトできます。このようにして、次のようになります。
gitのベストプラクティス。Gitのドキュメントによると、従わないと「予期しない結果」が発生する可能性があります。プログラミングを上手にやった人なら誰でも、「予期しない結果」が「おそらくあなたの子供を食べてしまうので、絶対に避けなければならない」というコードであることを知っています。
サーバー上のチェックアウトされたファイルにWebサーバーからアクセスできるようにする場合は、セキュリティが向上します。
チェックアウトされたコードのローカル変更、およびライブのチェックアウトされたコードにすばやく変更を加える機能。リポジトリで直接これを実行しようとすることもできますが、面倒でエラーが発生しやすくなります。
ライブサービスコードの更新とは別にサーバーリポジトリを更新する機能。これは、リモートで作業していて、サーバーに何かを送信してから、ライブサービスの準備が整う前にさらに作業を行う必要がある場合、またはライブサービスコードに変更がある場合(たとえば、異なる構成設定)、非常に重要です。 )そして、それらの変更をリポジトリ内の変更とマージする必要がありますが、現時点ではそれを行うことはできません。
次の手順をお勧めします。
これは、幸いなことに、git自体で直接サポートされるようになりました。あなたは私がちょうど賛成したこの答えで詳細を見つけることができます:
https://stackoverflow.com/a/38363683/85360
でリモートを構成することをお勧めします
git config receive.denyCurrentBranch updateInstead
プッシュすると、作業コピーが更新されます。
Gitバージョン1.9.1UbuntuServer
14.04LTSLAMP
サーバー
Web開発者の1人がサーバーに変更をプッシュするたびに、Gitリポジトリの作業ディレクトリを更新するようにLAMPサーバーを設定しました。ログには新しいコミットが記録されますが、作業ディレクトリは更新されないことに気付きました。更新ごとに手動でこれを行う代わりに(git checkout -f)、プッシュが受信された後にこれを行うように自動的に設定できます。
次のコンテンツを含む「hooks」フォルダ内に「post-receive」という名前のファイルを作成します。
#!/ bin / sh
#リモートクライアントからプッシュを受信した後、作業ディレクトリを更新します。
#これはgit作業ディレクトリに向ける必要があります。
GIT_WORK_TREE = / var / www / dev_site git checkout -f
「hooks」フォルダに「chmod+x post-receive」と入力して、ファイルを実行する権限を有効にします。
コミットがGitリポジトリにプッシュされると、作業ディレクトリが更新されるようになりました。私のサイトにブラウザでアクセスすると、変更が表示されるようになりました。
私の作業ディレクトリは/var/ www/dev_siteです