ユーザ用ツール

サイト用ツール


documents:guide:gitlab:start

GitLab入門 GitLab入門 AsciiDoc文書作成入門

GitLab入門

農林水産技術会議事務局 筑波産学連携支援センター
Ver.1.1, 2022-03-08

1. はじめに

GitとGitLabについて、基本的な使い方をまとめてみました。
プログラム作成に限らず、仕様書やマニュアルなど更新、改版が必要な文書を作成する際、これらのバージョン管理や共同での文書作成に役に立つツールとなるでしょう。

2. GitとGitLab

2.1. 基本知識

2.1.1. バージョン管理

プログラムソースコードやテキスト文書、ファイルの変更履歴(バージョン)を管理することで、過去の変更箇所を確認したり、特定の時点の内容に戻すことが可能となります。

ファイル名に「最新」や「日付」をつけて履歴管理すると、どのファイルが最新の正しいものかが分かりにくくなります。
バージョン管理システムを使うことで、何時、誰が変更したといった履歴の記録や特定時点のファイルを取り出すことが可能となります。

2.1.2. Git

Gitは、ファイルのバージョン管理を容易にするシステムです。
Gitは、分散型のバージョン管理システムで、個人のPCにリポジトリを作成してバージョン管理ができます。 更にリモートリポジトリ(今回の説明では、GitLab)と連携して、共同でプログラム開発や文書作成をするとができます。

Git公式サイト https://git-scm.com/

git install win 01

図 1. Git公式サイト

2.1.3. GitLab

GitLabは、共同で利用するリモートリポジトリのサーバとして機能し、更に共同作業を支援する課題管理やWikiなどの機能を備えたWebサービスで、クラウドサービスとして有名なGitHubと同様の機能を備えています。 また、オープンソース版のGitLab Community Edition (GitLab CE)があり、オンプレミスでのサーバ運用が可能です。

GitLab日本語情報サイト https://www.gitlab.jp/

gitlab jp web

図 2. GitLab日本語情報サイト

3. 準備

GitLabでバージョン管理するには、Gitが動作する環境を個人のPCに設定する必要があります。

3.1. Gitのインストール

MacやLinuxであれば、プログラム開発環境をインストールすることで、Gitも標準的にインストールされます。 Windowsでは、WSL (Windows Subsystem for Linux)を使うことで、Linux環境を利用できます。 また、ここで紹介するWindows用のGit(Git Bash)も、コマンドの使い方はLinuxやMacと同様です。

:!:Windows用Git(Git Bash)は、Windows上で動くUnixライクな環境であるMSYS2をベースにしたコマンドラインインターフェース(CLI)とソフトウェアを組み合わせて提供されています。

3.1.1. Windowsの場合

  • 公式ページ( https://git-scm.com/ )から、インストーラーをダウンロードします。
  • インストーラーを起動(管理者として実行)すると、多くの設問が表示されます。
    • 標準設定でも問題はないのですが、改行コードの取扱オプションについては、デフォルトではなく一番下の“Checkout as-is, commit as-is”を選択することをおすすめします。

git install win 12

図 3. 改行コードの取り扱いオプション

  • 共同で作業したり、Windows, Mac, Linux環境が混在する場合やWindowsのWSLを使う場合に、改行コードが問題になる場合があります。
  • 一般ユーザでも任意のディレクトリにインストール可能な、Portable版(Git for Windows Portable (“thumbdrive edition”))もあります。

3.2. Git初期設定

インストールが完了したら、Git Bashを起動します。(アプリケーションメニューの「Git」配下の「Git Bash」を起動します。)
Git Bashは、WindowsでGitコマンドを操作するツールで、ls, catなどLinuxと同様の基本コマンドも動作します。

git bash 01

図 4. Git Bash 画面イメージ

Gitでは、誰が変更したのかを記録するために、ユーザ名とメールアドレスを登録する必要があります。

  • Git Bashを起動し、コマンドを使ってユーザ名とメールアドレスを登録します。
    $ git config --global user.name "Hikari KOSHINO"
    $ git config --global user.email "koshihikari@example.com"
  • ここで指定するメールアドレスは、GitLabに登録されているメールアドレスを設定します。
    • GitLabの管理者にユーザ登録を依頼する際には、Gitに設定しているメールアドレスを指定してください。

3.2.1. 日本語ファイル名を使う場合

Gitで日本語ファイル名を取り扱う場合、文字化けすることがあります。
(バックスラッシュ \ でエスケープされた文字コードが表示される)

  • git status で、「日本語ファイル名.docx」が追加された場合の表示
    $ git status
    On branch main
    Your branch is up to date with 'origin/main'.
     
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
        "\346\227\245\346\234\254\350\252\236\343\203\225\343\202\241\343\202\244\343\203\253\345\220\215.docx"
     
    nothing added to commit but untracked files present (use "git add" to track)
  • 文字化けを解決するために、以下の設定を追加します。
    $ git config --global core.quotepath false   (1)
    1. 日本語を使う方は、ほぼ必須の設定となります。
  • quotepath 設定変更後、日本語ファイル名は正常に表示されます。
    $ git config --global core.quotepath false
    $ git status
    On branch main
    Your branch is up to date with 'origin/main'.
     
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
        日本語ファイル名.docx
     
    nothing added to commit but untracked files present (use "git add" to track)

3.3. SSH認証キーの作成

リモートリポジトリと通信する場合に、SSHの公開鍵で認証します。
http(s)での利用も可能ですが、SSHの利用をお勧めします。

  • Git Bashを起動し、ssh-keygenコマンドを使って認証キーを作成します。(WindowsのGitには、OpenSSHが標準でインストールされます。)
  • 鍵の強度が高いことから、ed25519をお勧めします。従来はRSAの2048以上を使うことを推奨していましたが、ED25519の方が鍵の強度が高く、鍵長も短い(256)ことから高速です。
    koshihikari@mng-dpc-17018 MINGW64 ~
    $ ssh-keygen -t ed25519  (1)
    Generating public/private ed25519 key pair.
    Enter file in which to save the key (/c/Users/koshihikari/.ssh/id_ed25519):
    Enter passphrase (empty for no passphrase):  (2)
    Enter same passphrase again:
    Your identification has been saved in /c/Users/koshihikari/.ssh/id_ed25519
    Your public key has been saved in /c/Users/koshihikari/.ssh/id_ed25519.pub
    The key fingerprint is:
    SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx koshihikari@mng-dpc-17018
    The key's randomart image is:
    +--[ED25519 256]--+
    |  o*=*B.         |
    |+:-)  :-(  :-D   |
    |= o=* .  :-P     |
    |=.+*^_^* .       |
    |=_=+= o T_T      |
    |o oo.o +   : p   |
    | . :)   8-)      |
    |  -_-b..  orz    |
    |  .+ oo.         |
    +----[SHA256]-----+
    1. コメントを付与する場合は、ssh-keygen -t ed25519 -C “コメント” とします。
    2. ssh-keygen -t ed25519 コマンドを実行し、パスフレーズを設定してください。

