0

私はアイデアが足りないので、お願いします。

ローカルコンピューターからプロジェクトが使用されているリモートサーバーに変更をプッシュしようとしています。

私はこのガイドを使用しています:http://ryanflorence.com/deploying-websites-with-a-tiny-git-hook/

私はそのように私のローカルマシンにリモコンを追加します

$git remote add stage ssh://user@domain.com/var/www/domain.com/public_html

この/var/www/domain.com/public_htmlは、リポジトリのパスです。

それから私がするとき

$git push stage stage 

すべてが機能しているように見えますが、変更はWebサイトに表示されていないようです。

だから私が見ることができるリモート(ステージ)#gitステータスをチェックする

$ On branch stage
$ Changes to be committed:
$   (use "git reset HEAD <file>..." to unstage)
$
$   modified:   sites/all/modules/custom/bf/bf.forms.inc
$

したがって、リモート(ステージ)で#git reset --hardを実行すると、変更が加えられます。

次に、このプロセスを自動化するために受信後フックを追加します。受信後ファイルには次のものが含まれています。

#!/bin/sh
cd ..
GIT_DIR='.git'
umask 002 && git reset --hard

しかし今、$ git push stageステージを実行すると、この結果が得られます

オブジェクトのカウント:24、完了。最大2つのスレッドを使用したデルタ圧縮。オブジェクトの圧縮:100%(16/16)、完了。オブジェクトの書き込み:100%(16/16)、1.56 KiB、完了。合計16(デルタ10)、再利用0(デルタ0)リモート:エラー:チェックアウトされたブランチの更新を拒否:refs / heads / stageリモート:エラー:デフォルトでは、非ベアリポジトリリモートの現在のブランチを更新:エラー:は拒否されます。これは、インデックスと作業ツリーの一貫性が失われるためです。リモート:エラー:プッシュした内容と一致し、リモート:エラー:作業ツリーをHEADに一致させるには「gitreset--hard」が必要です。remote:error:remote:error:リモートリポジトリで「receive.denyCurrentBranch」構成変数をremote:error:「ignore」または「warn」に設定して、remote:error:現在のブランチにプッシュできるようにすることができます。でも、リモート:エラー:リモートでプッシュしたものと一致するように作業ツリーを更新するように調整されている場合を除いて、これはお勧めしません:エラー:他の方法。remote:error:remote:error:このメッセージをスケルチし、デフォルトの動作を維持するには、remote:error:'receive.denyCurrentBranch'構成変数を'refuse'に設定します。ssh://user@domain.com/var/www/domain.com/public_htmlへ![リモート拒否]ステージ->ステージ(ブランチは現在チェックアウトされています)エラー:一部の参照を「ssh://user@domain.com/var/www/domain.com/public_html」にプッシュできませんでした 'refuse'への構成変数。ssh://user@domain.com/var/www/domain.com/public_htmlへ![リモート拒否]ステージ->ステージ(ブランチは現在チェックアウトされています)エラー:一部の参照を「ssh://user@domain.com/var/www/domain.com/public_html」にプッシュできませんでした 'refuse'への構成変数。ssh://user@domain.com/var/www/domain.com/public_htmlへ![リモート拒否]ステージ->ステージ(ブランチは現在チェックアウトされています)エラー:一部の参照を「ssh://user@domain.com/var/www/domain.com/public_html」にプッシュできませんでした

これを修正するにはどうすればよいですか?メッセージに基づくと、これは推奨されるワークフローではありません。より良い方法はありますか?

4

1 に答える 1

2

エラーメッセージは、何をする必要があるかを非常に明確に示しています。サーバーにログオンして、を実行しますgit config receive.denyCurrentBranch ignore

git pull通常、gitは、ベアまたはベアでない任意のリポジトリから実行できるように設定されていますがgit push、ベアリポジトリでのみ発生します。(「裸の」リポジトリとは、作業ディレクトリがないリポジトリです。フォルダの内容は.gitディレクトリの内容です。)これは理にかなっています。ブランチをチェックアウトしていて、同じブランチの新しいバージョンをマシンにプッシュした場合、作業ディレクトリが突然古くなり、次のコミットでプッシュしたものの多くが元に戻る可能性があります。それは良くないね。

この設定では、作業ディレクトリはWebサーバーが読み取り、誰もコミットしないディレクトリです。実際にはgitで作業ディレクトリをすぐに更新する必要があります。また、更新後のフックを使用して、「作業ツリーを更新して自分の作業に一致させる」ようにします。他の方法でプッシュされました」。エラーメッセージをオフにして、ビジネスに取り掛かることができます。

興味がある場合はgit reset --hard、ローカルの変更をクリアし、作業ディレクトリがHEADと同じであることを確認します。gitのほとんどのものと同様に、同じことを行うには複数の方法があり、簡単に書くことができますgit checkout HEAD .。ただし、1つの推奨事項:も追加git clean -dfします。git checkout通常、git resetgitに追加していないファイルは削除しないため、削除したファイルをサーバーから削除する場合は、特にgitに削除するように指示する必要があります。

お役に立てば幸いです。

于 2012-09-19T01:21:41.750 に答える