GitLabの初期設定とGit for Windows (Git Bash) による運用

Table of Contents

GitLabの登録

GitLabの登録をこちらで済ませておきます.

Git for Windowsのインストール

Git for Windowsをこちらのサイトからダウンロードし,インストールします.基本的にデフォルトのままでよいと思いますが,Adjusting your PATH environmentUse Git from Git Bash onlyを選んでおくとより安全です.
以後はWindowsのデスクトップにGit Bashのアイコンが作成され,ダブルクリックするとGit Bashのターミナルが開きます.

Gitの初期設定

Git Bashを開き,以下の初期設定を行います.ただし,エディタは秀丸を使用しています.user.nameおよびuser.emailにはGitLabに登録したものを入力します.ダブルクオーテーションマークも必要です.この作業はインストール直後の初回だけです.

$ git config --global core.editor '/C/Program Files (x86)/Hidemaru/Hidemaru.exe' //fu8
$ git config --global user.name Your Name
$ git config --global user.email your@email.com
$ git config --global core.quotepath false

SSHの設定と公開鍵のGitLabへの登録

Git BashのカレントディレクトリをGit for Windowsをインストールしたディレクトリ下の Git/usr/bin に,以下のように移動します.

$ cd "/C/Program Files/Git/usr/bin"

先と同じメールアドレスを用い,SSHキーを生成します.Enter passphrase はパスワードの設定ですが,簡便性のため無しとしました.

$ ssh-keygen -t rsa -C 'your@email.com'

GitLabのツールバーの右端にある丸いマークをクリックし,settings をクリックします.左端メニューの SSH Keys をクリックします.すると,Add an SSH key が現れますので,Key のフォームに公開鍵をコピーし,Title に適当な名称を付け,Add key をクリックします.なお,公開鍵は通常以下に作成されているはずです.これをエディタで開き,すべてコピーし(最後にメールアドレスが付きましたがこれもコピー),GitLabの Key フォームに貼り付けます.

C:\Users\username\.ssh\id_rsa.pub

GitLabに接続できないとき

git push で以下のようなエラーが出る場合の対処法です.こちらを参考にさせていただきました.

git@gitlab.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

もう一度SSHキーペアを作り直します.

ssh-keygen -t rsa -C 'your@email.com'

以下の手順で ssh-agent に秘密鍵を登録します.

$ ssh-add -l
Could not open a connection to your authentication agent.
$ eval `ssh-agent`
Agent pid 386
$ ssh-add -l
The agent has no identities.
# id_rsa_gitlab は秘密鍵名です
$ ssh-add ~/.ssh/id_rsa_gitlab
Identity added: /home/teem/.ssh/id_rsa_gitlab (/home/teem/.ssh/id_rsa_gitlab)
# GitLabへの接続確認
$ ssh -T git@gitlab.com
Welcome to GitLab, @jsasaki!

CloneとForkについて

Clone(クローン)は通常,リモートリポジトリをローカルリポジトリにコピー(複製)することです.一方,Forkは元々はGithubの機能で(GitLabでも使えます),他人のリポジトリ(オリジナルリポジトリ)を自分のリポジトリとしてコピー(複製)し,そのことがオリジナルリポジトリの開発者に通知される仕組みです.オリジナルリポジトリへの貢献を前提としたものがForkです.よって,単に他人のリポジトリを自分のリポジトリとしてコピーしたいだけの場合は Clone とすべきです.

リモートリポジトリを GitLab にクローンする

オープンソースモデル等のリモートリポジトリをGitLab のプロジェクトとして,直接クローンすることができます.
GitLabにログインし,トップページの右上にある緑のアイコン New Project をクリックします.
次に,Import project タブをクリックし,下図のように Repo by URL をクリックします.

次に,下図のように,Git repository URL フォームに入力します.CloneHTTPS をコピペすればよいでしょう.ROMSの場合はGit Bashで,git clone https://www.myroms.org/git/src MyDir のようにクローンする場合は,https://www.myroms.org/git/src を入力します.リポジトリによっては username と password を要求する場合がありますが,そのときは Username (optional)Password (optional) フォームにそれぞれ入力します.
Mirror repository をチェックすると,リポジトリを自動更新するようです.ただし,競合に注意しましょう.
Project name フォームには適当なプロジェクト名を入力します.
Project URLProject slug はデフォルトのままで構いません.
Project description (optional) にはプロジェクトの説明を書いておきましょう.
GitLab にはフォルダに相当する group を作成する機能があります.これを利用する場合は,Project URLの下にある Create a group をクリックして適切に設定します.
Visibility Level はとりあえず非公開の Private (デフォルト)でよいでしょう.
最後に右下の緑のアイコン Create project をクリックして,プロジェクトを構築します.

GitLabのプロジェクトをローカルにクローン

上で作成したものを含め,GitLab に存在するプロジェクトをローカルにクローンする方法を説明します.
ローカルPCの Git Bash を開き,クローンしたいディレクトリに移動します.クローンを実行するとこのディレクトリの中にプロジェクトの短縮名で 新たなディレクトリ が作成されます.
クローンしたい GitLab プロジェクトを開き,右上の青いアイコン Clone をクリックして現れる,Clone with SSH の,git@gitlab.com で始まる文字列をコピーし,Git Bash に貼り付け,以下のように実行します.

$ git clone git@gitlab:username/project.git

この例では新たに project ディレクトリが作成され,その中にプロジェクトがコピーされます.

GitLab にプッシュ

