1. 記事一覧 >
  2. ブログ記事
category logo

GitLab プロジェクト作成→commit→push ssh接続

(更新) (公開)

はじめに

Ubuntu 20.04.2.0 にインストールした GitLab を使い、
初期設定
ユーザー登録
プロジェクト(リポジトリ)作成
ファイル新規作成
git clone,commit,push
マージリクエスト(プルリクエスト)
SSH接続
までチュートリアル的に一通り行います。


clone→commit→push→マージまで以下の図のような流れで進めます。


各バージョンは、以下の通りです。

# gitlab-rake gitlab:env:info
GitLab information
Version:        13.11.2
GitLab Shell
Version:        13.17.0
# git --version
git version 2.25.1
# openssl version
OpenSSL 1.1.1f  31 Mar 2020

Webブラウザの画面は、全てWindows10のFireFox 78.10.1esr (64 ビット)を使用しています。


ユーザーは、

IDユーザー名役割
asanAさん(A San)最終コミット責任者的な位置付け
bsanBさん(B San)プログラマーの上司的な位置付け・レビュアー
csanCさん(C San)プログラマー

とします。
※実際には、厳密な権限付与管理が必要ですので、あくまで簡易的なイメージです。


URLは、
http://gitlab.itccorporation.jp
とします。※インターネット上に存在しません。


初期設定

Administrator(root)でログインします。


言語設定

右上のアバター(ユーザーアイコン画像)部分をクリックします。


「Preferences」をクリックします。


「Language」を Japanese - 日本語 に変更し、「Save changes」ボタンをクリックします。


タイムゾーン設定

左側の「ユーザー設定」(英語の場合「User Settings」)から「プロフィール」をクリックして、時間の設定 - Time zone を [UTC + 9] Tokyo に設定します。


下の方にスクロールして、「プロファイル設定を更新」をクリックします。


その他調整

左側の「ユーザー設定」から「メール」をクリックして、「admin@example.com」の右のゴミ箱ボタンをクリックして、削除します。
※今回の場合は、初期設定されていましたので、削除しますが、削除は必要無いかもしれません。いずれにしても一度確認した方が良いと思います。


「Open registration is enabled on your instance.
インスタンスのユーザー登録をカスタマイズ/無効化する方法の詳細を確認する。」
と表示されている部分の「View setting」ボタンをクリックします。


「Sign-up enabled」のチェックボックスを外します。

デフォルトはチェック有りです。

このままの場合、トップ画面から誰でもユーザー登録作業に入れます。

今回、管理者がユーザー登録しますので、チェックを外します。

「Open registration is enabled on your instance.

インスタンスのユーザー登録をカスタマイズ/無効化する方法の詳細を確認する。」

は、これを警告しているようです。


下の方にスクロールして、「Save changes」ボタンをクリックします。


「To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in your settings.」
と表示されている部分の「Don't send usage data」ボタンをクリックします。

利用状況をGitLabに送信するかどうかになります。今回は、「送信しない」としました。


警告が消えました。「Do you want to customize this page?」は、画面をカスタマイズするかどうかですので、Xボタンをクリックして閉じます。



ユーザー登録

Administrator(root)の操作

上の工具のマーク「管理者エリア」をクリックします。


「新規ユーザー」をクリックします。


名前:A San
Username:asan
メール:[メールアドレス]
を入力して、下へスクロールし、「Create user」をクリックします。



Aさんの操作

登録したAさん宛てにメールが送信されますので、
Aさんが Click here to set your password: のリンクをクリックします。


パスワードを入力します。※以降、Aさんのログインパスワード、push等のパスワードがこのパスワードになります。


Aさん宛てにメールが送信されます


Aさんについても、Administrator(root)で行った初期設定を行います。(手順は省略)

・・・Bさん、CさんもAさんと同じ方法で登録したものとして続けます。

プロジェクト(リポジトリ)作成

Aさんでログインします。


グループ作成

「Create a group」をクリックします。


グループ名:Group1
グループURL:group1
とします。
「可視性レベル」は、今回、社内の限られたメンバーで扱うため、プライベートを選択します。

グループの作成は必須ではありません。

【グループの役割】

