GitLab入門 GitLab入門 AsciiDoc文書作成入門
農林水産技術会議事務局 筑波産学連携支援センター
Ver.1.1, 2022-03-08
GitとGitLabについて、基本的な使い方をまとめてみました。
プログラム作成に限らず、仕様書やマニュアルなど更新、改版が必要な文書を作成する際、これらのバージョン管理や共同での文書作成に役に立つツールとなるでしょう。
プログラムソースコードやテキスト文書、ファイルの変更履歴(バージョン)を管理することで、過去の変更箇所を確認したり、特定の時点の内容に戻すことが可能となります。
ファイル名に「最新」や「日付」をつけて履歴管理すると、どのファイルが最新の正しいものかが分かりにくくなります。
バージョン管理システムを使うことで、何時、誰が変更したといった履歴の記録や特定時点のファイルを取り出すことが可能となります。
Gitは、ファイルのバージョン管理を容易にするシステムです。
Gitは、分散型のバージョン管理システムで、個人のPCにリポジトリを作成してバージョン管理ができます。 更にリモートリポジトリ(今回の説明では、GitLab)と連携して、共同でプログラム開発や文書作成をするとができます。
Git公式サイト https://git-scm.com/
図 1. Git公式サイト
GitLabは、共同で利用するリモートリポジトリのサーバとして機能し、更に共同作業を支援する課題管理やWikiなどの機能を備えたWebサービスで、クラウドサービスとして有名なGitHubと同様の機能を備えています。 また、オープンソース版のGitLab Community Edition (GitLab CE)があり、オンプレミスでのサーバ運用が可能です。
GitLab日本語情報サイト https://www.gitlab.jp/
図 2. GitLab日本語情報サイト
GitLabでバージョン管理するには、Gitが動作する環境を個人のPCに設定する必要があります。
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. 改行コードの取り扱いオプション
インストールが完了したら、Git Bashを起動します。(アプリケーションメニューの「Git」配下の「Git Bash」を起動します。)
Git Bashは、WindowsでGitコマンドを操作するツールで、ls, catなどLinuxと同様の基本コマンドも動作します。
図 4. Git Bash 画面イメージ
Gitでは、誰が変更したのかを記録するために、ユーザ名とメールアドレスを登録する必要があります。
$ git config --global user.name "Hikari KOSHINO" $ git config --global user.email "koshihikari@example.com"
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)
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)
リモートリポジトリと通信する場合に、SSHの公開鍵で認証します。
http(s)での利用も可能ですが、SSHの利用をお勧めします。
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]-----+
作成したSSH公開鍵(~/.ssh/id_ed25519.pub)を、GitLabに登録します。
$ cat ~/.ssh/id_ed25519.pub ssh-ed25519 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA koshihikari@mng-dpc-17018
図 5. SSH公開鍵登録
Gitは、プログラム開発におけるソースコードのバージョン管理を主な目的として開発されたツールです。
プログラム開発では、関連する複数のファイルを1つのディレクトリ(フォルダ)にまとめて管理し、これをリポジトリといいます。
GitLabでは、1つの目的にむけてバージョン管理や課題管理を行う単位をプロジェクトとして作成、管理します。
GItLabでプロジェクト作成時点では、ローカルリポジトリがありません。コマンドラインによる手順が表示されますので、この手順に沿ってローカルリポジトリを作成します。
図 8. ローカルリポジトリ作成手順
koshihikari@mng-dpc-17018 MINGW64 ~ $ cd Apps/Documents/ (1)
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.
koshihikari@mng-dpc-17018 MINGW64 ~/Apps/Documents $ cd gitlab-start (1)
koshihikari@mng-dpc-17018 MINGW64 ~/Apps/Documents/gitlab-start (main) $ touch README.md (1)
ユーザ名@PC名 MINGW64 ワーキングディレクトリ (ブランチ名) koshihikari@mng-dpc-17018 MINGW64 ~/Apps/Documents/gitlab-start (main) $ <= プロンプト(入力待ち)
touchコマンドで作成したファイルは、まだGitの管理下ではありません。以下の手順でGitの管理に取り入れます。また、リモートリポジトリ(GitLab)に反映するpushも行います。
koshihikari@mng-dpc-17018 MINGW64 ~/Apps/Documents/gitlab-start (main) $ git add README.md (1)
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
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'.
GitLabには、テキストファイルの編集機能があります。markdownやasciidoc形式にも対応しており、最初に作成したREADME.mdやWikiなどの編集が可能です。
$ ls README.md $ cat README.md (1)
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(+)
$ cat README.md # GitLab入門 GitLabを初めて利用される方向けの案内を作成します。
$ 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
$ ls
gitlab-start.adoc README.md
$ 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)
$ 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)
$ git commit
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 #
$ git commit [main dc8c0a9] GitLab入門を書き始める。gitlab-start.adoc を追加 1 file changed, 35 insertions(+) create mode 100644 gitlab-start.adoc
$ 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
$ 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
Gitを使ってバージョン管理する上で必要な、基本的な知識を説明します。
3, //準備//を参照して、Gitの利用環境を準備してください。
git config --global core.quotepath false
を設定します。Gitを使う上で、次の3つエリア、3つの状態を理解してください。
図 13. Gitの3つのエリア
$ git add [ファイル名...]
$ git commit
$ git pull
$ 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)
$ 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)
$ 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
$ git log --oneline b1589dc (HEAD -> main, origin/main) GitLab入門を更新 dc8c0a9 GitLab入門を書き始める。gitlab-start.adoc を追加 8d71b29 READMEを編集した。 Update README.md 12fdae0 add README
$ 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には、修正が反映されていない状態。 ステージングエリア:: -次のコミットに含まれるファイルの情報を格納している。インデックスとも呼ばれ る。 +修正済み状態のファイルを、次のコミットに含めるファイルの情報を格納している。インデックスとも呼ばれる。
$ 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[]
Visual Studio Code (VSCode)は、マイクロソフトが無料で公開している軽量なコードエディタで、拡張機能を使用してGitやGit Bashと連携した統合開発環境として利用できます。
VSCodeは、Windows, macOS, Linuxなどに対応しており、どのOSでも同様の使い方が可能です。また、プログラム開発だけではなく、拡張機能によりmarkdownやasciidoc,LaTeXなど文書作成環境としても利用できます。
VSCodeは、拡張機能を追加することで、使い勝手が良くなります。 お勧めの拡張機能を紹介します。
japanese
を検索git
を検索ext:pdf
を検索Git Bashがインストールされていれば、ターミナルを開いてコマンドでの操作ができます。 クローン(git clone)やpull, pushなど、リモートリポジトリのSSH鍵認証などの操作をVSCodeから行う場合不具合があり、コマンドでの操作の方が簡単です。
図 22. ステージング
図 24. ログ
図 25. ログ詳細
図 26. 差分表示
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
vi(vim)は、UNIX(Linux)で使われる標準的な(ほとんど全てのUNIXに入っている)エディタです。 vi(vim)には「ノーマルモード」と「挿入モード」があり、多くのコマンドがあるため、初心者にはわかりづらく、とっつきにくい印象ですが、慣れてくれば素早くファイル編集ができます。
Linuxでは、viの機能を拡張したvim(Vi IMproved)が標準のviに置き換えられていることが多くなっています。
既存のファイル、または新しいファイルに対してエディタを起動するには、vi(またはvim)コマンドを使います。
vim [filename] 例: vim hoge.txt 既存ファイルがあれば、そのファイルを開きます。 ファイルが無ければ、新規のファイルとして編集することが出来ます。
新しいファイルの場合、画面は次のようになります。起動直後は、「ノーマルモード」ですのでご注意ください。キーを入力すると、コマンドと解釈されます。
~ ~ ~ ~ ~ ~ ~ "hoge.txt" [New File] 0,0-1 All
vi(vim)は「ノーマルモード」と「挿入モード」があります。 挿入モード にするには何通りかの方法がありますが、一番標準的なコマンドは、[i] を押すやり方です。
i
は表示されませんが、一番下の行が -- INSERT --
に変わり、これを押した後にタイプした文字が全て画面に入力されます。
次の操作(カーソルを移動する場合も)をしたい場合は、[Esc] キーを押して ノーマルモード に戻ります。
表 1. vi 入力モードに関連するコマンド
コマンド | 内容 |
---|---|
a | カーソルの後にテキストを入力 |
A | カレント行の末尾にテキストを入力 |
i | カーソルの前にテキストを入力 |
I | 行の先頭にテキストを入力 |
o | カーソル位置の下にテキストを挿入する空行をオープン |
O | カーソル位置の上にテキストを挿入する空行をオープン |
編集したファイルを保存して終了するには、 ZZ
(大文字)とします。 ただし、「挿入モード」の場合は、 [Esc
] キーを押して「ノーマルモード」にしてから、 ZZ
とタイプします。
ファイルを保存するだけの場合は、 :w
とします。 別名で保存するには、 :w filename
とファイル名を指定します。
何も編集をしていない状態で終了する場合は、 :q
とタイプします。 終了と保存を同時にするには、 :wq
とタイプします( :wq
と ZZ
は同じ)。
編集した内容がめちゃくちゃで、最初から編集をし直したい場合は、 :e!
としてファイルを再読込します。 また、編集内容を破棄して強制終了するには、 :q!
とします。
viでカーソルを移動するには、「j」「k」「l」「h」キーを使います。
↑ k | k キーは上方向に移動します。 | ||
← h | l → | h キーは左方向に移動します。 l キーは右方向に移動します。 |
|
j ↓ | . | j キーは下方向に移動します。 |
削除コマンド x
を使うと、カーソル位置のテキストを削除します。 単語単位削除は dw
、行削除は dd
を使います。
さらに、これらのコマンドの前に数字を入力すると、コマンドの対象範囲が指定できます。 例えば、 2x
は 2 文字、 2dw
は 2 word、 2dd
は 2 行の削除となります。
vim でファイルを開き、任意の文字コードでファイルを保存 (変換) ができます。
vim でファイルを開き、vim のコマンドモードで以下のコマンドで文字コードを指定すると、保存するときに、指定した文字コードに変換されます。
:setl fenc=utf-8 (1)
:setl ff=unix (1)
:w
自動判別に失敗した場合は、文字コードを指定してファイルを開き直すことができます。
ファイルを開き文字化けした場合は、以下のコマンドでファイルを開き直します。
:e ++enc=文字コード
ファイルを開き ˆM という文字が表示される場合、改行コードを変更してファイルを開き直します。
:e ++ff=改行コード
参考文献
改版履歴
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/ |
この文書は、 クリエイティブ・コモンズ 表示 4.0 >国際 ライセンス の下に提供されています。 |