3.4. GitLab公開鍵登録

作成したSSH公開鍵(~/.ssh/id_ed25519.pub)を、GitLabに登録します。

  • GitLabにサインインします。(Username or email, Password)
  • 右上のユーザのプルダウンメニューから「設定」を選択します。
  • 左側のメニューから「SSH鍵」を選択します。
gitlab 20 gitlab 19
SSH鍵メニュー 設定メニュー
  • キーの部分に、~/.ssh/id_ed25519.pub の内容をコピー&ペーストします。
    $ cat ~/.ssh/id_ed25519.pub
    ssh-ed25519 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA koshihikari@mng-dpc-17018

gitlab 21

図 5. SSH公開鍵登録

4. プロジェクト作成

Gitは、プログラム開発におけるソースコードのバージョン管理を主な目的として開発されたツールです。
プログラム開発では、関連する複数のファイルを1つのディレクトリ(フォルダ)にまとめて管理し、これをリポジトリといいます。
GitLabでは、1つの目的にむけてバージョン管理や課題管理を行う単位をプロジェクトとして作成、管理します。

4.1. GitLabでのプロジェクト作成

  • GitLabにサインインします。
  • 「新規プロジェクト」をクリックして、プロジェクトを作成します。
  • Create blank projectをクリックして、新規プロジェクトを作成します。 gitlab 05 図 6. 新規プロジェクト作成
    • プロジェクト名: 任意のプロジェクト名を入力します。
    • プロジェクトのURL: 個人の場合はユーザIDを選択し、Project slugには、ディレクトリ(フォルダー)名を指定します。
    • プロジェクトの説明(オプション)を入力
    • 可視レベル: 個人では「プライベート」を指定します。
    • 「プロジェクトを作成」をクリックすると、GitLab上にプロジェクトが作成されます。 gitlab 06 図 7. GitLabプロジェクト作成

4.2. PCでクローン(git clone)

GItLabでプロジェクト作成時点では、ローカルリポジトリがありません。コマンドラインによる手順が表示されますので、この手順に沿ってローカルリポジトリを作成します。

gitlab 07