プロジェクト(リポジトリ)をまとめて管理する入れ物のようなものになります。ユーザの権限をまとめて管理できます。例えば、Group1にproject1,project2,project3とプロジェクト(リポジトリ)を作成して、Group1にユーザの権限を設定すると、project1,project2,project3全体に設定した権限が影響します。


プロジェクト作成

「新規プロジェクト」ボタンをクリックします。


「Create blank project」をクリックします。


プロジェクト名:project1
Project slug:project1
プロジェクトの説明(オプション):テストプロジェクト
を入力し、「プロジェクトを作成」ボタンをクリックします。



アクセス権付与

グループ→所属グループ→Group1 をクリックします。


左側から「メンバー」をクリックして、「GitLabメンバーまたはメールアドレス」のところをクリックして、メンバーを選択します。
今回、Aさんが作成したグループですので、残りのBさん、Cさんを選択します。


「役割(権限)を選択してください」のところをクリックして、「Developer」を選択します。

役割(権限)は、Guest -> Reporter -> Developer -> Maintainer -> Owner の順にできることが多くなっていきます。


「招待」ボタンをクリックします。


ファイル新規作成

GUIから新規ファイルをcommit

Aさんでログインして、上のメニューから「プロジェクト」→「あなたのプロジェクト」→「Group1 / project1」をクリックします。


「新規ファイル」をクリックします。


「新規ファイル」をクリックします。


名前:hello.c を入力して、「ファイルを作成」をクリックします。


#include <stdio.h>

main()
{
  printf("Hello World\n");
}

を入力して、「コミット」をクリックします。


「コミット」をクリックします。 ※ここでコミットメッセージを入力できますが、デフォルトで入力されている「アップデート hello.c ファイル」のままにしました。



git clone,commit,push

clone

Cさんでログインして、「Group1 / project1」の画面の「クローン」をクリックします。
「HTTP でクローン」のURLをコピーします。


SSHで作業用サーバーにログインして、コマンドラインで作業します。

今回、Ubuntu 20.04.2.0にログインして作業しました。

gitがインストールされていなかったため、

# apt install git

が必要でした。

GitLabで設定したメールアドレス、名前を設定します。

$ git config --global user.email "csan@mailserver.example.com"
$ git config --global user.name "C San"

csan@mailserver.example.com は、Cさんのメールアドレスにしてください。

一度設定したら記憶されます。

設定しない場合、commitの時に以下のエラーになります。

*** Please tell me who you are.

Run

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

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'csan@ubuntu.(none)')</code>

git cloneでソースコードを開発環境にコピーします。

$ git clone http://gitlab.itccorporation.jp/group1/project1.git

⇒カレントディレクトリにproject1ディレクトリが作成されます。


【 現在の状態イメージ 】


ブランチ作成

開発用にブランチを作成します。※ブランチの作成は必須ではありませんが、通常masterに直接pushはしないと思うのと、この後のマージリクエストにも繋がっていきますので、作成します。

$ git branch develop

現在のブランチを確認します。

$ git branch
  develop
* master

ブランチを移動します。

$ git checkout develop
Switched to branch 'develop'
$ git checkout -b ブランチ名

にてブランチ作成とブランチ移動両方行われます。


【 現在の状態イメージ 】


ブランチでcommit

ソースコードを修正します。

$ vi hello.c
#include <stdio.h>

main()
{
  printf("Hello World!!!!!\n");
}

※!!!!!追記


git add でcommit対象を追加します。

$ git add hello.c
$ git add .

$ git add -A

等でも良いです。


commitします。

$ git commit -m 'fix: add !!!!!'

【 現在の状態イメージ 】


ブランチの変更をプッシュ

GitLabのサーバーへpushします。

$ git push origin develop

originというリモートリポジトリのdevelopブランチにpush(アップロード)するという意味になります。

origin : push先のリモートリポジトリの名前です。今回の場合、http://gitlab.itccorporation.jp/group1/project1.git がそれに相当します。

develop : push先のブランチ名です。


【 現在の状態イメージ 】


マージリクエスト(プルリクエスト)

マージリクエスト送信

Cさんでログインします。
すると、「マージリクエストを作成」ボタンが表示されていますので、クリックして、マージリクエスト(プルリクエスト)を行います。


Descriptionにレビュワー向けの説明を記入します。


