- 投稿日:2020-11-08T21:50:03+09:00
【自主学習の記録 part1】GitLabの基本的な使い方その1
概要
現場で使用しているGitLab等のサービスに関して、私自身の知識向上の為に自主学習した、内容や気付いた事等を掲載していきます。
今回は、GitLabの簡単な概要説明とプロジェクトの作成を掲載します。
初投稿なので、見苦しさ等あるかと思いますがご容赦ください。GitLabとは
GitLabとは、Gitという管理システムを用いたオープンソースのWebUIリポジトリマネージャーです。
Webからの管理が可能な為、コマンドラインの操作が苦手な方でも比較的扱い安いと思います。GitLabには開発プロジェクトを管理する為の様々な機能が備わっており、プロジェクト(リポジトリ)のリモートブランチの管理やマージといったリポジトリの基本機能から、グループの管理、コミットやマージ等の履歴、開発プロジェクトの課題管理等、開発プロジェクト自体の管理機能も豊富に備わっているようです。
このあたりの各種機能については、今後少しずつ掘り下げていけたらと思います。プロジェクトの作成
まずは、GitLabにてプロジェクトを作成します。
ちなみに私の場合は、ローカル環境にVMware Workstation PlayerにインストールしたCentOSへGitLabのCE版をインストールし使用していますが、特に理由がなければこちらのGitLabサインインページからアカウントの新規発行または他の提携サービスの既存アカウントを使用してサインインでも良いかと思います。GitLabにサインインしましたら、トップページから「新規プロジェクト」をクリックします。
プロジェクトの作成ページにて、「My awesome project」内に任意のプロジェクト名を入力します。
可視レベルの「プライベート」は、作成するプロジェクトに対してアクセスを許可するGitLabユーザーを手動で追加する必要があります。
そのため、プロジェクトに登録されていないユーザーからは見えませんので、3種類の可視レベルの中ではセキュリティレベルが最も高いといえます。
「内部」と「パブリック」については以下の画像の説明通りです。
設定が完了しましたら、「プロジェクトを作成」をクリックします。
プロジェクト作成後、以下の様な画面に移ります。
以上でプロジェクト作成は完了しましたが、SSHキーを追加しないとSSH経由でプッシュ・プル出来ませんというメッセージが表示されています。
一応HTTP経由でプッシュ・プルは可能なのですが、折角なのでSSH経由でのプッシュ・プルが出来る様に設定してみます。
SSH認証鍵の設定
プロジェクト画面にある「SSH鍵を追加」をクリックすると、以下の画面に移ります。
画面内に、SSH公開鍵を入力する欄がありますので、現在使用している端末のSSH公開鍵を入力します。
私の場合はWindowsなので、WindowsのSSH鍵生成方法を紹介します。
Windows端末にて、PowerShellを起動し、以下のコマンドを実行します。
なお、ファイル名やパスフレーズの入力等を要求されますが、そのままエンターで構いません。
ssh-keygen
コマンド実行後、さらに以下コマンドで「.ssh」ディレクトリに移動します。
cd .ssh
「.ssh」ディレクトリ内に「id_rsa」ファイルと「id_rsa.pub」ファイルが作成されていると思いますが、GitLabに登録するSSH公開鍵は「id_rsa.pub」ファイルとなります。
「id_rsa」ファイルは公開してはいけない秘密鍵です。作成したSSH鍵は、
C:\Users\<ログインユーザー名>\.ssh
フォルダにありますので、エクスプローラーで移動します。
(プライベート用端末なので、一部の項目をボカしています・・・)
「id_rsa.pub」ファイルを選択して右クリックし、「プログラムから開く」を選択、任意のテキストエディタを選択して開きます。
または予めテキストエディタを起動して、「id_rsa.pub」ファイルを直接ドラッグ・ドロップでも良いです。「id_rsa.pub」ファイルを開きましたら、中身を全てコピーします。
コピーしましたら、GitLabの画面に戻り、「典型的には~」と書いてある場所に貼り付け、「キーを追加」ボタンを押下します。
タイトルはSSH公開鍵を貼り付けると自動で入力されますので、入力不要です。
SSHの設定が完了すると以下の様な画面になります。
これで完了です。
今回は以上とさせて頂きます。
次回は作成したプロジェクトに何らかのファイルをアップロード(プッシュ)したいと思います。
- 投稿日:2020-11-08T20:00:37+09:00
Sourcetreeのインストール〜ローカルリポジトリ〜リモートリポジトリ 作成まで [忘備録]
Sourcetreeとは
GitをGUI(グラフィック・ユーザー・インターフェース)で扱う事ができるクライアントツールのこと。
Gitとはプログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システム
のこと。
GUIとは端的にまとめるとマウスや指などでポチポチ操作できる画面
のこと。実際にインストールしてみる
手順
- Soucetreeの公式HPからインストーラをダウンロードします。
- 『Bitbucket』を選択し、Atlassianのアカウントを作成する。
- 『アクセスを許可する』を選択し、『次へ』で進めていく。
- Preferences の『この詳細をすべてのリポジトリに使用する』にチェックを入れる。
- インストールが完了すると SSHキーを読み込みますか? と表示されるので、『いいえ』を選択する。
既存のローカルリポジトリを設定する
ではローカルリポジトリの設定を行っていきます。
手順
左上で「ローカル」を選択し、フォルダーをドラッグ&ドロップする。
因みに「リモート」の横にある「新規...」を押下し、「既存のローカルリポジトリを追加」でも可。
今回はLaravelのプロジェクト「sample」を作成しました。
「保存先のパス」と「プロジェクト名」が表示され、「タイプ」をGitに設定します。
上手くいくと、先ほどのSourcetreeの画面がこのように変化します。(下記画像参照)
これでひとまずローカルリポジトリの設定は完了しました。
既にデフォルトで生成される「master」ブランチへの差分が87ファイルある事が確認できます。
リモートリポジトリの作成
次にGitHubで管理する、リモートリポジトリの作成を行います。
手順
- WebブラウザのGitHubページに移動し、新しいリポジトリを作成するために「Repositories」から「New」をクリック。(ご自身のプロフィール画面から作成できます。)
- 「Repository name」に任意の名前を入力できるので、今回は先ほど作成したプロジェクト名と同じ「sample」を適用。 個人用なので今回は「Private」を選択( Publicでも可 )し、ページ下部にある「Create repository」をクリックする。 これでリモートリポジトリの作成は完了しました。
ローカルリポジトリとリモートリポジトリを紐付ける
最後に冒頭で作成した「ローカルリポジトリ」と先ほど作成した「リモートリポジトリ」を紐付けていきます。
手順
- Sourcetreeのアプリに戻り、ヘッダータブの一番右にある「設定」をクリックする。
- 「リモート」タブに切り替え、リモートリポジトリのパス入力画面へ遷移させる。(下記画像参照)
- 左下の「追加」をクリックし、リモートリポジトリの必須情報入力画面へ遷移させる。(下記画像参照)
- 「リモートの名前」には先ほどGitHubで作成したリモートリポジトリ名( 今回はsample )を入力する。
- 「URL/パス」にはGitHubで先ほど作ったリポジトリのURLをコピー&ペーストする。一番右に表示されているノートのようなアイコンをクリックするとURLを全文コピーできます。
- 必須情報の下にある「オプションの拡張統合」という部分で、「ホスティングサービス」が「GitHub」に切り替わっていることを確認して下さい。
- 「OK」を押下します。
- 先ほどのリモート表示画面に、「名前」と「パス」が表示されていれば上手くいっています。
- 「OK」を押下します。
- 後は今の差分をコミットして、リモートリポジトリへプッシュしてあげれば完了です。
お疲れ様でした。
- 投稿日:2020-11-08T20:00:37+09:00
Sourcetreeのインストール〜ローカルリポジトリ〜リモートリポジトリ作成まで [忘備録]
Sourcetreeとは
GitをGUI(グラフィック・ユーザー・インターフェース)で扱う事ができるクライアントツールのこと。
Gitとはプログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システム
のこと。
GUIとは端的にまとめるとマウスや指などでポチポチ操作できる画面
のこと。実際にインストールしてみる
手順
- Soucetreeの公式HPからインストーラをダウンロードします。
- 『Bitbucket』を選択し、Atlassianのアカウントを作成する。
- 『アクセスを許可する』を選択し、『次へ』で進めていく。
- Preferences の『この詳細をすべてのリポジトリに使用する』にチェックを入れる。
- インストールが完了すると SSHキーを読み込みますか? と表示されるので、『いいえ』を選択する。
既存のローカルリポジトリを設定する
ではローカルリポジトリの設定を行っていきます。
手順
左上で「ローカル」を選択し、フォルダーをドラッグ&ドロップする。
因みに「リモート」の横にある「新規...」を押下し、「既存のローカルリポジトリを追加」でも可。
今回はLaravelのプロジェクト「sample」を作成しました。
「保存先のパス」と「プロジェクト名」が表示され、「タイプ」をGitに設定して「作成」をクリック。
上手くいくと、先ほどのSourcetreeの画面がこのように変化します。(下記画像参照)
これでひとまずローカルリポジトリの設定は完了しました。
既にデフォルトで生成される「master」ブランチへの差分が87ファイルある事が確認できます。
リモートリポジトリの作成
次にGitHubで管理する、リモートリポジトリの作成を行います。
手順
- WebブラウザのGitHubページに移動し、新しいリポジトリを作成するために「Repositories」から「New」をクリック。(ご自身のプロフィール画面から作成できます。)
- 「Repository name」に任意の名前を入力できるので、今回は先ほど作成したプロジェクト名と同じ「sample」を適用。 個人用なので今回は「Private」を選択( Publicでも可 )し、ページ下部にある「Create repository」をクリックする。 これでリモートリポジトリの作成は完了しました。
ローカルリポジトリとリモートリポジトリを紐付ける
最後に冒頭で作成した「ローカルリポジトリ」と先ほど作成した「リモートリポジトリ」を紐付けていきます。
手順
- Sourcetreeのアプリに戻り、ヘッダータブの一番右にある「設定」をクリックする。
- 「リモート」タブに切り替え、リモートリポジトリのパス入力画面へ遷移させる。(下記画像参照)
- 左下の「追加」をクリックし、リモートリポジトリの必須情報入力画面へ遷移させる。(下記画像参照)
- 「リモートの名前」には先ほどGitHubで作成したリモートリポジトリ名( 今回はsample )を入力する。
- 「URL/パス」にはGitHubで先ほど作ったリポジトリのURLをコピー&ペーストする。一番右に表示されているノートのようなアイコンをクリックするとURLを全文コピーできます。
- 必須情報の下にある「オプションの拡張統合」という部分で、「ホスティングサービス」が「GitHub」に切り替わっていることを確認して下さい。
- 「OK」を押下します。
- 先ほどのリモート表示画面に、「名前」と「パス」が表示されていれば上手くいっています。
- 「OK」を押下します。
- 後は今の差分をコミットして、リモートリポジトリへプッシュしてあげれば完了です。
お疲れ様でした。
- 投稿日:2020-11-08T19:31:10+09:00
Gitで速くcloneする方法の計測・比較
お客様の Git repository が絶望的に遅いです
いま PM している案件で、お客様のテストサーバへの Deploy をやっているんですが、お客様の repository が絶望的に遅いです。clone するだけで10分とか。ネットワークが不安定だと…。やってられない。おめー、いい加減 timeout しろよと突っ込みたくなる。
お客様の Repository に対して、与えられている権限が限定的なので、できるところから、ということで client 側でできる clone というか読み込みを速くする方法を検証してみた。
方針
- shallow-clone する
- pull は read-only, push は ssh
- ssh ではなく https でやる
- さらに ssh_config をいじる
比較方法
github の最も Star の多いリポジトリ(freeCodeCamp/freeCodeCamp)を各種方法で clone し、かかった時間と転送速度(トータルの)の平均を比較する。
Repository の状態
$ git branch --remote | wc -l 47 $ git rev-list --all --count 26515Git のバージョン
$ git --version git version 2.28.0shallow-clone
$ git clone --branch master --single-branch --depth 1 git@github.com:freeCodeCamp/freeCodeCamp.gitclone する時のオプションでなんとかしようという話。あちこち調べると、
--single-branch
オプションと--depth N
オプションがよく見られたので、それを試みる。depth は今回は1にした。
--branch {branch name}
でブランチ名も指定する。
--single-branch
はブランチの数が多い時、--depth
はコミット数が多い時に有効そうな気がする。そもそもの転送量を変えようというオプション(だと思う)なので、単純に効きそうである。なのだ、が!
option objects size --branch master 267,868 147.27MB --branch master --single-branch 267,868 147.27MB --branch master --single-branch --depth 1 5,598 8.91MB
--single-branch
オプションを付けても転送量が変わらない!この後、実際に測っていくのだが、当然の如く、結果はほとんど変わらない。--branch
オプションを外しても同じ。
--depth
オプションは、説明をよく読むと、何も指定しなければ--single-branch
になるそうなので、併用する意味はないが、今回は残しておく。計測結果は、ブランチ指定しただけのものと、
--depth
オプション付けたものを比較する。--single-branch
オプションだけを付けた結果は、ブランチ指定したものと同じだと思って頂ければ。Read-only で clone する
$ git clone git://github.com/freeCodeCamp/freeCodeCamp.gitread-only というか、git プロトコルで clone した結果、read-only になってる。(本当になってる?)
pull は Read-only, push は ssh は、
のコメント欄参照。pushInsteadOf ってやつ。
https でやる
$ git clone https://github.com/freeCodeCamp/freeCodeCamp.gitそのまんま。特にひねりなし。いちおう、Github の推奨方法。
ssh_config をいじる
.ssh/configHost github.com Compression yesのような設定をする。Ciphers は速度との関係がよく分からず、いくつか試してみたが、やっぱり速度との関係が分からないので、今回はなしで。
計測結果
protocol option conpression Objects Repository size(MB) Transfer Time(sec) Transfer Speed(MB/sec) ssh --branch master no 267,868 147.27 43.33 3.76 ssh --branch master --single-branch --depth 1 no 5,598 8.91 9.28 0.96 ssh --branch master yes 267,868 147.27 41.89 3.52 ssh --branch master --single-branch --depth 1 yes 5,598 8.91 8.86 1.01 git --branch master - 267,868 147.27 37.09 3.97 git --branch master --single-branch --depth 1 - 5,598 8.91 8.16 1.09 https --branch master - 267,868 147.27 39.13 3.76 https --branch master --single-branch --depth 1 - 5,598 8.91 10.11 0.88 予想通りの結果となりました。受信するサイズが減ると速度落ちちゃうのなんでなんだろ。
検証結果から見る効果
- オプションの違いでは、
--depth 1
>> なし (すごく効果が出る可能性がある)- プロトコルの違いでは、git > https > ssh (ぼちぼち効果あり)
- 圧縮の違いでは、あり > なし (ほとんど効果なし)
--depth 1
というのも限定的な使い方なのかな?と思うと、git の clone/fetch/pull を劇的に改善する方法はない。のかな。塵積もればでしょうか。結論
計測しなくても分かってたようなことだったが、実際に計測・比較してみて、それぞれが、どれくらい効くのか?というのが分かった。今回検証に用いたリポジトリだけでなく、私個人の小さなリポジトリでも、ほぼ同様の傾向が見られらた。
で、絶望的に遅いお客様の Git Repository は、速くなったのか?
…
なりませんでした。私の QOL はむしろ下がったよね。
github でも bitbucket でもないお客様の git サーバがヨーロッパ(のどこかに)あって、物理的に遠いから??20分かかる時と、4分くらいで終わる時があるのは、なんでなんだろうなー。もっと良い方法あるよとか、やり方間違ってるよとか、うちのリポジトリだとこうだよとか、そういうのがあれば教えて下さい。
- 投稿日:2020-11-08T13:28:44+09:00
gitのアカウントを切り替えるshellコマンドを作成してみた
はじめに
エンジニアとして転職して、7ヶ月が経過しました。
少し余裕が出てきたので、プライベートのgitにも草を生やそうとしたけど、
毎回gitのアカウントの切り替えを行うのは非常に面倒だと思いました。そこで、shellコマンドを作成して、簡単にgitのアカウントを切り替えられるようにしてみました。
開発環境
- MacOS
- zsh
手動でアカウントを切り替える場合(参考までに)
user.nameとuser.emailをそれぞれ入力して切り替えます。
ターミナル$ git config --global user.name "<YOUR_NAME>" $ git config --global user.email <YUOR_EMAIL>上記を実行すると
.git/.gitconfig
のuserの部分が変わります。
(finderでの隠しファイルはcmd + sht + .
で表示/非表示を切り替えられます。).git/.gitconfig[user] name = <name> email = <email>shellコマンド作成(本題)
zshのコマンドを作成します。
.zshrc
を開いて下記を記載します。
git config --list
は変更できたかを確認するためなので、なくても大丈夫です。function gitMain() { git config --global user.name "<業務用のgitのアカウント名>" git config --global user.email <業務用のメールアドレス> git config --list } function gitPri() { git config --global user.name "<プライベートのgitのアカウント名>" git config --global user.email <プライベートのメールアドレス> git config --list }コマンド実行
zshrcの記載が終わったら、zshrcを閉じます。
ターミナルも再度開き直さないと、反映されないので注意してください。仕事用のアカウントに切り替えるときは
ターミナル$ gitMainプラベートのアカウントに切り替えるときは
ターミナル$ gitPriを実行することで可能になります。
git config --list
を記載している場合は、コマンド実行すると.gitconfig
の中身もターミナルに表示され、name, emailが変更されていることを確認できます。