図 8. ローカルリポジトリ作成手順

  • Gitのグローバル設定は、3.2, “Git初期設定”の手順で設定済みであることを確認してください。
  • 3.4, “GitLab公開鍵登録”の手順で、SSH公開鍵が登録されていることを確認してください。
  • 新しいローカルリポジトリを作成
    • PCでGit Bash (Windows PC)を起動します。
      koshihikari@mng-dpc-17018 MINGW64 ~
      $ cd Apps/Documents/  (1)
      1. cdコマンドで、ローカルリポジトリを作成するディレクトリ(任意のディレクトリ)に移動します。
    • koshihikari@mng-dpc-17018 MINGW64 ~/Apps/Documents
      $ git clone git@gitlab.example.com:koshihikari/gitlab-start.git  (1)
      Cloning into 'gitlab-start'...
      Enter passphrase for key '/c/Users/koshihikari/.ssh/id_ed25519': (2)
      warning: You appear to have cloned an empty repository.
      1. git clone コマンドで、GitLabのリポジトリをクローン(コピー)します。
      2. 登録したSSHキーのパスフレーズを入力して認証します。
    • Gitの初期化されたリポジトリ(ディレクトリ)が作成されます。
      koshihikari@mng-dpc-17018 MINGW64 ~/Apps/Documents
      $ cd gitlab-start  (1)
      1. リポジトリ(ディレクトリ)に移動します。
    • ファイルを作成します。
      koshihikari@mng-dpc-17018 MINGW64 ~/Apps/Documents/gitlab-start (main)
      $ touch README.md  (1)
      1. touch コマンドで、空のファイル(README.md)を作成
    • Git Bashの場合、作業中のディレクトリ(working directory)やブランチ名が表示され、入力待ち(プロンプト)が表示されます。
      ユーザ名@PC名 MINGW64 ワーキングディレクトリ (ブランチ名)
      koshihikari@mng-dpc-17018 MINGW64 ~/Apps/Documents/gitlab-start (main)
      $ <= プロンプト(入力待ち)

4.3. 初期ファイルを登録(commit & push)

touchコマンドで作成したファイルは、まだGitの管理下ではありません。以下の手順でGitの管理に取り入れます。また、リモートリポジトリ(GitLab)に反映するpushも行います。

  • 作成したファイルをGitの管理下に取り入れます。(ステージング)
    koshihikari@mng-dpc-17018 MINGW64 ~/Apps/Documents/gitlab-start (main)
    $ git add README.md  (1)
    1. git add で、作成したファイルをGit管理に取り入れます。(ステージング)
      • この状態をステージングと言い、Gitの管理下にファイルを取り入れていますが、履歴管理の情報は記録されていませんので、Gitの管理下から削除(取り消し: git reset README.md)しても、履歴は残りません。 なお、git resetしても、ファイルは削除されません。
  • Gitの履歴を記録する。(コッミット)
    koshihikari@mng-dpc-17018 MINGW64 ~/Apps/Documents/gitlab-start (main)
    $ git commit -m "add README"  (1)
    [main (root-commit) 12fdae0] add README
     1 file changed, 0 insertions(+), 0 deletions(-)
     create mode 100644 README.md
    1. git commitで、ファイルの履歴が記録されます。-m “add README”は、履歴のコメントとして記録されます。
  • GitLab(リモートリポジトリ)に、ファイルと履歴を反映(push)します。
    koshihikari@mng-dpc-17018 MINGW64 ~/Apps/Documents/gitlab-start (main)
    $ git push -u origin main
    Enter passphrase for key '/c/Users/koshihikari/.ssh/id_ed25519':
    Enumerating objects: 3, done.
    Counting objects: 100% (3/3), done.
    Writing objects: 100% (3/3), 219 bytes | 109.00 KiB/s, done.
    Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
    To gitlab.example.com:koshihikari/gitlab-start.git
     * [new branch]      main -> main
    Branch 'main' set up to track remote branch 'main' from 'origin'.

5. ファイルの更新

5.1. GitLabの編集機能

GitLabには、テキストファイルの編集機能があります。markdownやasciidoc形式にも対応しており、最初に作成したREADME.mdやWikiなどの編集が可能です。

  1. GitLabのプロジェクト「GitLab入門」のREADME.mdファイルをクリックします。 gitlab 11 図 9. README.mdファイルを選択
  2. 空のファイル(Empty file)であることが確認できます。「編集」をクリックして、内容を書き込みます。 gitlab 12 図 10. README.mdファイルの表示 gitlab 14 図 11. README.mdファイルを編集
  3. markdownなどは、プレビュータブで、記述内容のプレビューができます。 コミットメッセージを入力して、「Commit changes」をクリックします。 gitlab 15 図 12. 内容のプレビューと確定(コミット)

5.2. PC(ローカルリポジトリ)へのファイル同期(git pull)

  • GitLabの編集機能でファイルを編集しても、PC(ローカルリポジトリ)には、更新が反映されていません。
    $ ls
    README.md
    $ cat README.md  (1)
    1. cat README.md で、ファイルが空(何も表示されない)であることを確認
  • リモートリポジトリの変更をローカルリポジトリに反映します。
    koshihikari@mng-dpc-17018 MINGW64 ~/Apps/Documents/gitlab-start (main)
    $ git pull  (1)
    Enter passphrase for key '/c/Users/koshihikari/.ssh/id_ed25519':  (2)
    remote: Enumerating objects: 5, done.
    remote: Counting objects: 100% (5/5), done.
    remote: Compressing objects: 100% (2/2), done.
    remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
    Unpacking objects: 100% (3/3), 360 bytes | 9.00 KiB/s, done.
    From gitlab.example.com:koshihikari/gitlab-start
       12fdae0..8d71b29  main     -> origin/main
    Updating 12fdae0..8d71b29
    Fast-forward
     README.md | 3 +++
     1 file changed, 3 insertions(+)
    1. git pullコマンドで、リモートリポジトリから変更されたファイルを取得
    2. SSHキーのパスフレーズを入力
  • cat README.md で、ファイルが更新されたことを確認
    $ cat README.md
    # GitLab入門
     
    GitLabを初めて利用される方向けの案内を作成します。

