GITでRuby On Railsアプリのローカルリポジトリとリモートリポジトリ(origin)を作ってプッシュ

バージョン管理にはGITが便利です。そういえば最近GITはGoogleの傘下にはいりましたね。

GITの流れ

GITとはバージョン管理システム(Version Control System:VCS)です。なぜバージョンを管理するかというと、複数人で一つのアプリを作っている際に同じ箇所を修正したりする時にどちらを優先するかを明確に選ばなければならないし、なにか問題がおこった時にバージョンをもどしてとりあえずエラーを解消したりしないといけないし、そもそもエラーが起きないようにしないといけないからです。

GITの流れは次のようになります。

  1. ブランチを切る
  2. ローカル(自分のPC上)でファイルを編集
  3. git add してローカルのステージングエリア(インデックスとも言う)にあげる。
  4. git commitしてローカルのリポジトリ(入れ物)に入れる
  5. git pushしてリモートリポジトリ(みんなで共有している入れ物。名前はだいたいorigin)に入れる

GITの設定

まずはgitの設定をしてやります。

$git config –global user.name “your-name”

$git config –global user.email “youremail@gmail.com”

$git config –global color.ui true

これで名前とメールアドレスが設定され、gitがカラフルになって見やすくなりました。

次の確認でgitの設定を確認できます。

$git config -l

user.name=your-name

user.email=youremail@gmail.com

color.ui=true

ローカルリポジトリを作成

まず作業するディレクトリにカレントディレクトリを移動させて、

$ git init

というコマンドを実行すると、ローカルリポジトリが作成されます。

~/Desktop/rails application/self-support $git init

Reinitialized existing Git repository in /Users/your-name/Desktop/rails application/self-support/.git/

あれれ、作ってないのにできてる。Rails5系だと初めからつくられるのだろうか。まあいいや。.gitがローカルリポジトリで、git commitした変更内容がたまっていくというわけです。

つぎのコマンドを入力すると、ブランチが一覧表示されます。

$git branch

* master

まだmasterしかありません。これが大元になるブランチです。ここからあたらしくブランチを切っていきます。

$git checkout -b feature-1 master

これはmasterブランチから新しくブランチを切ってきて(つまりmasterブランチの内容をそのまんまコピーしてきて)feature-1という名前にします、という意味です。-b をつけると、新しいブランチを切ってくると同時にそのブランチに入ることができます。

scaffoldでさくっと全部作れる

railsにはコントローラ、ビュー、モデル、マイグレーション、ルーティング、アセット、テスト、ヘルパーの全てを作ってくれる機能があります。そのコマンドがこちら。

$bundle exec rails g scaffold [つけたい名前]

自分の場合はつけたい名前をhomeにしました。できたdb/migration配下のファイルに、homesテーブルに作成したいカラムを設定してやってbundle exec rake db:migrateします。ここではなにもカラムはつくりません。

config/routes.rbに

get ‘/’ => ‘homes#index’

の一行を追加。こうすることで、localhost:3000/にいくとhomesコントローラのindexアクションを実行して、views/homes/index.html.erbを表示させます。

localhost:3000にアクセスしてみましょう。すると

このように変わりましたね。

gitでローカルリポジトリにあげる

ファイルの変更内容を表示させるGITコマンドがあります。それがこちら。

$git status

On branch feature-1

Changes not staged for commit:

  (use “git add <file>…” to update what will be committed)

  (use “git checkout — <file>…” to discard changes in working directory)

modified:   config/routes.rb

modified:   db/schema.rb

Untracked files:

  (use “git add <file>…” to include in what will be committed)

app/assets/javascripts/homes.coffee

app/assets/stylesheets/homes.scss

app/assets/stylesheets/scaffolds.scss

app/controllers/homes_controller.rb

app/helpers/homes_helper.rb

app/models/home.rb

app/views/homes/

db/migrate/20180704145604_create_homes.rb

test/controllers/homes_controller_test.rb

test/fixtures/homes.yml

test/models/home_test.rb

test/system/homes_test.rb

