For Want Of A Better Word

【git】gitの動きが不安すぎるのでテストする。(ブランチ切る場合、切らない場合)

      2016/04/15

リモートリポジトリはgithubに作成。

テストしたいこと

[テストしたいこと]

<ブランチなし運用>
①開発環境の修正を本番側リポジトリに反映させる。(本番側修正なし)
②本番側での修正を開発環境リポジトリに反映させる。
③①で同一のファイルを編集している場合。(同一行の場合も)

00.テストの準備

 

リモートリポジトリの作成

①リポジトリをリモートサーバーに作成(githubに作成)
・create new Repository
・Initialize…をチェック。(折角なのでadd git ignoreでcakeを設定する。)
・リポジトリ画面が作成される。URIを取っておく。

本番の作成

①ディレクトリの作成

 

②prodで初期化とリモートリポジトリ追加を作成。

【githubメモ】

パスワード認証の場合、リポジトリURLにユーザー名を加える必要がある。
後で実行する「git clone」も同様に、名前入りのリポジトリURI指定で。
【参考URL】http://qiita.com/ritukiii/items/0d14df8f0253ca223373

③ファイルを作成し コミット、リモートサーバーへのプッシュを行う。

 

※github作成時のコミットが既にあるので、最初にfetch maergeしないとリジェクトされる。
git fetch (リモートの変更を取ってきて)
git merge origin/master (マージする)

本番OK

開発環境の作成

①開発環境にリモートリポジトリのクローンを作成

 

本コマンドを実行した場所にプロジェクト名フォルダ/ファイルと生成されるので、

今回のようにdevを作りたいときは、prodと同じ場所でgit clone して、フォルダ名を変更するのが良い。

 

② ファイルを足してコミット

 

でwarning発生

 

git logを見るとコミット自体はされている様子。
pushを実行してみる。

 

OK。リモートリポジトリに反映される。よしよし。

 

これで本番相当と、開発環境相当のローカルリポジトリが作成できた。

 

テスト1(ブランチなし)

①開発環境の修正を本番側リポジトリに反映させる。

(1)開発環境でファイルを作成し、リモートまでコミット・プッシュ

リモートリポジトリ(git_hub)側にも反映されていることを確認。

(2)本番環境でリモートリポジトリにプッシュされたファイルを取得する。

これで最新分を取得できた。

※リポジトリの修正が入っていないファイルは更新されない。

ローカルの修正(addもしてない奴)を1回全部なかったことにするには、

「git reset  –hard」を使う。

 

 TODO:1ファイルずつ指定ファイル反映させたい場合。。はどうすんだろ

 

ここで更にテスト。本番に反映させたけど戻したい。。

「開発環境のコミットを本番にも組み込んだけど、不具合があった。前の状態に戻したい。。」

という場合

chekoutで指定コミットバージョンに戻す。

すっかり戻りました。

しかし、ここで「git branch」とすると、masterじゃ無くて「no branch」という状態になっている。

masterをチェックアウトすると、fetch mergeした直後の状態に戻り、この「no branch」は消える。

とりあえず、特定のコミットのバージョンにもどったら、トラブルは避けられるので、良しとして…最新に戻すには…?

・また開発環境でおかしい所を修正し、push。

・本番でブランチをmasterに戻し、fetch + mergeという感じ。。?

  ※ここはなんか、もっと良い手順がありそうな気がする。

次のテスト

②本番側での修正を開発環境リポジトリに反映させる。

・本番側でファイルが更新されて、それをリモートリポジトリに取り込みたい。

・開発環境のメンテが忘れられて、1回本番の正の状態に戻したい。

ここまでやっていればなんか分かる。というか、本稿が逆なだけで、やることは同じ。

(1)本番側でgit add , commit ,pushを行い。

(2)開発環境側でgit fetch , git merge origin/masterを行えばよい。と

こういうときに、念のため、ローカルのファイルも保存しておきたいという気持ちもある。これはブランチを切ってコミットすればよいだろうか。

先の本番の反映に関しても、念のための現状を保存して起きたければ、ローカルだけでもブランチを作成しておけばよいと

(1)開発でブランチの作成

(2)本番でプッシュ・開発でmasterブランチで、fetch,merge

 

(3)戻したいときは先に作ったブランチをチェックアウトする。

(4)動作が問題なければ、ブランチを削除するー。

(5)更新対象じゃないファイルは残る。。(環境をきれいに刷るにはどうしたらよいべかな…)

③同一のファイルを編集している場合(TODO:もうちょっと)

開発環境で修正したファイルを反映させようとしたら、本番でも同じファイルが変わってしまっている場合…

(1)同一行に変更がない場合は、mergeで対象ファイルが更新される。

(2)同一行に変更がある場合は下記のエラーがでた。

commitかstashしろということみたい。

どうすればいいんだ?

①git stash

これでよいみたい…??

 

①本番側ローカルファイルの修正を開発環境側に取り込んで再度コミットする。
(1)開発側に、最終的に本番に反映させたいソースを作成。(マージしたもの)
(2)開発commit push 、
(3) 本番側は直前のコミットに戻す。

(4)本番fetch merge

これでいいんだろうか。

TODO:ここは再確認。

もう一つ。このとき、衝突していないファイルはどうなる?

一つ衝突していれば、他も反映されないので、とりあえず安心。

 

 

 

 

 

次はブランチありの場合の操作について。。。

テスト(ブランチあり)

①開発環境でブランチを作成し開発。それを本番(master)まで反映させる。

・開発環境は「issue_1」ブランチを作成
・本番側はmasterブランチを利用。

という状況で、開発から本番までの流れを確認。

(1)ブランチの作成 <開発環境>

(2)ブランチで開発してコミット、push。githubで見られるようになる。

 

(3)ブランチの内容をmasterにマージする。<開発側>

 

(4)あとは、masterのpushと、本番側でのfetchでOK。

※(3)開発側でmergeしないで、本番側でmergeでも良いのかな?⇒ブランチをチェックアウトしないとだめなのでフローもなんか変になりそうなのでやめ。

メモ:一人開発だとしても、開発環境でコンフリクトが発見できるし、ブランチを作成したほうが良い気がする。

 

②本番側での修正を開発環境リポジトリに反映させる。

ブランチなしと同じパターンなので、省略

 

③同一のファイルを編集している場合。

・ブランチで修正したファイルがマスターで変更されている場合。(基本はmasterで操作している時と同じくさいな。)

やっぱり、下記のエラーが出る。

下記をやって取り込みOK。

※stashはstashで奥が深そう。。。

 

————————————————

所感

もっと、良い使い方とかあるんだろうけど、なんとなく、バージョン管理して開発ということは出来そうな気がしてきた。。

あとは、その場その場でかな。

 

 

 

 

 - git

  関連記事

no image
【git】よく使うコマンドメモ

Contents1 初期構築2 状態の確認3 ファイルの更新4 ブランチ関連5 …

no image
github使い方確認

参考サイト:http://d.hatena.ne.jp/keita_yamagu …

githubを使う

githubとは GitHub(ギットハブ)はソフトウェア開発プロジェクトのため …

no image
【git】gitを使っての運用フローメモ

■gitの運用フロー http://kinug.com/wiki/Tips/Gi …