グローバルナビゲーションへ

本文へ

フッターへ

お役立ち情報Blog



GitForWindowsで社内のGitLabにPushしてみた

弊社では社内環境のGitLabを用いてバージョン管理を行っています。

今回は日本でのデスクトップOSシェア約70%であるWindows環境にてGitを利用して、GitLabへPushし、Merge Requestでmasterブランチにmergeされるまでの手順を解説していきたいと思います。

記載時の環境

  • Windows10 HOME version1903
  • GitLab Community Edition 12.2.5
  • Visual Studio Code 1.38.0

GitForWindowsの導入

下記のサイトのDownloadボタンからインストーラをダウンロードします。
※記載時はバージョン2.23.0でした。



1. ダウンロードしたインストーラを起動

2. インストールフォルダを指定

3. インストールするコンポーネントを選択

基本的には変更しなくてもOKです。

4. スタートメニューへGitの追加

こちらも基本的には変更しなくてOKです。

5. デフォルトエディタの設定

初期値ではUse Vimになっています。
今回はVisual Studio Code(以下VSCode)を使用しますので、「Use Visual Studio Code as Git’s default editor」を選択します。

6. WindowsのコマンドラインからGit操作をするかの設定

  • Use Git from Git Bash only:インストールされるGit BashからのみGit操作を行う
  • Git from the command line and …:WindowsのコマンドラインからもGit操作を行う
    ※今回はVSCordのターミナル上からGit操作を行うのでこちらを選択します。
  • Use Git and optional Unix tools …:Unixコマンドもコマンドラインで使用できるようになる
    ※Warningに記載されているようにWindowsのコマンドが上書きされますので注意してください。

7. 接続方法の設定

今回はGitLabに接続しますので「Use OpenSSH」→「Use the OpenSSL library」を選択します。

8. テキストファイルの改行コードスタイルを設定

Checkout,Commitを変換せず行うよう「Checkout as-is, commit as-is」を選択します。

9. Git Bashが使用するターミナルの選択

基本は変更しなくてOKです。

10.その他設定

基本は変更しなくてOKです。

11. インストールの実行

インストールが実行され、完了画面が表示されます。
リリースノートを見たい方はそのまま、そうでない方は「View Release Notes」のチェックを外してFinishボタンを押下します。

GitLabに接続するためのSSHキーの作成

GitLabのアカウント、リポジトリは存在しているものとします。
ここからVSCodeを使用します。


1. ブラウザでGitLabにログインし、右上のプルダウンから「Setting」を選択


2. 左のタブからSSH Keysを選択


3. 中央上部にある「generate one」リンクを押下しヘルプを表示


4. VSCodeを開き、ターミナルタブ→新しいターミナルを押下しターミナルを起動


5. dirコマンドファイルリストを表示し、.sshディレクトリがない場合はmkdirコマンドで作成

C:\Users\user-name> mkdir .ssh

6. .sshディレクトリに移動

C:\Users\user-name> cd .\.ssh\

7. Step3で開いたヘルプの通りにコマンドを実行

-Cオプションはコメント追加オプションなので無しでもOKです。
※passphraseを聞かれますが、今回は何も入力せずにEnterを押下します。

C:\Users\user-name\.ssh> ssh-keygen -o -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\user-name/.ssh/id_rsa): ←入力せずEnter
Enter passphrase (empty for no passphrase):                           ←入力せずEnter
Enter same passphrase again:                                          ←入力せずEnter
Your identification has been saved in C:\Users\user-name/.ssh/id_rsa.
Your public key has been saved in C:\Users\user-name/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:50Cmpmd**************** 
The key's randomart image is:
+---[RSA 4096]----+
|     o.  . o=o   |
-------省略--------
|         .+ .+...|
+----[SHA256]-----+

GitLabへの接続設定

1. catコマンドで公開鍵(.pub)を表示

C:\Users\user-name\.ssh> cat .\id_rsa.pub

2. 表示した公開鍵を登録

GitLab→Setting→SSH Keysタブに移動し、Key欄にStep1で表示した公開鍵をすべて貼り付けます。
Title欄には分かりやすい名前を入力してください。 Add keyボタンを押下しエラーが出なければ成功です!

Gitでcloneからmergeまで

※VSCodeのターミナルでgitコマンドが使えない際は、GitForWindowsインストール後に一度再起動を行ってみてください。