5.3. ログ表示(git log)

  • git logコマンドで、履歴(ログ)を表示します。(新しいものから順に表示)
    $ git log
    commit 8d71b29f6626904efcf7c9307f9d9177e36402a8 (HEAD -> main, origin/main)
    Author: Hikari KOSHINO <koshihikari@example.com>
    Date:   Sat Feb 20 16:07:08 2021 +0900
     
        READMEを編集した。
        Update README.md
     
    commit 12fdae01954bf65dfc4afa193d56acea60c73e43
    Author: Hikari KOSHINO <koshihikari@example.com>
    Date:   Sat Feb 20 15:52:28 2021 +0900
     
        add README

5.4. PC(ローカルリポジトリ)でのファイル作成

  • vimやPCのエディタなどで、ファイル(gitlab-start.adoc)を作成します。
    $ ls
    gitlab-start.adoc  README.md
  • git statusは、ローカルリポジトリ状態を表示します。
    $ git status
    On branch main
    Your branch is up to date with 'origin/main'.
     
    Untracked files:  (1)
      (use "git add <file>..." to include in what will be committed)
            gitlab-start.adoc
     
    nothing added to commit but untracked files present (use "git add" to track)
    1. Untracked files:(未追跡ファイル) gitlab-start.adoc があると表示
  • ステージング(git add)して、状態を確認(git status)
    $ git add gitlab-start.adoc  (1)
     
    $ git status
    On branch main
    Your branch is up to date with 'origin/main'.
     
    Changes to be committed:
      (use "git restore --staged <file>..." to unstage)
            new file:   gitlab-start.adoc  (2)
    1. gitlab-start.adoc を、git管理下に追加
    2. 新しいファイルが追加されたことを表示