no changes added to commit (use “git add” and/or “git commit -a”)

modifiedはファイルに修正があったということで、Untracked filesはもともとなかったファイルということです。

この内容をローカルのステージングエリアにあげるGITコマンドがこちら。

$git add .

最後の’ . ’は、変更内容の全てをステージングエリアに反映させますよ、という意味です。

再度git statusを実行すると、赤色から緑色になって内容が一つにまとまっています。

この後、ローカルリポジトリにあげるために次のコマンドを実行します。

$ git commit

するとvimが立ち上がるので、Aキーを押して変更した内容を一言でまとめます。自分の場合は「scaffoldでhomeを作成しました。」という内容です。そしてescキーを押して半角で” : “を押し、wqと入力してenterを押せば一言が登録されます。その内容をあとから確認するコマンドは、

$git log

です。

これでローカルリポジトリに変更内容がはいりました。

リモートリポジトリを作る方法

このあと、もしリモートリポジトリがあれば、

$git push origin feature-1

というGITコマンドを実行することで、feature-1上で変更した内容をリモートにあげることができますが、まだありません。ということで作ります。

今回はリモートリポジトリをローカル(自分のPC)に作っていきます。

まず自分のPCがリモート接続できるように設定します。[アップルメニュー]→[システム環境設定]→[共有]→’リモートログイン’にチェック。これでOK。

この時のssh右のユーザー名と@右のサーバー名が後から必要になります。

$mkdir gitrepository

$cd git repository

$mkdir self-support.git

$cd self-support.git

次のGITコマンドでリモートリポジトリをつくります。

$git init –bare –share

Initialized empty shared Git repository in /Users/ohmachiseiya/Desktop/gitrepository/self-support.git/

–bareは空のリポジトリをつくることを指定していて、 –shareは複数人で使うレポジトリであることを指定しています。では一旦カレントディレクトリをself-supportにもどして、リモートリポジトリにプッシュしてみましょう。

次にリモートリポジトリに名前をつけてsshの設定をするコマンドを実行します。

$git remote add origin ssh://ユーザー名@サーバー名:Port名/Users/ohmachiseiya/Desktop/gitrepository/self-support.git

Port名はネットワークユーティリティ→Postsscan→IPアドレスを入れてScan→

Open TCP Port: の右の番号がPort番号です。

リモートリポジトリにプッシュする

これでリモートリポジトリの設定は完了しましたので、プッシュしていきます。いったんアプリにカレントディレクトリをもどしてfeature-1をプッシュします。

$cd /Users/ohmachiseiya/Desktop/rails-application/self-support

$git push origin feature-1

The authenticity of host ‘192.168.〜〜 (192.168.〜〜)’ can’t be established.
ECDSA key fingerprint is SHA256:〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘192.168.〜〜’ (ECDSA) to the list of known hosts.
Password:
Counting objects: 130, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (113/113), done.
Writing objects: 100% (130/130), 27.84 KiB | 1.39 MiB/s, done.
Total 130 (delta 13), reused 0 (delta 0)
remote: Resolving deltas: 100% (13/13), done.
To ssh://192.168.〜〜/Users/ohmachiseiya/Desktop/gitrepository/self-support.git
* [new branch] feature-1 -> feature-1

これでリモートリポジトリにローカルリポジトリの変更内容をあげることができました。確認するために次のGITコマンドを実行します。

$git branch -r

  origin/feature-1

これでリモートリポジトリのブランチを確認できます。まだorigin/masterがないので、

$git checkout master

Switched to branch ‘master’

$git push origin master

Password:

Total 0 (delta 0), reused 0 (delta 0)

To ssh://192.168.0.13:22/Users/ohmachiseiya/Desktop/gitrepository/self-support.git

* [new branch]      master -> master

このようにしてmasterもつくります。

$git branch -r

  origin/feature-1

  origin/master

できました。

他のPCから使う時には、

git clone ssh://ユーザー名@サーバー名/Users/your-name/Desktop/gitrepository/self-support.git

これを行えばOKです。

今回はこれで終わります。次回はsidekiqによる実装です。