gitでfailed to pushとなったとき

To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again. See the ‘Note about
fast-forwards’ section of ‘git push –help’ for details.

対応方法 fetchしてmergeする
[vagrant@localhost laravel]$ git fetch
Password:
remote: Enumerating objects: 10, done.
remote: Counting objects: 100% (10/10), done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 8 (delta 2), reused 5 (delta 1), pack-reused 0
Unpacking objects: 100% (8/8), done.
From https://github.com/hoge/hogehoge
e66ad76..bd912e1 master -> origin/master
[vagrant@localhost laravel]$ git merge origin/master
Merge made by recursive.
README.md | 2 +-
appspec.yml | 5 ++++
readme.md | 67 +———————————————————
3 files changed, 8 insertions(+), 66 deletions(-)
create mode 100644 appspec.yml

これで、git pushできるようになる。
なるほど!!

githubからec2へデプロイ

デプロイとは、ソフトウェアの分野で、開発したソフトウェアを利用できるように実際の運用環境に展開すること。

IAMからロールへ行く
CodeDeployを選択する

ec2 インスタンス
# CodeDeployエージェント
wget https://aws-codedeploy-ap-northeast-1.s3.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto

# 実行
sudo service codedeploy-agent start

appspec.ymlを編集して、githubにpush

version: 0.0
os: linux
files:
  - source: /
    destination: /home/ec2-user/dev/

code deployからアプリケーションの作成
deployする

deploy長いな。。

git cloneからpull requestまでやってみよう

git cloneする。
[vagrant@localhost local]$ git clone https://github.com/githubix/article.git
Initialized empty Git repository in /home/vagrant/local/article/.git/
remote: Enumerating objects: 141, done.
remote: Counting objects: 100% (141/141), done.
remote: Compressing objects: 100% (109/109), done.
remote: Total 141 (delta 12), reused 141 (delta 12), pack-reused 0
Receiving objects: 100% (141/141), 197.50 KiB | 72 KiB/s, done.
Resolving deltas: 100% (12/12), done.
[vagrant@localhost local]$ ls
article
[vagrant@localhost local]$ cd article
[vagrant@localhost article]$ ls
README.md bootstrap config phpunit.xml resources storage
app composer.json database public routes tests
artisan composer.lock package.json readme.md server.php webpack.mix.js

git checkout -b 
git checkout コマンドに、パラメータでブランチ名を指定すれば、そのブランチに切り替える事ができる。
ブランチの作成と新しいブランチへの切り替えを同時に行うには、git checkout コマンドに -b スイッチをつけて実行
branch .. simply a lightweight movable pointer to one of commits.

git add ファイルやディレクトリをインデックスに登録.

developという新しいブランチを切る
[vagrant@localhost article]$ git checkout -b develop
Switched to a new branch ‘develop’

readmeを編集する。
README.md

# article
second changed

indexとの差異を見る。
[vagrant@localhost article]$ git diff
diff –git a/readme.md b/readme.md
index b0affd5..e5dca01 100644
— a/readme.md
+++ b/readme.md
@@ -1,65 +1,2 @@

[vagrant@localhost article]$ git push origin develop
Password:
error: The requested URL returned error: 403 Forbidden while accessing https://hpscript@github.com/githubix/article.git/info/refs

あれ、手順が違うか。。。forkしてないからか。。

forkして、pushする。
[vagrant@localhost article]$ git push origin develop
Password:
Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 289 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
remote:
remote: Create a pull request for ‘develop’ on GitHub by visiting:
remote: https://github.com/hpscript/article/pull/new/develop
remote:
To https://hpscript@github.com/hpscript/article.git
* [new branch] develop -> develop

おおおおお、compare&prがでました。
なんかわかってきた~

pull requestのメッセージが届く。
なるほどなるほど。

margeする。

変更が保存されました。なるほど~ 変更内容をgithubから自動的にawsにデプロイするにはどうすればいいんだ?
要確認ですな。

githubでPR(pull request)をしよう2

新しいアカウントを作成します。