5.5. コッミット(Gitへの登録)

  • git commit で、ファイルの履歴を記録
  • -m オプションなしの場合は、エディタ(Vim)が起動しますので、コミットメッセージを編集します。
    $ git commit
  • エディタ(Vim)が起動しますので、メッセージを編集し、保存・終了します。(8, //テキストエディタ vim//参照)
    GitLab入門を書き始める。gitlab-start.adoc を追加  (1)
     
    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    #
     On branch main
    # Your branch is up to date with 'origin/main'.
    #
    # Changes to be committed:
            new file:   gitlab-start.adoc
    #
    1. 1行目に、コミットメッセージを入力します。
  • コミットが完了したことを示すメッセージ
    $ git commit
    [main dc8c0a9] GitLab入門を書き始める。gitlab-start.adoc を追加
     1 file changed, 35 insertions(+)
     create mode 100644 gitlab-start.adoc
  • git logで、履歴を確認(リモートリポジトリには反映していない)
    $ git log
    commit dc8c0a9cf3a85d5a5bd4e1df314cc9265319a695 (HEAD -> main)
    Author: Hikari KOSHINO <koshihikari@example.com>
    Date:   Sat Feb 20 20:23:14 2021 +0900
     
        GitLab入門を書き始める。gitlab-start.adoc を追加
     
         On branch main
                new file:   gitlab-start.adoc
     
    commit 8d71b29f6626904efcf7c9307f9d9177e36402a8 (origin/main)
    Author: Hikari KOSHINO <koshihikari@example.com>
    Date:   Sat Feb 20 16:07:08 2021 +0900
     
        READMEを編集した。
        Update README.md
     
    commit 12fdae01954bf65dfc4afa193d56acea60c73e43
    Author: Hikari KOSHINO <koshihikari@example.com>
    Date:   Sat Feb 20 15:52:28 2021 +0900
     
        add README

5.6. GitLabへのファイル同期(git push)

  • git push コマンドで、リモートリポジトリ(GitLab)に修正を反映します。
    $ git push
    Enter passphrase for key '/c/Users/koshihikari/.ssh/id_ed25519':
    Enumerating objects: 4, done.
    Counting objects: 100% (4/4), done.
    Delta compression using up to 8 threads
    Compressing objects: 100% (3/3), done.
    Writing objects: 100% (3/3), 702 bytes | 351.00 KiB/s, done.
    Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
    To gitlab.example.com:koshihikari/gitlab-start.git
       8d71b29..dc8c0a9  main -> main

6. Gitの基礎

Gitを使ってバージョン管理する上で必要な、基本的な知識を説明します。

3, //準備//を参照して、Gitの利用環境を準備してください。

6.1. 3つの状態

Gitを使う上で、次の3つエリア、3つの状態を理解してください。

git start 01

図 13. Gitの3つのエリア

  1. 作業ツリー(ワーキングツリー)
    • 1つのGitプロジェクトのためのファイルやディレクトリが格納されている。 実際に、このディレクトリ内のファイルに対し、編集、更新等を行います。 リモートリポジトリからクローン(clone: コピー元の情報を記録した状態で、Gitリポジトリをコピー)したときに、コピーされます。
    1. 修正済み状態
      • ファイルを編集、修正を行った状態で、Gitには、修正が反映されていない状態。
  2. ステージングエリア
    • 修正済み状態のファイルを、次のコミットに含めるファイルの情報を格納している。インデックスとも呼ばれる。
    1. ステージ済み状態
  3. ローカルリポジトリ(.git ディレクトリ)
    • ローカルのデータベースに、ファイルの内容、履歴情報などが格納されている。
    1. コミット済み状態

6.2. Gitの基本的な作業の流れ

6.2.1. リモートの修正をローカルに反映

  1. リモートリポジトリが更新されている場合、最新のファイルをローカルリポジトリに取り込んでから、修正作業を行います。
  2. リモートリポジトリの更新を取り入れるには、プル(git pull)コマンドを実行します。(5.2, “PC(ローカルリポジトリ)へのファイル同期(git pull)”参照)
    $ git pull
    1. pull は、フェッチ(fetch)とマージ(merge)を同時に行います。
      1. ローカルとリモート双方でファイルが更新されている場合は、コンフリクト(衝突、競合)が発生します。
      2. コンフリクトの解決方法について、ここでは説明しません。別の解説書やインターネットの情報を参照願います。
    2. ファイルの修正を始める前に、リモートのファイルが更新されていないかを確認すると良いでしょう。
  3. 自分のPCに新たにリモートリポジトリ取り込んで、ローカルリポジトリを作成するには、クローン(git clone)コマンドを実行します。(4.2, “PCでクローン(git clone)”参照)

6.2.2. ワーキングツリーのファイルを修正

  1. 作業ツリー内のファイルを修正します。
    1. ここでファイルの編集、追加、削除などを行います。
  2. 修正されたファイルをステージングエリアに追加します。(git add [ファイル名…​])
    1. コミットしようとする修正済みファイルに対して、Gitの管理に追加します。
  3. コミット(git commit)します。これは、ステージングエリアのファイルと履歴情報をGitリポジトリに格納し、保持することです。
    1. コミット済みのファイルは、後からでもコミット時点のファイルを取り戻すことができます。

6.2.3. リモートリポジトリに修正を反映

  1. リモートリポジトリを使っている場合は、プッシュ(5.6, “GitLabへのファイル同期(git push)”参照)します。これは、ローカルリポジトリのコミット状態を、リモートリポジトリに反映させます。
    1. リモートリポジトリを、誰かが先に更新していた場合は、プッシュが拒否されます。この場合は、リモートの変更内容を確認しローカルに反映するなどの調整が必要です。

6.2.4. status (git status)

  • statusは、前回のコミット済み状態と比較して、ファイルの変更状態を表示します。
    $ git status
    On branch main
    Your branch is up to date with 'origin/main'.
     
    Untracked files:  (1)
      (use "git add <file>..." to include in what will be committed)
            gitlab-start.adoc
     
    nothing added to commit but untracked files present (use "git add" to track)
    1. Untracked files:(未追跡ファイル) gitlab-start.adoc があると表示
  • ステージング(git add)して、状態を確認(git status)
    $ git add gitlab-start.adoc  (1)
     
    $ git status
    On branch main
    Your branch is up to date with 'origin/main'.
     
    Changes to be committed:
      (use "git restore --staged <file>..." to unstage)
            new file:   gitlab-start.adoc  (2)
    1. gitlab-start.adoc を、git管理下に追加
    2. 新しいファイルがステージングエリアに追加されたことを確認

6.2.5. 変更履歴(log)

  • 変更履歴を確認するには、git logコマンドを使います。(5.3, “ログ表示(git log)”参照)
    $ git log
    commit dc8c0a9cf3a85d5a5bd4e1df314cc9265319a695 (HEAD -> main)
    Author: Hikari KOSHINO <koshihikari@example.com>
    Date:   Sat Feb 20 20:23:14 2021 +0900
     
        GitLab入門を書き始める。gitlab-start.adoc を追加
     
         On branch main
                new file:   gitlab-start.adoc
     
    commit 8d71b29f6626904efcf7c9307f9d9177e36402a8 (origin/main)
    Author: Hikari KOSHINO <koshihikari@example.com>
    Date:   Sat Feb 20 16:07:08 2021 +0900
     
        READMEを編集した。
        Update README.md
  • ログを1行で表示するには、git log –onelineを使います。
    $ git log --oneline
    b1589dc (HEAD -> main, origin/main) GitLab入門を更新
    dc8c0a9 GitLab入門を書き始める。gitlab-start.adoc を追加
    8d71b29 READMEを編集した。 Update README.md
    12fdae0 add README

6.2.6. 差分表示(git diff)

  • git diffは、前回のコミット済みファイルと比較して、ファイルの変更内容を表示します。
      $ git diff  (1)
     diff --git a/gitlab-start-git.adoc b/gitlab-start-git.adoc
     index 7cbd764..9aa6425 100644
     --- a/gitlab-start-git.adoc
     +++ b/gitlab-start-git.adoc
     @@ -11,14 +11,14 @@ Gitを使う上で、次の3つエリア、3つの状態を理解してくださ
      .Gitの3つのエリア
      image::git-start-01.png[scaledwidth="70%", align="center"]
     -作業ツリー(ワーキングディレクトリ)::
     +作業ツリー(ワーキングツリー)::
      1つのGitプロジェクトのためのファイルやディレクトリが格納されている。 +
      実際に、このディレクトリ内のファイルに対し、編集、更新する作業を行います。 +
      修正済み状態:::
      ファイルを編集、修正を行った状態で、Gitには、修正が反映されていない状態。
      ステージングエリア::
     -次のコミットに含まれるファイルの情報を格納している。インデックスとも呼ばれ る。
     +修正済み状態のファイルを、次のコミットに含めるファイルの情報を格納している。インデックスとも呼ばれる。
    1. 編集済みファイルがあれば、コミットからの変更を表示(git diff (オプションなし))
  • コミットID(git logで表示するコミット毎のハッシュ値)を使うと、コミット間の差分を表示します。
     $ git diff 3606427 2fd1a82  (1)
     diff --git a/gitlab-start.adoc b/gitlab-start.adoc
     index 15cf26e..d43764c 100644
     --- a/gitlab-start.adoc
     +++ b/gitlab-start.adoc
     @@ -25,14 +25,14 @@ Ver.0.1 2021-02-20
      // フォントファイルを置くフォルダ(相対PATH)
      :pdf-fontsdir: fonts
      // スタイルファイルを指定(相対PATH)
     -//:pdf-theme: style/sample_spec_style.yml
     +:pdf-theme: style/sample_man_style.yml
      // サブタイトルセパレータ
      :title-separator: ::
      // ロゴ画像ファイルを指定(相対PATH)
     -//:title-logo-image: image:theme/sample_portal_logo4.png[]
     +:title-logo-image: image:theme/sample_portal_logo4.png[]
      // 表紙背景画像ファイルを指定(相対PATH)
     -//:title-page-background-image: image:theme/handring-info.svg[]
     +:title-page-background-image: image:theme/handring-info.svg[]
    1. 短縮形のコミットIDを使うことも可能です。

7. Gitと連携する開発環境

Visual Studio Code (VSCode)は、マイクロソフトが無料で公開している軽量なコードエディタで、拡張機能を使用してGitやGit Bashと連携した統合開発環境として利用できます。

VSCodeは、Windows, macOS, Linuxなどに対応しており、どのOSでも同様の使い方が可能です。また、プログラム開発だけではなく、拡張機能によりmarkdownやasciidoc,LaTeXなど文書作成環境としても利用できます。

gitlab start 01 図 14. VSCodeによるGit利用環境

7.1. VSCodeのダウンロードとインストール

  • Visual Studio Code公式サイト ( https://code.visualstudio.com ) vscode install 01 図 15. VSCodeの公式サイト
  • 公式サイトから自分のPC環境に合ったインストーラーをダウンロードします。
    • Windows 10であれば、User Installer 64 bit (Intel 64環境の場合)をダウンロードします。(自分だけで使うのであればSystem Installerは不要)
    • macOSの場合、IntelかApple Siliconかを選択します。
    • Linuxの場合は、OSのパッケージ管理ツールでインストール可能です。また、Snap版で最新版を利用できます。
  • 一般ユーザ権限で、インストーラを実行してインストールします。(Windows)

7.1.1. 拡張機能

VSCodeは、拡張機能を追加することで、使い勝手が良くなります。 お勧めの拡張機能を紹介します。

  • Japanese Language Pack for VS Code
    • VSCodeのメニューや操作画面を日本語化します。 vscode install 03 図 16. Japanese Language Pack for VS Code
      • 拡張機能のメニューを表示
      • japanese を検索
      • Japanese Language Pack for VS Codeをインストール
  • Git Graph
    • Gitログを見やすく表示します。
    • ログの詳細や、変更があったファイルの表示、差分表示などをマウス操作で行うことができます。 vscode install 04 図 17. Git Graph
      • git を検索
      • Git Graphをインストール
  • vscode-pdf
    • PDFファイルを表示します。 vscode install 06 図 18. vscode-pdf
      • ext:pdf を検索
      • vscode-pdfをインストール

7.1.2. ターミナルの規定のシェル設定

Git Bashがインストールされていれば、ターミナルを開いてコマンドでの操作ができます。 クローン(git clone)やpull, pushなど、リモートリポジトリのSSH鍵認証などの操作をVSCodeから行う場合不具合があり、コマンドでの操作の方が簡単です。

  • ターミナルの規定のシェルを設定します。
    • 上部の「ターミナル」メニューから「新しいターミナル」を開きます。
    • ターミナルのプルダウンメニューから「規定のシェル設定」を開きます。 vscode git bash 06 図 19. ターミナルのプルダウンメニュー
    • 優先するターミナルシェルの選択から「Git Bash」を選択します。 vscode git bash 07 図 20. 優先するターミナルシェルを選択します。

7.2. Gitの操作

7.2.1. リポジトリを開く

gitlab vscode 01

図 21. フォルダーを開く

  • 「ファイル」メニューから「フォルダーを開く」でリポジトリを開く(Macの場合「開く…​」)

7.2.2. ステージング(git add)

gitlab vscode 02

図 22. ステージング

  1. Gitの機能を選択
  2. 変更済みファイル M:変更 U:未追跡ファイル ファイル名右の + をクリックすると、ステージングエリアに追加される。
  3. 変更されたファイルの差分(diff)が表示される。
  4. ステージングエリアのファイル

7.2.3. コミット(git commit)

gitlab vscode 03

図 23. コミット

  1. ステージングエリアのファイル名右の - をクリックすると、ステージング解除となる。
  2. コミットメッセージを入力
  3. ✔︎ チェックをクリックすると、コミットを実行する。

7.2.4. ログ(git log)

gitlab vscode 04

図 24. ログ

  • ログ表示(Git Graphアイコン)をクリックして、git logを表示
  • 任意のログをクリックすると詳細が表示され、変更されたファイルの差分などもマウス操作で見ることができます。

vscode git bash 12

図 25. ログ詳細

vscode git bash 14

図 26. 差分表示

7.2.5. プシュ & プル

VSCodeのメニューにも「プッシュ」や「プル」がありますが、ssh認証に失敗するなど不具合があるため、ターミナルからコマンドにより操作します。 (ssh-agentなどを利用してVSCodeから操作する方法もありますが、SSHの設定やssh-agentなどが必要となることから、コマンドによる操作のほうが容易)

リスト 1. プッシュに失敗した際のメッセージ

> git push origin main:main
Permission denied, please try again.
Permission denied, please try again.
git@gitlab.example.com: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
fatal: Could not read from remote repository.
 
Please make sure you have the correct access rights
and the repository exists.

リスト 2. ターミナルからgit logコマンドを実行

$ git log
commit bedd7c3628d7317c2bd3cfa1f2d6eadde26d243b (HEAD -> main)
Author: Hikari KOSHINO <koshihikari@example.com>
Date:   Wed Mar 3 20:01:05 2021 +0900
 
    2021-03-03 Vimの使い方を追加した。
 
commit 927207f43755f641fcbb68f39bdd1bdface53d27 (origin/main, origin/HEAD)
Author: Hikari KOSHINO <koshihikari@example.com>
Date:   Wed Mar 3 18:11:20 2021 +0900
 
    2021-03-03 PDFに改ページとコマンドラインを入れてみた。

リスト 3. ターミナルからgit pushコマンドを実行

$ git push
Enter passphrase for key '/Users/koshihikari/.ssh/id_ed25519':
Enumerating objects: 12, done.
Counting objects: 100% (12/12), done.
Delta compression using up to 8 threads
Compressing objects: 100% (7/7), done.
Writing objects: 100% (7/7), 85.17 KiB | 3.41 MiB/s, done.
Total 7 (delta 4), reused 0 (delta 0)
To gitlab.example.com:koshihikari/gitlab-start.git
   927207f..bedd7c3  main -> main

8. テキストエディタ vim

vi(vim)は、UNIX(Linux)で使われる標準的な(ほとんど全てのUNIXに入っている)エディタです。 vi(vim)には「ノーマルモード」と「挿入モード」があり、多くのコマンドがあるため、初心者にはわかりづらく、とっつきにくい印象ですが、慣れてくれば素早くファイル編集ができます。

Linuxでは、viの機能を拡張したvim(Vi IMproved)が標準のviに置き換えられていることが多くなっています。

8.1. ファイルのオープン (起動)

既存のファイル、または新しいファイルに対してエディタを起動するには、vi(またはvim)コマンドを使います。

vim [filename]
例: vim hoge.txt
既存ファイルがあれば、そのファイルを開きます。
ファイルが無ければ、新規のファイルとして編集することが出来ます。

新しいファイルの場合、画面は次のようになります。起動直後は、「ノーマルモード」ですのでご注意ください。キーを入力すると、コマンドと解釈されます。

~
~
~
~
~
~
~
"hoge.txt" [New File]                                         0,0-1       All

8.1.1. 文字を入力する

vi(vim)は「ノーマルモード」と「挿入モード」があります。 挿入モード にするには何通りかの方法がありますが、一番標準的なコマンドは、[i] を押すやり方です。

i は表示されませんが、一番下の行が -- INSERT -- に変わり、これを押した後にタイプした文字が全て画面に入力されます。

次の操作(カーソルを移動する場合も)をしたい場合は、[Esc] キーを押して ノーマルモード に戻ります。

表 1. vi 入力モードに関連するコマンド

コマンド内容
a カーソルの後にテキストを入力
A カレント行の末尾にテキストを入力
i カーソルの前にテキストを入力
I 行の先頭にテキストを入力
o カーソル位置の下にテキストを挿入する空行をオープン
O カーソル位置の上にテキストを挿入する空行をオープン

8.2. ファイルのセーブと終了

編集したファイルを保存して終了するには、 ZZ (大文字)とします。 ただし、「挿入モード」の場合は、 [Esc] キーを押して「ノーマルモード」にしてから、 ZZ とタイプします。

ファイルを保存するだけの場合は、 :w とします。 別名で保存するには、 :w filename とファイル名を指定します。

何も編集をしていない状態で終了する場合は、 :q とタイプします。 終了と保存を同時にするには、 :wq とタイプします( :wqZZ は同じ)。

編集した内容がめちゃくちゃで、最初から編集をし直したい場合は、 :e! としてファイルを再読込します。 また、編集内容を破棄して強制終了するには、 :q! とします。

8.3. 基本的な編集操作

8.3.1. カーソルを移動する

viでカーソルを移動するには、「j」「k」「l」「h」キーを使います。


 k
k キーは上方向に移動します。
← h   l → h キーは左方向に移動します。
l キーは右方向に移動します。
 j
.  j キーは下方向に移動します。

8.4. テキスト削除

削除コマンド x を使うと、カーソル位置のテキストを削除します。 単語単位削除は dw 、行削除は dd を使います。

さらに、これらのコマンドの前に数字を入力すると、コマンドの対象範囲が指定できます。 例えば、 2x は 2 文字、 2dw は 2 word、 2dd は 2 行の削除となります。

8.4.1. 文字コード, 改行コードを指定して保存

vim でファイルを開き、任意の文字コードでファイルを保存 (変換) ができます。

vim でファイルを開き、vim のコマンドモードで以下のコマンドで文字コードを指定すると、保存するときに、指定した文字コードに変換されます。

8.4.2. 文字コードを指定

 :setl fenc=utf-8  (1)
  1. 文字コードを指定 (setl=setlocal, fenc=fileencoding)

8.4.3. 改行コードを指定

 :setl ff=unix  (1)
  1. 改行コードを指定 (setl=setlocal, ff=fileformat)

8.4.4. 上記、文字コードを指定した後に、ファイルを保存します。

:w

8.4.5. 文字化けしたファイルを開き直す

自動判別に失敗した場合は、文字コードを指定してファイルを開き直すことができます。

ファイルを開き文字化けした場合は、以下のコマンドでファイルを開き直します。

:e ++enc=文字コード

ファイルを開き ˆM という文字が表示される場合、改行コードを変更してファイルを開き直します。

:e ++ff=改行コード

付録 A: 参考情報

参考文献

  • [1] サル先生のGit入門, 株式会社ヌーラボ, https://backlog.com/ja/git-tutorial/ (参照 2021-03-09)
  • [2] サルでもわかるGit入門, 大串 肇 (著), アクツ ユミ (著), 一戸 健宏 (著), 兼清 慮子 (著), 齋木 弘樹 (著), 清野 奨 (著), 福嶌 隆浩 (著), 株式会社ヌーラボ (著), インプレス, 2018-09-25, ISBN-13 978-4295004837
  • [3] GitLab実践ガイド, 北山 晋吾 (著), インプレス, 2018-02-01, ISBN-13 978-4295003038
  • [4] Gitが、おもしろいほどわかる基本の使い方33 改訂新版, 大串 肇 (著), 久保 靖資 (著), 豊沢 泰尚 (著), エムディエヌコーポレーション, 2019-06-28, ISBN-13 978-4844368687
  • [5] いちばんやさしい Git 入門教室, 大澤 文孝 (著), ソーテック社, 2019-08-25, ISBN-13 978-4800712462
  • [6] 【絶対理解できる】Gitとは?特徴やできることまとめ!, 兵政和, https://www.sejuku.net/blog/5756 (参照 2021-03-09)
  • [7] Pro Git, Scott Shacon, Ben Straub, 高木正弘(訳), Yusuke Sato(訳), 2nd Edition (2014), https://git-scm.com/book/ja/v2 (参照 2021-03-15), https://progit-ja.github.io (Pro Git 日本語版電子書籍公開サイト 参照 2021-03-15), License CC BY-NC-SA 3.0

改版履歴

Ver.改版日 改版内容
1.0 2021-04-28初版 (1st Edition)
1.0 2021-07-26初版 (1st Edition) ライセンス変更(CC-BY)
1.1 2022-03-08デフォルトブランチをmainに変更

この文書について

GitLab 入門
発行 農林水産研究情報総合センター
農林水産省 農林水産技術会議事務局 筑波産学連携支援センター 情報システム課
問い合わせ総合窓口
E-Mail request AT affrc.go.jp
農林水産研究情報総合センター URL
URL https://itcweb.cc.affrc.go.jp/
byこの文書は、 クリエイティブ・コモンズ 表示 4.0 >国際 ライセンス の下に提供されています。
documents/guide/gitlab/start.txt · 最終更新: 2022/05/27 18:24