Assignee:Aさん
Reviewer:Bさん
とします。

Assignees - マージ担当者を設定します。

Reviewers - レビューする人を設定します。

※運用方針によって、役割は異なります。

Milestone, Labels は今回は無しとします。
マージオプションは、「Delete source branch when merge request is accepted.」にチェックを入れます。チェックが有る場合、マージ完了時、developブランチが消えます。
「Squash commits when merge request is accepted.」は、他のコミットも統合するかどうかですが、今回は関係無いため、チェック無しにします。


「Create マージリクエスト」をクリックします。


Aさん、Bさん宛てにメールが送信されます。


マージリクエスト承認

Bさんでログインして、メールのURLのところへ行きます。


「変更」をクリックして、変更箇所を確認します。


以下のようにWeb IDEでも変更箇所を確認できます。



「承認」ボタンをクリックします。



マージ

Aさんでログインして、メールのURLのところへ行きます。 (Bさんと同じように差分を確認して、)「追加で承認する」ボタンをクリックします。


「マージ」ボタンをクリックします。



Bさん、Cさんにメールが送信されます。


Cさんでログインして、masterブランチの「コミット」「変更」を見ると、反映されているのが分かります。



【 現在の状態イメージ 】


SSH接続

SSHで作業用サーバーにログインして、コマンドラインで作業します。


SSH 鍵作成

端末にログインして、SSH秘密鍵、公開鍵を作成します。

$ ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/csan/.ssh/id_ed25519):
Created directory '/home/csan/.ssh'.
Enter passphrase (empty for no passphrase):<空欄のままエンター>
Enter same passphrase again:<空欄のままエンター>
Your identification has been saved in /home/csan/.ssh/id_ed25519
Your public key has been saved in /home/csan/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:w3W/lGyrFJqyVbvQ+tY37sxaCw8fpIqnL4cNlVEpEjw csan@ubuntu
The key's randomart image is:
+--[ED25519 256]--+
|        ... ...  |
|         E o .   |
|          + =    |
|       . . + o . |
|        S . o *. |
|         o = =oo |
|        . O +=oo |
|         *.BooX.+|
|        .oB=+.+X.|
+----[SHA256]-----+

パスフレーズ無しで作成します。

-tで指定するed25519は暗号化方式になります。強固で速いということで指定しています。opensshが対応していないバージョンの場合、rsa等別の方式を指定してください。


公開鍵登録

公開鍵を確認します。

$ cat /home/csan/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID9vBTivpnj/oZ1rizCWvAMHxeDyx2bxRs7KWvqIw3XR csan@ubuntu

CさんでWeb画面にログインして、右上のアバター(ユーザーアイコン画像)部分をクリックして、「Preferences」をクリックします。


左側の「SSH 鍵」をクリックして、先ほどの $ cat /home/csan/.ssh/id_ed25519.pub の出力内容をキーのところへコピーペーストします。
タイトルは、何でも良く、自動入力されたままとし、Expire at は有効期限を設定できますが、今回設定しないため、yyyy/mm/dd のままにし、「キーを追加」をクリックします。



Cさんにメール送信されます。


gitからSSH接続

SSHで作業用サーバーにログインして、コマンドラインで作業します。


現在のブランチを確認します。

$ cd /home/csan/project1
$ git branch
* develop
  master

hello.cを変更します。

$ vi hello.c
#include <stdio.h>

main()
{
  printf("Hello World!!!!!\n");
  printf("Hey World\n");
}

⇒printf("Hey World\n");追加


git add で登録します。

$ git add .

git の設定を変更します。

$ git remote set-url origin git@gitlab.itccorporation.jp:group1/project1.git

.git/configが

[remote "origin"]
        url = http://gitlab.itccorporation.jp/group1/project1.git
↓
[remote "origin"]
        url = git@gitlab.itccorporation.jp:group1/project1.git

と変更されます。

「git@gitlab.itccorporation.jp:group1/project1.git」ですが、以下の 「SSH でクローン」のところで分かります。


commitして、pushします。

$ git commit -m "fix : add new line"
$ git push -u origin develop

ここで何も聞かれずにpushできたら成功です。


リモートの方もちゃんと新しい行がコミットされています。


成功です!

loading...