1. gitの設定の編集

下記コマンドで名前とメールアドレスを登録してください。
設定は「~/.gitconfig」ファイルに追記されます。

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

2. リモートリポジトリ(GitLab上)からclone(ローカルリポジトリへコピー)

cloneしたいPATHまで移動しリモートリポジトリのsshのパスをコピーし、git cloneコマンドでcloneします。

Are you sure you want to continue connectingには「yes」と入力してEnter押下します。

C:\Users\your-name\test> git clone ssh://git@your-domain/artis-blog-test.git
Cloning into 'artis-blog-test'...
The authenticity of host '[your-domain]:port ([your-ip]:port)' can't be established.
ECDSA key fingerprint is SHA256:hISvrbRRn***************************.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.

3. ブランチの確認

cloneしたプロジェクトディレクトリに移動し、git branchコマンドで現在いるブランチを確認します。

C:\Users\your-name\test\artis-blog-test> git branch
* master  ←現在いるブランチにはアスタリスク(*)がつく

4. 作業用ブランチに切り替え

git checkoutコマンドに-bオプションを付けることで作業用ブランチを作成しつつブランチを切り替えます。

C:\Users\your-name\test\artis-blog-test> git checkout -b develop
Switched to a new branch 'develop'
C:\Users\your-name\test\artis-blog-test> git branch
* develop  ←developになっている!
  master

5. ローカルリポジトリの作業用ブランチで変更

VSCodeのファイルタブ→フォルダを開く→cloneしたプロジェクトディレクトリを選択し、変更を行います。 今回は新しいファイルを作成してみました。

6. 変更を確認

git statusコマンドで変更を確認します。

C:\Users\your-name\test\artis-blog-test> git status
On branch develop
Untracked files:  ←まだgit管理してないファイルがあるよ~
  (use "git add <file>..." to include in what will be committed)
        test1.md

nothing added to commit but untracked files present (use "git add" to track)

7. 変更をステージングエリアに追加

git add {filename}コマンドでステージングエリアに追加します。
git add .コマンドで全てのファイルを追加することもできます。

C:\Users\your-name\test\artis-blog-test> git add .
C:\Users\your-name\test\artis-blog-test> git status
On branch develop
Changes to be committed: ←以下をコミットしますよ~
  (use "git restore --staged <file>..." to unstage)
        new file:   test1.md

8. 変更をコミット

git commitコマンドに-mオプションを付けることで、コメントをコマンドラインで入力しつつコミットすることができます。

C:\Users\your-name\test\artis-blog-test> git commit -m 'Added new file.'
[develop 941fc35] Added new file.
 1 file changed, 1 insertion(+)
 create mode 100644 test1.md

9. コミットログの確認

git logコマンドでコミットログの閲覧ができます。

C:\Users\your-name\test\artis-blog-test> git log
commit 941fc351392e4fbe7a331992b186b37930c5792c (HEAD -> develop)
Author: Your Name <your-address@asobou.co.jp>
Date:   Thu Sep 12 14:58:25 2019 +0900

    Added new file.   ←先程付けたコメントのコミットが確認できました!

commit 9812e84066dc228f1424bcc597ff35b3e1695373 (origin/master, origin/HEAD, master)
Author: Your Name <your-address@asobou.co.jp>
Date:   Thu Sep 12 02:39:06 2019 +0000

    Add new file

10. 変更をコミットした作業用ブランチをリモートリポジトリにpush

git push {remote name} {develop branch}コマンドでリモートリポジトリにpushします。

C:\Users\your-name\test\artis-blog-test> git push origin develop
Counting objects: 100% (4/4), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 323 bytes | 323.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote:
remote: To create a merge request for develop, visit:
remote:   http://your-domain/artis-blog-test/merge_requests/new?merge_request%5Bsource_branch%5D=develop
To ssh://your-domain:port/artis-blog-test.git
 * [new branch]      develop -> develop

11. ブラウザ上からmerge(mergeリクエスト)の実行

リモートリポジトリ→Repository→Branches→先程Pushしたブランチの「Merge request」ボタンを押下


タイトル、変更内容等を入力して「Submit merge request」ボタンを押下


承認者がmergeすることでmasterブランチに変更が反映される

ローカルリポジトリを最新の状態にする