続いて、vagrantで新しいアカウントの作業者用のフォルダ、localを作成します。
[vagrant@localhost ~]$ mkdir local
[vagrant@localhost ~]$ cd local

ここで、git clone, add, commit, push, pullrequestをしたいとおもいます。

ところで、git commit -m の「-m」は…
「-m」オプションを指定することで、エディターを起動することなく、コミットメッセージも指定してコミットすることができる。

なるほど。
git remote add origin hogehoge
以下で、originのremoteレポジトリを指すようになる。なるほど、remoteだからね。

git push -u origin master でpushする。
ところで、git push -uの-uとは?
「-u」オプションをつければ、同名の上流ブランチを設定できる。上述の通り、git push が成功すれば、その後はパラメータを省略して push できるようになる。

[vagrant@localhost laravel]$ git push
Password:
Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 274 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://githubix@github.com/githubix/article.git
e71a232..e66ad76 master -> master

なるほど、git pushだけでいけるようになりました。

では、新しいアカウントでgit cloneして、編集、add, commit, push、prまでやりたいと思います。

githubでプルリクをする

1.Github上からローカルにファイルをclone(保存)する
2.GithubへPullRequest用のBranchをローカルで作成する
3.データを更新編集し、ローカルに add, commitする
4.Githubにpushする
5.GithubにPullRequestする

cloneではなく、githubにリポジトリを作成し、git initから、add commit

Branch…1つのレポジトリに複数のBranchを作ることで同時に複数のバージョンでレポジトリを管理することができるようになる

では、capistranoのプルリクの履歴を見てみましょう
https://github.com/capistrano/capistrano/pulls

[Doc] Add Capistrano::LazyCleanup to 3rd Party Plugin
https://github.com/capistrano/capistrano/pull/2001
コメントが記載されています。

This branch has no conflicts with the base branch
マージされたってことかな。

[CI] Test against Ruby 2.5
https://github.com/capistrano/capistrano/pull/1973
All checks have failed
これは、プルリクを拒否したってことか?

レビューしてPRをacceptするか、not acceptするかコメントしてますね。
On further review, I’ve decided not to accept this PR. There is a simple workaround, which is to add this to your deploy.rb if you’d like to disable the deleting of source on rollback:

なるほど、こういう風に複数人で開発するのか。。
なるほどねー

ということは、githubのアカウントがもう一つ必要だな。。

git hubのrepositoriesにpushしていこう

まずは create repository

vagrantのlaravelのディレクトリに移動します。
[vagrant@localhost agile]$ cd laravel
[vagrant@localhost laravel]$ ls
app composer.json database public routes tests
artisan composer.lock package.json readme.md server.php vendor
bootstrap config phpunit.xml resources storage webpack.mix.js

githubのインストラクションに沿って操作していきます。
[vagrant@localhost laravel]$ echo “# article” >> README.md

git initします。
[vagrant@localhost laravel]$ git init
Initialized empty Git repository in /home/vagrant/agile/laravel/.git/
[vagrant@localhost laravel]$ ls
README.md composer.json package.json resources tests
app composer.lock phpunit.xml routes vendor
artisan config public server.php webpack.mix.js
bootstrap database readme.md storage
[vagrant@localhost laravel]$ git add README.md

Gitの操作の基本中の基本、変更したファイルを「addしてcommit」
つまり、Readme.mdをaddしてcommitするという訳。

続いてgit commitします。
[vagrant@localhost laravel]$ git commit -m “first commit”
[master (root-commit) b32fcda] first commit
Committer: vagrant
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:

git config –global user.name “Your Name”
git config –global user.email you@example.com

If the identity used for this commit is wrong, you can fix it with:

git commit –amend –author=’Your Name

1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 README.md

[vagrant@localhost laravel]$ git remote add origin https://github.com/githubix/article.git
[vagrant@localhost laravel]$ git push -u origin master
error: The requested URL returned error: 403 Forbidden while accessing https://github.com/githubix/article.git/info/refs

