- 投稿日:2019-10-28T17:40:10+09:00
[初心者向け]herokuにpushするときに失敗したら
はじめに
最近ようやくGitやHerokuを使い始めて、色々と詰まった点について自分用のまとめとして、後私と同じような初心者の方があれ?ってなった時の対処方法として見てもらえればと思って投稿します。
git push heroku masterでエラーが出る
もう、何だよって思いますよね。
例えば"Could not read from remote repository"とか出てきます。ここでは色々な対処法をとりあえず乗っけておきます。
リポジトリの追加
先ほどの"Could not read from remote repository"ですが、
その前に"'heroku' does not appear to be a git repository"
とか書かれていることがあるかと思います。そういうときはリポジトリを追加してあげましょう。
$ git remote add heroku 追加したいリポジトリURL # herokuで言えばHeroku Git URLが追加したいリポジトリURLになります。Herokuのアプリケーション画面のSettingsから確認できます。
ちなみにリポジトリ一覧のコマンドは以下。
追加できているかを確認してみて下さい。$ git remote公開鍵の作成
ローカルで開発してて、サーバーは初心者って方は公開鍵とか聞くとちょっと嫌になるレベルですよね。
私は完全独学プログラマーなのでこの辺りとか最初マジで意味わからなかったです。←そのくらい理解しろよ以下のようなエラーメッセージ
"Please make sure you have the correct access rights
and the repository exists."が出てきた場合は以下のコマンドで公開鍵を作成してあげて下さい。$ heroku keys:addこれで大体は解決すると思います。
その他検索候補
あとはとりあえず検索した上で、状況に応じて使用してほしいコマンドです。
$ heroku auth:token認証に失敗したときにトークンを発行します。
これで発行された文字列をコピーし、pushを行います。Usernameは入れずにエンター
Passwordに先ほどのトークンをペーストこれでいける場合もあります。
最後に
とりあえず私が詰まって解決策ググりまくった過程をだらだら記述した感じになりますが、これで問題を解決できる人が一人でもいればうれしいです。
また違う問題見つかったらちょっとずつ追記していこうと思います。
- 投稿日:2019-10-28T15:55:38+09:00
ブランチ名をコピーするエイリアスでちょっと幸せになれる。
記事にする程でもないですが、ちょっと幸せになれるエイリアスをご紹介します。
Gitブランチ名をコピーするエイリアス
↓ 下記のありがたい記事を参考に、エイリアスを少しだけカスタマイズします。(ありがとうございます)
- Gitのブランチ名を返すエイリアスを設定したら地味に捗った▽ エイリアスを
.zshrcもしくは.bashrcに追加します。.zshrcalias brcopy='git symbolic-ref --short HEAD | pbcopy'パイプを利用してmacのpbcopyコマンドに出力されたブランチ名を渡しています。
シェルの補完で十分ですが、設定しておくとたまに使える便利なエイリアスでした。
- 投稿日:2019-10-28T08:49:38+09:00
【エラー対処】error failed to push some refs to pre-receive hook declinedが出るとき意外と忘れがちなこと
はじめに
普段どおりGitKerakenでコミットして、意味もないけどプッシュしとくか〜〜
って思ったら、プッシュがいかない。error failed to push some refs to pre-receive hook declinedみたいなメッセージが出る。
普段ならうまくいくのに、急にいかない!?ってなりました。
色々探した後...
色々とネットを探しても、関係ありそうな情報がない。
そこで、ファイルを入れたり出したりを繰り返すとどうやら重いファイルを含んでいると上記エラーが出ているっぽい。GitHubの制約を見ると
- 50MB以上のファイルで警告が出る
- 100MB以上のファイルはアップロードできない
とありました。
どうやらGitKerakenではこのように100MB以上のファイルを含んでいるとエラーを
error failed to push some refs to pre-receive hook declinedのように出すっぽいです。
事実、100MB以上のファイルを除けば普通にプッシュできました。
- 投稿日:2019-10-28T08:40:21+09:00
【遭難防止】Git初心者のための現状確認コマンドの意味まとめ git status, git log,git diff【俺、今どこにいるの?】
これを理解するまで、例えるなら山で地図とコンパスとGPSを持っているけど使い方がわからなくて(使っていなくて)道迷いしまくるような状態でした。
「もうGitで遭難したくない!」というあなたに役立てばと思います。
誤り等あればご指摘頂けますと幸いです。
この記事が役立つ人
- 細かい表示内容は置いといて、意味を知りたい
- 確認系の各種コマンドはよく分からない
- Git初心者
addcommitpushの意味は分かる各コマンドの表示単位
表示単位が小さい順から大きい順です。
【小】git diff
「ファイルの中身」を表示。
差分を抽出してくれる。
qで抜けられる。【中】git status
「ファイル」を表示。
現在、最新の
commit後にどこが変更になったのかをファイル単位で教えてくれる。【大】git log
「
commit」を表示。現在いる
branchの中での「commitの履歴」を教えてくれる。表示したいこと別 コマンド一覧
オプションも多すぎて、どれを使ったらいいか分からないですよね。
これを使えば現状把握にはそう困らないと思います。まずはオプションなしで使ってみることで、根本の機能を理解するのが大事ですね。
※注意点
あれ?戻らない!と思ったら、だいたいqを押せば抜けられます。【ファイルの中身単位】git diff
1.(オプションなし)
addされる前の内容を表示したい。$ git diff2.
addされてるけどcommitされていない内容を表示したい。$ git diff --cached【ファイル単位】git status
1.(オプションなし)前回の
commitから変更のあったファイルを表示したい。$ git status2.コンパクトに
git statusを表示したい。$ git status -s【commit単位】git log
1.(オプションなし)
commitした履歴を一覧表示したい。git log2.コンパクトに
git logを表示したい。git log --oneLine3.どこを変更したかを
git logを表示したい。
追加表示されるのは「ファイルの中身」。
git diffをついでに表示するイメージ。git log -p4.どこを変更したかを
git logを表示したい。
追加表示されるのは「行数」。
追加・削除件数が視覚的に分かるので「ここに大きな変更があったんだ」とわかりやすい。git log --stat参考にさせて頂いたサイト(いつもありがとうございます)
- 投稿日:2019-10-28T00:29:13+09:00
Git の使い方まとめ的 (最低限) なやつ
友達とかに軽く説明するときに使うかもなーっと思ってメモしておく記事です。
https://git-scm.com/docs
↑ これ読んだほうが早いので読める人はこっちどうぞ※ 適宜使いそうなコマンドを追加しておきます、知りたい動作あったら気軽にどうぞ
git を使用する前の準備
※ Windows、Mac ともに Git が使用できる状態になっていることが前提
1.git config --global user.name "Your User Name"
2.git config --global user.email Your Account Email Addressこの 2つのコマンドを実行する
(例) git config --global user.name "John Doe" git config --global user.email johndoe@example.comGitHub に Push するまでの流れ (コマンドライン)
- 基本的には
git add .の全ファイルコミットの指定でOK- 個別でファイルをコミットしたいときは
git add 個別にコミットしたいファイル名で指定する
- 基本的には
git commit -m "コミットメッセージ"でOK- 個人的には
git commitで vi モードを立ち上げてコミットメッセージを指定する方法が間違えなくて楽かと
- master ブランチに push する場合は
git pushのみでOK- ブランチをわけて作業している場合は、
git push origin ブランチ名でプッシュする作業ブランチを変更する場合
git pullで現状のリポジトリ情報を更新する
- ファイルの更新を行いたくない場合は
git fetchgit statusで現状のブランチを確認する
On branch <BranchName>git checkoutでブランチを変更する
- すでに存在しているブランチに変更する場合は
git checkout <BranchName>- 新しくブランチを作成する場合は
git checkout -b <BranchName>git statusでOn branch 変更したブランチ名と表記されていればOK
git branchでも確認できます他の人が git push したリポジトリデータを自分のリポジトリに反映させる場合
git pullで反映される
- master ブランチ以外のデータを反映させたい場合は
git pull origin <BranchName>
- 投稿日:2019-10-28T00:28:29+09:00
git hooksを使って、確認しながらコミットする話。
はじめに
gitを使って開発しているときに、commitやpushをしてしまったあとに、「また、var_dumpを残してしまった」, 「DEBUGコメントが残ってしまってる...」,「なんだこの差分は!」 となることが結構あった。そこで、git commitする前に、var_dumpやDEBUGコメントが残っていないかを確認する仕組みがあれば良いと考え、git hooksを用いて実装することにした。また、pushする前にも、余分な差分が入っていないか親ブランチとのdiffをチェックができ、もし問題があったらpushを中断することも試みた。
GitHooks
詳しくはgitのドキュメントを見ていただきたいが、簡単に説明すると、gitでpushしたり、commitした時などに、あるスクリプトを実行することができる仕組みのことである。
.git/hooksの中に決められた名前のスクリプトを用意しておくと、実行することができる。
たとえば、.git/hooks/pre-commitというファイルを用意しておくと、commitメッセージが入力される前にpre-commitに書かれているスクリプトを実行することができる。
pre-commitフックに関するドキュメントの説明では、これは、いまからコミットされるスナップショットを検査したり、何かし忘れた事がないか確認したり、テストが実行できるか確認したり、何かしらコードを検査する目的で使用されます。
とあり、commit前の確認に利用することができる。その他にも、gitコマンドを利用する側(クライアント)だけでなく、gitでpushされる先(サーバーサイド)で役に立つHooksもあるようだが、ここでは割愛する。
今回は、
1. gitでcommitする前に、var_dumpや//DEBUGの文字列がcommitするファイルに含まれていないかを確認する
2. 1で、もし含まれていたら、ユーザーへ確認の上、該当の行を削除する
3. commit メッセージを入力する画面に入る前に、処理を続行するか確認する
4. pushを実行する前に、現在のbranch名と親のbranch名を表示して確認する
5. 4の後に、親branchとの差分をdiffで表示してから、pushを続行するか確認するの処理をそれぞれ、commitもしくはpushの際に行う。
pre-commitで、commit前の確認と余計なDEBUG文の削除を行う
まず、commit前に確認を行うため、hooks/pre-commitに処理を記述していく。ここで、commit対象のファイルに問題がないかをチェックするためには、git addした(ステージングされた)ファイルを特定する必要がある。ここでは、以下のように、素直にgit statusの結果を"modified"と"new file"でgrepして取得している。
# addされたファイル一覧を取得 files=`git status|grep -e "modified" -e "new file"|sed "s/new file:\(.*\)/\1/g"|sed "s/modified:\(.*\)/\1/g"|cut -f 2`次に各ファイル(ここでは*.phpに限定している)に対して、grepして、var_dumpや//DEBUGが含まれていないかを確認した。
もし含まれていたら、ユーザーに、[warn] delete, continue? [y/N]と削除してもいいか尋ねるようにしている。ここで、標準入力からyが入力されたら、sedのコマンドで、その行を削除する仕組みである。このとき、削除前のファイルがcommitされてしまうので、再度addしておく必要がある。もしy以外のものが入力されたら、[error] delete abort.と表示して処理を中断する。その後、同じような仕組みで、[warn] commit, continue? [y/N]と表示され、commitを中断したいときは中断することができるようになっている。以下に実装を載せておく。hooks/pre-commit# addされたファイル一覧を取得 files=`git status|grep -e "modified" -e "new file"|sed "s/new file:\(.*\)/\1/g"|sed "s/modified:\(.*\)/\1/g"|cut -f 2` # それぞれのファイルをscanして、var_dump, //DEBUGを含む行を削除して、addし直してからcommitする for file in $files do echo name:$file; # PHPファイルのみ対象とする if [ ${file##*.}="php" ]; then echo check... var_dump, //DEBUG in $file; result=`less $file | grep -e "var_dump" -e "//DEBUG"`; if [ -z $result ]; then echo "OK\n"; else echo $result; echo '[warn] delete, continue? [y/N]' exec < /dev/tty read answer case $answer in 'y' | 'yes') sed -i "/var_dump/d" $file; sed -i "/\/\/DEBUG/d;" $file;; * ) echo '[error] delete abort.';exit 1; esac git add $file; echo $file; fi fi done echo '[warn] commit, continue? [y/N]'; exec < /dev/tty read answer case $answer in 'y' | 'yes') echo 'OK.';exit 0;; * ) echo '[error] commit abort.'; exit 1;; esacpre-pushで、現在のbranch名と親ブランチとの差分を表示してからpushできるようにする
ここでは、リモートリポジトリへのpush前に、現在のbranch名と、その親ブランチ名を取得して、git diffを表示した。そのあとは、前述したcheck機構でpushの中断を可能にした。下に示したようにgit branchの*がついているbranch名を取得することで現在のbranchを取得している。他にも方法はありそうだが......
一方で、親ブランチ名の取得は、git show-branch --current で現在のbranchを含んで表示させ、一番上のbranch名を取得している。この親branch名の取得は、ここを参考にしている。
以下にコード全体を示しておく。hooks/pre-push# 親branchと現在のbranchとの差分を表示 current_branch=`git branch|grep "*"|sed "s/* //g"`; parent_branch=`git show-branch --current |head -n 1| sed "s/\[ \(.*\) \]/\1/g"|cut -d" " -f 2| sed "s/\[\(.*\)\]/\1/g"`; git diff $parent_branch $current_branch; # 現在のbranchのcommit logをonelineで表示 git log $current_branch --oneline; # push確認 echo 'parent branch is '$parent_branch; echo 'current branch is '$current_branch; echo '[warn] push to remote, continue? [y/N]' exec < /dev/tty read answer case $answer in 'y' | 'yes') echo '[info] OK. push start.';; * ) echo '[error] push failed.';exit 1;; esac exit 0設定
ホームディレクトリ直下に.git_template/hooksというディレクトリを作成し、その中に今回作成したHookのスクリプトを保存する。同じくホームディレクトリ直下にある.gitconfigにtemplatedirとして(以下のファイル参照)登録すれば、次回から、git initするたびに、自動的にhooksディレクトリ下のファイルがそれぞれの.git/hooks配下にコピーされて有効になるはずだ。また、現在のlocal repositoryに対して有効にするには、git initをもう一度おこなうだけでよい。この記事によれば、
既存のプロジェクトの場合は.git_template/hooksの内容をそれぞれ反映させる必要があります。
再度git initを実行するとhooksが再インストールされます。ただし、すでに同ファイル名のものが存在する場合は上書きはされないようなので、.git/hooks/のファイルを削除してからgit initする必要があるらしい。
少し前のことなのでうろ覚えだが、こちらを参考に初期設定を行なったと思うので参考にするといいと思う。.gitconfig[init] templatedir = ~/.git_templateまとめ
git hooksを用いて、確認しながらcommitしてみた。branch情報の取得だったり、ubuntuで書いたsedを含むコードがmacではうまく動かなかったり(ここを参考に修正した)で、少し苦労したが、なんとかなってよかった。