他の作業者が変更を反映したり、ブラウザ上でmergeを行ったりするとローカルリポジトリとの差分ができてしまいます。 前段落Step11で承認者にブラウザ上でmergeしてもらった想定で、ローカルリポジトリを最新の状態にしてみます。

1. git fetchコマンドでリモートリポジトリの変更履歴のみを取得

「origin/{branch name}」はリモートリポジトリのブランチの情報です。

C:\Users\your-name\test\artis-blog-test> git fetch -p
From ssh://your-domain:port/artis-blog-test
 - [deleted]         (none)     -> origin/develop  
remote: Enumerating objects: 1, done.
remote: Counting objects: 100% (1/1), done.
remote: Total 1 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (1/1), done.
   9812e84..a897947  master     -> origin/master

2. ローカルリポジトリのmasterブランチを最新の状態に更新

masterブランチに切り替え、git pull {remote name} masterコマンドでリモートリポジトリの内容をpullします。

C:\Users\your-name\test\artis-blog-test> git checkout master
Switched to branch 'master'
Your branch is behind 'origin/master' by 2 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch) 

↑リモートリポジトリのmasterブランチより古いからpullしてね!
C:\Users\your-name\test\artis-blog-test> git pull origin master
From ssh://your-domain:port/artis-blog-test
 * branch            master     -> FETCH_HEAD
Updating 9812e84..a897947
Fast-forward
 test1.md | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 test1.md
C:\Users\your-name\test\artis-blog-test> git log
commit a89794767681cfd65acf8993501f6edd243fcf46 (HEAD -> master, origin/master, origin/HEAD)

↑ローカルリポジトリのmasterとリモートリポジトリのorigin/masterが同じになった!

Merge: 9812e84 941fc35
Author: Your Name <your-address@asobou.co.jp>
Date:   Thu Sep 12 06:32:44 2019 +0000

    Merge branch 'develop' into 'master'

    Added new file.

    See merge request artis-blog-test!1

commit 941fc351392e4fbe7a331992b186b37930c5792c (develop)
Author: Your Name <your-address@asobou.co.jp>
Date:   Thu Sep 12 14:58:25 2019 +0900

    Added new file.

commit 9812e84066dc228f1424bcc597ff35b3e1695373
Author: Your Name <your-address@asobou.co.jp>
Date:   Thu Sep 12 02:39:06 2019 +0000

    Add new file

3. 不要なブランチの削除

リモートリポジトリにmerge済の「developブランチ」は不要なので一度削除してしまいます。
git branchコマンドに-dオプションを付けることで削除ができます。

C:\Users\your-name\test\artis-blog-test> git branch -d develop
Deleted branch develop (was 941fc35).
C:\Users\your-name\test\artis-blog-test> git log
commit a89794767681cfd65acf8993501f6edd243fcf46 (HEAD -> master, origin/master, origin/HEAD)
Merge: 9812e84 941fc35
Author: Your Name <your-address@asobou.co.jp>
Date:   Thu Sep 12 06:32:44 2019 +0000

    Merge branch 'develop' into 'master'

    Added new file.

    See merge request artis-blog-test!1

commit 941fc351392e4fbe7a331992b186b37930c5792c  ←developブランチがなくなっている!
Author: Your Name <your-address@asobou.co.jp>
Date:   Thu Sep 12 14:58:25 2019 +0900

    Added new file.

commit 9812e84066dc228f1424bcc597ff35b3e1695373
Author: Your Name <your-address@asobou.co.jp>
Date:   Thu Sep 12 02:39:06 2019 +0000

    Add new file

さいごに

いかがだったでしょうか。 上記手順を行えばWindows環境でもGitを利用して、バージョン管理システムを利用することができます。 Gitは今回紹介した以外にも、便利な機能がたくさんあるので気になる方は公式ドキュメントを見てみるのもよいかもしれません。

この記事を書いた人

ばね
ばねソリューション事業部 システムエンジニア
東京で2年半エンジニアとしての経験を積み、浜松にUターンの後、アーティスへ入社。
ソリューション事業部のWebエンジニアとして、システムの設計・開発・保守・運用からインフラまで幅広く従事している。
フルスタックエンジニア目指して現在も勉強の日々。車が好き。
この記事のカテゴリ

FOLLOW US

最新の情報をお届けします