ぬ? 403 Forbidden?
usernameを入れないと駄目のよう。
git pushします。
[vagrant@localhost laravel]$ git remote set-url origin https://githubix@github.com/githubix/article.git
[vagrant@localhost laravel]$ git push -u origin master
Password:
Counting objects: 3, done.
Writing objects: 100% (3/3), 221 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
remote:
remote: Create a pull request for ‘master’ on GitHub by visiting:
remote: https://github.com/githubix/article/pull/new/master
remote:
To https://githubix@github.com/githubix/article.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.

あれ、ファイルが、readme.mdだけ更新されとる。。
Untracked files:になってるからですな。

commitしてpushする。

[vagrant@localhost laravel]$ git commit -m “third commit”
[vagrant@localhost laravel]$ git add .
[vagrant@localhost laravel]$ git status

[vagrant@localhost laravel]$ git push -u origin master
Password:
Counting objects: 137, done.
Compressing objects: 100% (118/118), done.
Writing objects: 100% (135/135), 197.10 KiB, done.
Total 135 (delta 11), reused 0 (delta 0)
remote: Resolving deltas: 100% (11/11), done.
To https://githubix@github.com/githubix/article.git
b32fcda..e71a232 master -> master
Branch master set up to track remote branch master from origin.

なるほど、入りました。よし、ここはOKとしよう。

次は、awsのroute 53の複数設定。
Apacheでのマルチドメインの設定はバーチャルホストの設定だったような気がするが。。

その前にプルリクをやってみたい。

プルリク

[vagrant@localhost dev]$ git init
Initialized empty Git repository in /home/vagrant/dev/.git/
[vagrant@localhost dev]$ git add .
[vagrant@localhost dev]$ git commit -m “first commit”
[master (root-commit) 2b3c0b9] first commit
2 files changed, 8 insertions(+)
create mode 100644 .htaccess
create mode 100644 index.php
[vagrant@localhost dev]$ git remote add origin https://github.com/hoge/hoge.git

[vagrant@localhost dev]$ git push -u origin master
Password for ‘https://hoge@github.com’:
Counting objects: 4, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 420 bytes | 0 bytes/s, done.
Total 4 (delta 0), reused 0 (delta 0)
remote:
remote: Create a pull request for ‘master’ on GitHub by visiting:
remote: https://github.com/hoge/hoge/pull/new/master
remote:
To https://github.com/hoge/hoge.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.

プルリクとは?
開発者のローカルリポジトリでの変更を他の開発者に通知する機能です。 プルリクエストは次のような機能を提供します。 機能追加や改修など、作業内容をレビュー・マージ担当者やその他関係者に通知します。

github issuesを使ってみる

まず、githubのレポジトリに行きます。

コメントを書きます。

タスクができます。なるほど!

なお、Githubの無料版ではリポジトリが公開状態となっており、プライベートリポジトリを使いたい場合は、有料版に移行する必要がある。

githubおさらい

共有リポジトリ

> GitHub が、プロジェクトに関連するファイルをまとめて保管する単位
> これをチーム内で共有して、作業目的ごとにブランチ (Branch) と呼ばれるコピーを作り、適当なタイミングでブランチに対して行われた更新をオリジナル (Master Branch) に反映するというのが、GitHub を使った共同開発の 1 つのパターン

リポジトリのフォーク
> 共有されていないリポジトリに対して書き込むことはできないが、フォークしたリポジトリは自分の所有物なので、自由に更新ができる。

フォークは GitHub サーバー上でリポジトリの複製を作成する行為
クローンは、サーバー上のリポジトリを、クライアント環境に複製する行為

forkをすると、リポジトリを持ってこれるってわけですね。

クローンしたリポジトリ内で開発作業を行う
クローンで行った更新を、フォークしたリポジトリにコミット
フォークしたリポジトリからオリジナルのリポジトリにプルリクエスト (Pull Request) を送信

mac terminalからgit clone

quick time playerで撮ってみた。しかしyoutubeの収益化って4000時間、チャンネル登録1000人が条件なんだ。1分の動画なら、60 * 4000 = 24万回再生。どうなんだろう、そこそこハードル高そうに見えるが。