1. Git運用ルール
サイト管理のためのGit運用フローを作ってみました。
1.1. 目的
複数人で効率的に共同作業ができるように最低限の操作を覚えてほしい。
+ 最低限のルールを決めたい。
これを機に運用ルールを設けることを意識し、運用効率をあげたい。納品ファイルの履歴を管理したい。
サーバにあるソースが最新なんて管理とは言わないよ。
1.2. 最低限の操作を覚える
↓をひと通り演習。
Git をはじめからていねいに
まずは、基本的な操作が身につけましょう。
簡単だからとGUIクライアントソフトを使う前に、まずコマンド操作で慣れていけばGUIで操作した場合、ミスが減らせるかと思います。
1.3. 最低限の運用フロー
ブランチ名 | 説明 |
---|---|
master |
メイン |
release |
プレビュー・納品用 |
<開発者名>/<開発名> |
開発用 |
-
master
とrelease
ブランチを作成。 - 何か作業する時は必ず
master
ブランチから<開発者名>/<開発名>
という名前でブランチを切りそちらで作業する。作業完了後masterへマージ。 - masterへマージした後
<開発者名>/<開発名>
ブランチは削除する。再作業時に都度同名ブランチを作るようにすること。 -
master
→<開発者名>/<開発名>
ブランチへのマージは適宜おこなう。 - 作業がある程度終わりプレビュー、納品を行う段階に入ったら
master
→release
へマージする。 - 納品したリビジョンは
release
ブランチよりTagを付ける。release/[YYYYMMDD(公開年月日)]/v[バージョン番号]
- 一度納品データが完成しTagを付けた後、再修正・再納品が発生した場合、バージョン番号を上げてタグを付け直し古いバージョン番号のタグを削除する。
1.4. READMEを書く
リポジトリルートに必ずREADMEファイル(
README.md
ORREADME.txt
)を置く-
READMEに書く内容は、ビルドが不要な場合(HTML、CSS、JavaScriptなどのコーディングデータ)
- リポジトリ内の納品フォルダの場所(パス)
-
ビルドが必要な場合(Jade、SCSS、AltJSなどから書き出す場合)
- 納品データのビルド手順
- リポジトリ内の納品フォルダの場所(パス)
1.5. 参考
Git入門:Git初学習者のための効率的な学習方法を考えてみた
俺のオレオレgit-flow
2. 事前準備(初期の構築時のみ実行)
git環境を使えるようにするため初期設定及びmaster,releaseブランチの作成
2.1. リポジトリ作成
ブラウザでGitbucketにアクセスし、[Sign in]からrootで入ります。
右上の[+]を選択し、[New repository]をクリック 。
[Repository name]を入力し、[Description]にレポジトリの説明を入力し[Create repository]をクリック。
2.2. masterブランチ、releaseブランチの作成
git init
git remote add origin http://localhost:8080/git/root/SSO.git
vi README.md
git add README.md
git config --global user.name "Daisuke Sakamoto" #username
git config --global user.email "sakamoto@aaabbb.com" #email
git config --global core.editor vi #editor
git config --global merge.tool vimdiff #diff tool
git config --list
git commit -m "first commit"
git push -u origin master
git checkout -b release
git push origin release
3.コマンドでのワークフロー
※gitコマンドを導入済みのLinux環境で運用したい場合、コマンドでのワークフローで運用して下さい。
※Windows端末でのワークフローを運用する場合は、次節の「GUIクライアントでのワークフロー」を参照。
3.1. 準備
- リモートクライアント環境の環境設定
git init
git remote add origin http://<GitBucketサーバIPアドレス>:8080/git/root/SSO.git
git config --global user.name "<氏名>" #username
git config --global user.email "<e-mail address>" #email
git config --global core.editor vi #editor config
git config --global merge.tool vimdiff #diff tool config
git config --list #設定確認
- ローカルのmasterに移動する
$ git checkout master
- ローカルのmasterをリモートと同期する
$ git pull origin/master
- masterから、作業用のブランチを作成する。
$ git checkout -b branchname master
※ブランチ名は開発者名と開発名をスラッシュで結合したものとする。
例: legitwhiz/featurename, legitwhix/bugname
3.2. コーディング
- コードを書く。
- コミットする。
$ git status
$ git add filename
$ git commit -m "コメント"
- 直前のコミットを取り消す場合:
$ git reset --soft HEAD
-
コーディングとコミットを繰り返す。
- コミットは頻繁に、どのような単位で行なっても良い。
- コーディング中の更新履歴は汚くなっても良い。
-
リモートのmasterに追随する(時々 and 最終テスト前):
- masterの更新を取得する。
$ git fetch origin/master
- masterの更新の内容を確認する。
$ git log --oneline--prety=medium -10 origin/master
- masterに更新に追随するためにrebaseする。
$ git rebase origin/master
- 作業を中断して他のブランチに移動する前に:
- すべてコミットする。
$ git commit
- もしくは、一時保存する。
$ git stash "コメント"
- 他のブランチから戻ってきたら。
$ git stash list
$ git stash pop
- コーディング、テストを終え、他のメンバーに渡せる状態になったら、次の「マージ」に進む。
3.3. マージ
- 新機能の追加など、チーム内部で機能レビューが必要な場合は、ステージング環境にマージ、デプロイ、機能レビューする。
- バグや小さな変更など、機能レビューが不要な場合は、プロダクション環境にマージする。
3.4. プロダクション(master)
- masterに移動する。
$ git checkout master
- masterをリモートと同期する。
$ git pull origin/master
- 対象のブランチに移動する。
$ git checkout branchname
- masterに更新に追随するためにrebaseする。
$ git rebase master
-
ステージングで機能テストしていた場合、devのみに適用されている更新が取り除かれるので、ローカルでテストする。 バグ等あれば、ローカルで修正する。
- これによる変更がなかった場合は、マージへそのまま進んで良い。
masterに移動する。
$ git checkout master
- masterにブランチをマージする。
$ git merge --squash branchname
$ git commit -m "コメント"
- リモートにmasterをpushする。
$ git push
3.5. リリース
プロダクションへのデプロイは、責任者が更新内容を確認してから行う。
masterに移動する。
$ git checkout master
- masterをリモートと同期する。
$ git pull origin/master
- 前回のデプロイ移行の、masterの更新履歴を確認する。
$ git log
必要に応じて、前回のデプロイ時との差分を確認する
タグをつける。
$ git tag 2018.12.18
- プロダクション環境にデプロイする。
3.6. プロダクション(release)
- releaseに移動する。
$ git checkout release
- releaseをリモートと同期する。
$ git pull origin/release
- 対象のブランチに移動する。
$ git checkout branchname
- releaseに更新に追随するためにrebaseする。
$ git rebase release
- ステージングで機能テストしていた場合、devのみに適用されている更新が取り除かれるので、ローカルでテストする。 バグ等あれば、ローカルで修正する。
これによる変更がなかった場合は、マージへそのまま進んで良い。
releaseに移動する。
$ git checkout release
- releaseにブランチをマージする。
$ git merge --squash branchname
$ git commit -m "コメント"
- リモートにreleaseをpushする。
$ git push
- ブランチを削除する(しばらく待ったほうが良い?)。
$ git branch -D branchname
4. GUI Client
[TortoiseGit]と[Git for Windows]をWindows端末に導入しGUI環境を構築します。
なお、[TortoiseGit]は裏で[Git for Windows]を使用するため、先に入れておく必要があります。
4.1. Git for Windows
- [Git for Windows]にアクセスし、[Download]をクリック。
ダウンロードした、[Git-2.20.1-64-bit.exe]を実行する。
Setup画面で[Next]をクリック。
- インストールするディレクトリを選択し、[Next]をクリック。
- 必要なコンポーネントを選択し、[Next]をクリック。 最低限[Windows Exploere integration],[Git Bash Here],[Git GUI Here],[Git LFS]は必要かと
- スタートメニューフォルダーを入力し、[Next]をクリック。
- 使用するエディタを選択し、[Next]をクリック。
- 環境変数では[Use Git from Git Bash only]を選択し、[Next]をクリック。 ここで[Use Git from the Windows Command Prompt]にしてしまうと、 コマンドプロンプトがGitBashに乗っ取られて非常に使いづらくなる。
- HTTPS接続時に使用するSSLコンポーネントは、[Use the OpenSSL library]を選択し、[Next]をクリック。
- 改行コードの変換動作については、勝手に改行コードを変えてほしくないので[Checkout as-is, commit as-is]を選択し、[Next]をクリック。
- ターミナルエミュレータの選択は、[Use MinTTY]を選択し、[Next]をクリック
- その他のオプションについては特に変更せず、[Install]をクリック
- [Finish]をクリック
4.2. TortoiseGit
※languagePackもココにあります。
- ブラウザで[TortoiseGit]にアクセスし[Download]をクリック。
- 端末の環境に合わせて[for 32-bit Windows]もしくは[for 64-bit Windows]を選択しダウンロードする。
- 日本語パッケージをダウンロードするために、以下の[JapaneseのSetup]をクリック。
- ダウンロードした[TortoiseGit-2.7.0.0-64bit.msi]を実行し、インストールウィザードで[Next]をクリック
- ライセンス情報を一読し[Next]をクリック
- SSHクライアントは[TortoiseGitPlink...]を選択し[Next]をクリック
- インストール先はそのままにし、[Next]をクリック
- [Install]をクリック
- チェックを外し[Finish]をクリック
- 日本語化パッケージである[TortoiseGit-LanguagePack-2.7.0.0-64bit-ja.msi]を実行。
- セットアップが完了したら[Configure TortoiseGit to use this language]にチェックを入れ、セットアップを完了する。
4.3. 公開鍵の生成
GUIクライアントから公開鍵認証によるSSH接続を行うため、事前にクローン先コンピューターにて公開鍵を生成する。
- プログラム一覧のTortoiseGitの中にある"PuTTYgen"を起動し、キー生成を開始する。
- 上部のゲージがいっぱいになるまで、空白部分上でマウスカーソルを動かす。
- 公開鍵が生成されて表示されるので、すべてコピーしておく。その後[Save private key]を押して秘密鍵の保存ダイアログを開く。[Key passphrese]にパスフレーズを入力することで、秘密鍵にパスワードを掛けることができるが今回は空白としている。
- パスフレーズをかけていない場合警告が出るが、無視して"はい"で進める。
適当な場所に保存する。ファイル名も任意で良い。
5. GUIクライアントでのワークフロー
5.1 準備
ローカルリポジトリの設定
- ローカルリポジトリを作成するディレクトリを適当なところに作成し、エクスプローラーからディレクトリを右クリックし[Git ここにリポジトリを作成]をクリック。
- チェックはそのまま(外れた状態)にして[OK]ボタンをクリック
- [OK]ボタンをクリック
リモートリポジトリの同期
- ローカルリポジトリのディレクトリを右クリックし、[Git 同期]をクリック。
- リモートブランチに[master]を入力し、リモートの[管理]ボタンをクリック。
- URLを入力し[新規に追加/保存]をクリックし、[OK]ボタンをクリック
- Git同期画面で[プル]ボタンをクリックし"成功"となることを確認し、[閉じる]ボタンをクリック。
ブランチを切る
- エクスプローラーでローカルリポジトリのディレクトリを右クリックし、[TortoiseGit]-[ブランチを作成]をクリック。
-
ブランチを作成画面で[ブランチ]にブランチ名を入力し、[新しいブランチに切り替える]にチェックを付け、説明に改修内容を入力し、[OK]ボタンをクリック。
ブランチ名は、"<作業者の名前>/<改修内容>"とする。
Gitコマンド実行中画面で"成功"と出力されたことを確認し、[閉じる]ボタンをクリック。
5.2 コーディング
- 追加(add)
ローカルリポジトリに対象ファイルをコピーし、エクスプローラーで対象ファイルを右クリックし、[TortoiseGit]-[追加]をクリック。
追加終了画面で成功となっていることを確認し、[OK]をクリック。
エクスプローラーで追加した対象ファイルのアイコンに+マークが付けば追加(add)された状態となります。
追加した対象ファイルを右クリックし、[Gitコミット]をクリック。
コミット画面でメッセージを入力し、[著述日時を設定する]、[作者を設定]にチェックを入れ、[コミット]ボタンをクリック。
Gitコマンド実行中画面で"成功"と出力されたことを確認し、[閉じる]ボタンをクリック。
ファイルのアイコンが+マークからチェックマークに変わればCommitされた状態となります。
- 変更(modify)
ローカルのリポジトリディレクトリに更新したファイルコピーするとエクスプローラーでアイコンにエクスラメーションマークが付きます。
エクスラメーションマークが付いたアイコンを右クリックし、[TortoiseGit]-[差分]をクリック。
前のバージョンとファイルを比較し、想定通りの差分であることを確認し右上の「×」ボタンで画面と閉じる。
エクスラメーションマークが付いたアイコンを右クリックし、[Gitコミット]をクリック。
コミット画面でメッセージに改修内容を入力し、[著述日時を設定する]、[作者を設定]にチェックを入れ、[コミット]ボタンをクリック。
Gitコマンド実行中画面で"成功"と出力されたことを確認し、[プッシュ]を押し成功したら[閉じる]ボタンをクリック。
5.3 マージ
新機能の追加など、チーム内部で機能レビューが必要な場合は、ステージング環境にマージ、デプロイ、機能レビューする。
バグや小さな変更など、機能レビューが不要な場合は、プロダクション環境にマージする。
5.4 プロダクション(master)
- merge
エクスプローラーでローカルリポジトリディレクトリを右クリックし、[TortoiseGit]-[切り替え]をクリック。
ブランチを選択し、プルダウンメニューから"master"を選択し、[OK]をクリック。
Gitコマンド実行中画面で"成功"を確認し、[閉じる]ボタンをクリック。
エクスプローラーでローカルリポジトリディレクトリを右クリックし、[TortoiseGit]-[マージ]をクリック。
ブランチを選択し、[...]ボタンを押す
左ペインから[refs]-[heads]-[<ブランチ名の/区切りで前半部分>]を選択し、右ペインから[<ブランチ名の/区切りで後半部分>]を選択し、[OK]ボタンをクリック。
ブランチに5.1で作成したブランチ名が記載されていることを確認し、[OK]ボタンをクリック。
Gitコマンド実行中画面で"成功"が出力されたことを確認し、[閉じる]ボタンをクリック。
- push
エクスプローラーでローカルリポジトリディレクトリを右クリックし、[TortoiseGit]-[プッシュ]をクリック。
[ローカル]で[master]を選択し、[リモート]で[master]を選択し、[OK]をクリック。
Git Credential Manager for WindowsでGitBucketのユーザ、パスワードを入力し、[OK]をクリック。
Gitコマンド実行中画面で"成功"を確認し、[閉じる]ボタンをクリック。
5.5. リリース
- pull
エクスプローラーでローカルリポジトリディレクトリを右クリックし、[TortoiseGit]-[ログを表示]をクリック。
リモートで"origin"を選択し、リモートブランチで"master"を選択し、[OK]ボタンをクリック。
Gitコマンド実行中画面で"成功"を確認し、[閉じる]ボタンをクリック。
- log
エクスプローラーでローカルリポジトリディレクトリを右クリックし、[TortoiseGit]-[ログを表示]をクリック。
出力されたログメッセージを確認する。
- tag
エクスプローラーでローカルリポジトリディレクトリを右クリックし、[TortoiseGit]-[タグを作成]をクリック。
タグにタグ名を入力し、メッセージにタグの詳細を入力し、[OK]ボタンをクリック。
5.6. プロダクション(release)
- pull
エクスプローラーでローカルリポジトリディレクトリを右クリックし、[TortoiseGit]-[プル]をクリック。
リモートを選択し、リモートブランチで[release]を選択し、[OK]をクリック。
Gitコマンド実行中画面で"成功"と出力されていることを確認し、[閉じる]をクリック。
2.merge
エクスプローラーでローカルリポジトリディレクトリを右クリックし、[TortoiseGit]-[マージ]をクリック。
ブランチで"remote/origin/release"を選択し、[OK]をクリック。
Gitコマンド実行中画面で"成功"と出力されていることを確認し、[閉じる]をクリック。
- push
エクスプローラーでローカルリポジトリディレクトリを右クリックし、[TortoiseGit]-[プッシュ]をクリック。
[ローカル]で[master]を選択し、[リモート]で[release]を選択し、[OK]をクリック。
Gitコマンド実行中画面で"成功"を確認し、[閉じる]ボタンをクリック。
以上