Git tag(タグ)って何?

ねーねー、これGit Tagらしいよ。

あー知ってる、知ってる、Git tagね。(やべ、全く知らねー。。)

ということでGit tagを学びたいと思います。

まず、gitの公式を見ます。
Git タグ
公式ページの見出しを拾うと、色々な機能や種類があることがわかります。
タグの一覧表示、タグの作成、注釈付きのタグ、署名付きのタグ、軽量版のタグ、タグの検証、後からのタグ付け、タグの共有

まず、Githubのレポジトリにファイルを作成します。適当にtest.phpとしておきます。

vagrantにgit cloneします。

[vagrant@localhost test]$ git clone https://github.com/githubix/test.git
Initialized empty Git repository in /home/vagrant/local/test/test/.git/
remote: Enumerating objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 3
Unpacking objects: 100% (3/3), done.

1.git tagの一覧表示
コマンドラインでgit tagと打ちます。何も表示されません。タグはついていない状態です。

[vagrant@localhost test]$ git tag

git cloneしたファイルを適当に編集します。

echo "this is test<br>";
echo "addign git tag!";

2.git add .
[vagrant@localhost test]$ git add .

3.git commit -m “comment”
git commit します。
[vagrant@localhost test]$ git commit -m “tag commit”
[master a74bdba] tag 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, 2 insertions(+), 1 deletions(-)

4.git tag -a でタグ作成
git tag -a tagname -m “comment”でタグを生成します。
[vagrant@localhost test]$ git tag -a gittag -m “first tag”

5.git tagでタグ一覧表示
タグが生成されていることがわかります。
[vagrant@localhost test]$ git tag
gittag

6.リポジトリへpush
git remote set-url origin hogehogeとしてから、git pushします。
[vagrant@localhost test]$ git remote set-url origin https://githubix@github.com/githubix/test.git
[vagrant@localhost test]$ git push -u origin master
Password:
Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 291 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://githubix@github.com/githubix/test.git
e44f89c..a74bdba master -> master
Branch master set up to track remote branch master from origin.

7.tag も git push
[vagrant@localhost test]$ git push origin gittag
Password:
Counting objects: 1, done.
Writing objects: 100% (1/1), 161 bytes, done.
Total 1 (delta 0), reused 0 (delta 0)
To https://githubix@github.com/githubix/test.git
* [new tag] gittag -> gittag

8.githubで確認
tagもpushされているのがわかります。

お疲れ様でしたー

git checkout

git initします。
[vagrant@localhost app]$ git init
Initialized empty Git repository in /home/vagrant/local/app/.git/

[vagrant@localhost app]$ vi sample.txt
[vagrant@localhost app]$ cat sample.txt
Hello Git!

[vagrant@localhost app]$ git add sample.txt
[vagrant@localhost app]$ git commit -m “git checkout”
[master (root-commit) c4b426e] git checkout
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 sample.txt

git branchを作成する。
[vagrant@localhost app]$ git branch branch1
[vagrant@localhost app]$ git branch branch2
[vagrant@localhost app]$ git branch
branch1
branch2
* master

[vagrant@localhost app]$ git checkout branch1
Switched to branch ‘branch1’
[vagrant@localhost app]$ git branch
* branch1
branch2
master
なるほど、checkoutはbranchの切り替えです。

[vagrant@localhost app]$ git checkout branch2
Switched to branch ‘branch2’
[vagrant@localhost app]$ cat sample.txt
Hello Git!

なるほど、なるほど。
最近なるほどが異常に増えた。

Github enterprise


45日freetrialを使ってみる。

Github Enterpriseとは
「GitHub Enterprise」は大手企業・大規模組織内でセキュアな環境下でのコラボレーティブコーディングを実現

なるほど~ ここは少しづつやってきましょう

gitのインストール

[root@localhost ~]# git –version
git version 1.8.3.1

gitを入れます。

yum remove git

# gitに必要なライブラリ
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker

gitの最新版は?
https://mirrors.edge.kernel.org/pub/software/scm/git/
2018/10/5 2.19.1 これか!!
git-2.19.1.tar.gz 05-Oct-2018 16:56 7M

ミラーサイトを参考にwgetしてみる。 おお、俺、だんだん高度なことやってる? (やってる気分)

wget https://www.kernel.org/pub/software/scm/git/git-2.19.1.tar.gz 
ls

tar zxvf git-2.19.1.tar.gz
cd git-2.19.1

#ここからインストール
./configure --prefix=/usr/local
echo $?
make
echo $?
make install
git --version
git version 2.16.5

あれ、2.19入れたと思ったけど、2.16.5だ。まあいいか。

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でのマルチドメインの設定はバーチャルホストの設定だったような気がするが。。

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