ローカルで作成したファイルをローカルリポジトリに登録する方法はこちらを参照ください.以下の例では拡張子が F のファイルをインデックスに登録し,サブディレクトリ sub に存在する makefile をインデックスに登録し,インデックス登録状況を確認してから,ローカルリポジトリにコミットしています(エディタが立ち上がり,コメントを入力).最後に git push で GitLab にプッシュします.

$ git add *.F
$ git add sub/makefile
# ファイルを管理から外す(ファイルは残す)
$ git rm --cached test.F
# バージョン管理されていて,変更のあったすべてのファイルがaddされる
$ git add -u
$ git status
$ git commit
$ git push

特定のファイルやフォルダを Git の管理から除外する

ローカルにおいて,管理から外したいファイル等の情報を含むテキストファイル .gitignore.git と同じディレクトリに作成します.path はローカルリポジトリのディレクトリからの相対 path で表現し,path を含めない場合はサブディレクトリ中を含めすべてにマッチします. 例えば,output1999 ディレクトリ,拡張子がmod または o のすべてのファイル(サブディレクトリ中を含む),ファイル名が teem.out のすべてのファイル(サブディレクトリ含む)を Git 管理から除外するには以下のようにします.

/output1999/
*.mod
*.o
teem.out

先頭の / はローカルリポジトリのディレクトリを意味し,末尾の / はディレクトリを意味します(末尾の / を付けないと,ディレクトリまたはファイルにマッチします).*はワイルドカードで正規表現が使えるようです. 詳細はこちらを参考ください.

ローカルリポジトリを GitLab の新規プロジェクトとして登録する

これは結構はまるので,厳密にはこの見出しと整合しませんが,同様のことができる方法として紹介します. 最初にGitLabで空の新規プロジェクトを作成します.README.md は作成しておくとよいでしょう.他は空の状態です.次にこれをローカルに clone します.ローカルの Git Bash を開き,ローカルリポジトリを作成したいディレクトリに移動し,以下のようにcloneします.Clone-with-SSH の部分は ProjectClone アイコンをクリックすると現れる,git@gitlab.com:username/project.git のような部分です.このフォルダの下に project名 のフォルダが作成され,その中にローカルリポジトリが作成されます.

$ git clone git@gitlab.com:username/project.git

次に,ローカルリポジトリに登録したいファイルをコピーし(Windowsのエクスプローラ等で),Git Bash でローカルリポジトリに移動します.ローカルリポジトリに以下のようにファイルを追加,コミットし,最後に GitLab にpushします.

$ git add src/*.f90  # srcフォルダの下の拡張子f90のファイルを追加
$ git add *.sh  # 現在のフォルダの拡張子shのファイルを追加
$ git status  # 確認
$ git commit    # エディタが立ち上がるのでコメントを入力
$ git push

PCとスパコンの両者で作業する場合

GitLabをリモートリポジトリとするプロジェクトで,PCとスパコンの両者で作業をすることを考えます.PCのローカルリポジトリで作業し,GitLabに git push した状態とします.この変更をスパコンのローカルリポジトリに反映するには,スパコンのローカルリポジトリで以下のようにするたけです.

$ git pull

ただし,競合等が起こる可能性があり,詳細は後日追記する予定です.

他者の GitLab プロジェクトを自身の GitLab プロジェクトとしてclone

最初にCloneしたいGitlabのプロジェクトをExportします(Downloadボタンではありません).こちらの方法に従い,Exportしたいプロジェクトの左側にある Settings をクリックし,Export projectExpand をクリックします.Generate new export をクリックします.しばらくして準備が整うとメールで Export download のリンクが送信されます.あるいはそのまましばらく待つと同じ画面に Download export ボタンが現れますので,それをクリックすればローカルにダウンロードできます. なお,FVCOM の場合は FVCOM の GitLab 内で自分用にForkし,それをExport する必要があるようでした.すなわち,FVCOMのGitLab の Master project から直接 Export することはできないようでした. 次に,GitLab において右上にあるNew Project をクリックし,上のタブから Import project をクリックし,Gitlab export をクリックします.Project nameProject slug 等を入力してから,ファイルを選択 をクリックし,先にダウンロードしたファイルを選択します.最後に Import project をクリックします. なお,Import project にはgit Repo by URL のタブもありますが,これではうまくいきませんでした.一方,Import Project ではGithub も選択できますので,Github レポジトリの Fork は簡単と思われます.

GitLab のプロジェクトを削除

削除したいプロジェクトを選択し,左端メニューの下端の Settings をクリックし,下端の Advanced の右端にある Expand をクリックし,下端の Remove project をクリックし,指示に従います.

git pushの取り消し

誤って git push してしまい,元に戻したい場合の対処方です.まず,ローカルでの変更そのものを取り消します.

# 直前のコミットを取り消す
$ git reset --hard HEAD^

次に push します.

# 強制的にpushする
$ git push -f origin master

しかし,これですと,以下のようなエラーとなるかもしれません.

$ git push -f origin master
Total 0 (delta 0), reused 0 (delta 0)
remote: GitLab: You are not allowed to force push code to a protected branch on this project.
To gitlab.com:username/projectname.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@gitlab.com:username/projectname.git'

これに対処するには,GitLab で Protected の状態を Unprotected にする必要があります.GitLabの当該リポジトリ(プロジェクト)において,左端メニューの下端にある,SettingsRepository をクリックし,Protected BranchesExpand し,さらに,Protected BranchesExpand します.そして,オレンジ色の Unprotected アイコンをクリックします.その後,上記の git push -f origin master を実行します.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください