解決した方法(私のところでは)
プルしている本番環境で自動的に変わってしまっていたファイルを
元に戻してプルし直したら治りました。
状況
数カ月ぶりの更新をしたサイトでエラーがでました。
エラーメッセージ
これはGitHubのwebhookのログ画面で確認しています。
Request
We couldn’t deliver this payload: timed out
Payload
We can’t highlight this payload because it’s too large
画面ではこんな感じで表示されます。
環境
ここで環境を整理しておきます。
管理しているプロジェクトはWordPressでwp-contentディレクトリごと管理をしています。
ここでポイントなのはWordPressはプラグインというプログラム部品を組み込んで使うのですが
プラグインが自動でファイルを追加したり変更したりすることがあります。
(現時点最新のWPを使用していればプラグインの自動更新制御のチェックがあります)
原因
本番にsshログインしてgit statusを叩いてみたら
変更されたファイル、追加されたファイルがずらっと並びました。
つまりadd前の変更されたファイルがあってpullが実行できない状態でした。
プラグインが勝手に編集したんですね。
便利なこともありますがこう言った原因を生むこともあります。
修正作業
下でも重ねて書いていますが
作業前にバックアップ必須です。
本番で自動的に変わってしまったファイルの変更をなかったことにします。
$ git checkout .
これで編集、削除されたファイルは元に戻りましたが
追加されたファイルが消えていません。
これらも以下のコマンドで消していきます。
ここで一つ注意点!
★★★★★ git cleanを実行する前にはバックアップ必須です! ★★★★★
理由としては一度削除してしまうと戻せないファイルが出るからです。
具体的に整理してみましょう
.gitignoreで管理対象外にしていたディレクトリがあるとします。
それらがgit cleanを実行するディレクトリにあれば一緒に削除されます。
この管理対象外ディレクトリはgitコマンドで戻せるでしょうか?
戻せませんね。git管理から外していたディレクトリですから
ですから誤ってgit cleanを実行してしまった場合はバックアップファイルから戻すしかありません。
心配な場合は面倒でもディレクトリ一つ一つ確認しながら削除するというのもありだと思います。
これらを踏まえて以下のコマンドを見ていきましょう。
//1つ1つ丁寧に削除するパターン
$ git rm -r [削除したいディレクトリ]
//nオプションで削除されるファイルを確認できます。
$ git clean -n
//カレントディレクトリのファイルを削除
//管理対象外のファイルも削除されます!!!
$ git clean -f
//カレントディレクトリにさらにディレクトリがありそれも含めて削除
//管理対象外のファイルも削除されます!!!
$ git clean -df
確認
現在のヘッドの状態を確認します。
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 3 commits.
# (use "git push" to publish your local commits)
#
nothing to commit, working directory clean
マスターブランチはきれいになりました。
これでGitHubのwebhook経由自動pullが通るようになりました。
ふりかえり
管理体制を見直してみようかな。
オススメの管理方法がありましたら教えてください。