20201108のGitに関する記事は5件です。

【自主学習の記録 part1】GitLabの基本的な使い方その1

概要

現場で使用しているGitLab等のサービスに関して、私自身の知識向上の為に自主学習した、内容や気付いた事等を掲載していきます。
今回は、GitLabの簡単な概要説明とプロジェクトの作成を掲載します。
初投稿なので、見苦しさ等あるかと思いますがご容赦ください。

GitLabとは

GitLabとは、Gitという管理システムを用いたオープンソースのWebUIリポジトリマネージャーです。
Webからの管理が可能な為、コマンドラインの操作が苦手な方でも比較的扱い安いと思います。

GitLabには開発プロジェクトを管理する為の様々な機能が備わっており、プロジェクト(リポジトリ)のリモートブランチの管理やマージといったリポジトリの基本機能から、グループの管理、コミットやマージ等の履歴、開発プロジェクトの課題管理等、開発プロジェクト自体の管理機能も豊富に備わっているようです。
このあたりの各種機能については、今後少しずつ掘り下げていけたらと思います。

プロジェクトの作成

まずは、GitLabにてプロジェクトを作成します。
ちなみに私の場合は、ローカル環境にVMware Workstation PlayerにインストールしたCentOSへGitLabのCE版をインストールし使用していますが、特に理由がなければこちらのGitLabサインインページからアカウントの新規発行または他の提携サービスの既存アカウントを使用してサインインでも良いかと思います。

GitLabにサインインしましたら、トップページから「新規プロジェクト」をクリックします。
GitLab_01.PNG
プロジェクトの作成ページにて、「My awesome project」内に任意のプロジェクト名を入力します。
可視レベルの「プライベート」は、作成するプロジェクトに対してアクセスを許可するGitLabユーザーを手動で追加する必要があります。
そのため、プロジェクトに登録されていないユーザーからは見えませんので、3種類の可視レベルの中ではセキュリティレベルが最も高いといえます。
「内部」と「パブリック」については以下の画像の説明通りです。
設定が完了しましたら、「プロジェクトを作成」をクリックします。
GitLab_02.PNG
プロジェクト作成後、以下の様な画面に移ります。
以上でプロジェクト作成は完了しましたが、SSHキーを追加しないとSSH経由でプッシュ・プル出来ませんというメッセージが表示されています。
一応HTTP経由でプッシュ・プルは可能なのですが、折角なのでSSH経由でのプッシュ・プルが出来る様に設定してみます。
GitLab_03.PNG

SSH認証鍵の設定

プロジェクト画面にある「SSH鍵を追加」をクリックすると、以下の画面に移ります。
画面内に、SSH公開鍵を入力する欄がありますので、現在使用している端末のSSH公開鍵を入力します。
私の場合はWindowsなので、WindowsのSSH鍵生成方法を紹介します。
GitLab_04.PNG
Windows端末にて、PowerShellを起動し、以下のコマンドを実行します。
なお、ファイル名やパスフレーズの入力等を要求されますが、そのままエンターで構いません。
ssh-keygen
コマンド実行後、さらに以下コマンドで「.ssh」ディレクトリに移動します。
cd .ssh
「.ssh」ディレクトリ内に「id_rsa」ファイルと「id_rsa.pub」ファイルが作成されていると思いますが、GitLabに登録するSSH公開鍵は「id_rsa.pub」ファイルとなります。
「id_rsa」ファイルは公開してはいけない秘密鍵です。

作成したSSH鍵は、C:\Users\<ログインユーザー名>\.sshフォルダにありますので、エクスプローラーで移動します。
(プライベート用端末なので、一部の項目をボカしています・・・)
GitLab_05.PNG

「id_rsa.pub」ファイルを選択して右クリックし、「プログラムから開く」を選択、任意のテキストエディタを選択して開きます。
または予めテキストエディタを起動して、「id_rsa.pub」ファイルを直接ドラッグ・ドロップでも良いです。

「id_rsa.pub」ファイルを開きましたら、中身を全てコピーします。
コピーしましたら、GitLabの画面に戻り、「典型的には~」と書いてある場所に貼り付け、「キーを追加」ボタンを押下します。
タイトルはSSH公開鍵を貼り付けると自動で入力されますので、入力不要です。
GitLab_04.PNG
SSHの設定が完了すると以下の様な画面になります。
これで完了です。
GitLab_06.PNG
今回は以上とさせて頂きます。
次回は作成したプロジェクトに何らかのファイルをアップロード(プッシュ)したいと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Sourcetreeのインストール〜ローカルリポジトリ〜リモートリポジトリ 作成まで [忘備録]

Sourcetreeとは

GitをGUI(グラフィック・ユーザー・インターフェース)で扱う事ができるクライアントツールのこと。
Gitとはプログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムのこと。
GUIとは端的にまとめるとマウスや指などでポチポチ操作できる画面のこと。

実際にインストールしてみる

手順

  1. Soucetreeの公式HPからインストーラをダウンロードします。 sourcetree.png
  2. 『Bitbucket』を選択し、Atlassianのアカウントを作成する。 sourcetree_install_01.png
  3. 『アクセスを許可する』を選択し、『次へ』で進めていく。 sourcetree_install_02.png
  4. Preferences の『この詳細をすべてのリポジトリに使用する』にチェックを入れる。 sourcetree_install_03.png
  5. インストールが完了すると SSHキーを読み込みますか? と表示されるので、『いいえ』を選択する。 sourcetree_install_04.png

既存のローカルリポジトリを設定する

ではローカルリポジトリの設定を行っていきます。

手順

  1. Soucetreeのアプリを起動させる。
    image.png

  2. 左上で「ローカル」を選択し、フォルダーをドラッグ&ドロップする。
    因みに「リモート」の横にある「新規...」を押下し、「既存のローカルリポジトリを追加」でも可。
    image.png

  3. 今回はLaravelのプロジェクト「sample」を作成しました。
    「保存先のパス」と「プロジェクト名」が表示され、「タイプ」をGitに設定します。
    image.png

  4. 上手くいくと、先ほどのSourcetreeの画面がこのように変化します。(下記画像参照)
    これでひとまずローカルリポジトリの設定は完了しました。
    既にデフォルトで生成される「master」ブランチへの差分が87ファイルある事が確認できます。
    image.png

リモートリポジトリの作成

次にGitHubで管理する、リモートリポジトリの作成を行います。

手順

  1. WebブラウザのGitHubページに移動し、新しいリポジトリを作成するために「Repositories」から「New」をクリック。(ご自身のプロフィール画面から作成できます。) image.png
  2. 「Repository name」に任意の名前を入力できるので、今回は先ほど作成したプロジェクト名と同じ「sample」を適用。 個人用なので今回は「Private」を選択( Publicでも可 )し、ページ下部にある「Create repository」をクリックする。 image.png これでリモートリポジトリの作成は完了しました。

ローカルリポジトリとリモートリポジトリを紐付ける

最後に冒頭で作成した「ローカルリポジトリ」と先ほど作成した「リモートリポジトリ」を紐付けていきます。

手順

  1. Sourcetreeのアプリに戻り、ヘッダータブの一番右にある「設定」をクリックする。 image.png
  2. 「リモート」タブに切り替え、リモートリポジトリのパス入力画面へ遷移させる。(下記画像参照) image.png
  3. 左下の「追加」をクリックし、リモートリポジトリの必須情報入力画面へ遷移させる。(下記画像参照) image.png
  4. 「リモートの名前」には先ほどGitHubで作成したリモートリポジトリ名( 今回はsample )を入力する。
  5. 「URL/パス」にはGitHubで先ほど作ったリポジトリのURLをコピー&ペーストする。一番右に表示されているノートのようなアイコンをクリックするとURLを全文コピーできます。 image.png
  6. 必須情報の下にある「オプションの拡張統合」という部分で、「ホスティングサービス」が「GitHub」に切り替わっていることを確認して下さい。 image.png
  7. 「OK」を押下します。
  8. 先ほどのリモート表示画面に、「名前」と「パス」が表示されていれば上手くいっています。 image.png
  9. 「OK」を押下します。
  10. 後は今の差分をコミットして、リモートリポジトリへプッシュしてあげれば完了です。
    お疲れ様でした。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Sourcetreeのインストール〜ローカルリポジトリ〜リモートリポジトリ作成まで [忘備録]

Sourcetreeとは

GitをGUI(グラフィック・ユーザー・インターフェース)で扱う事ができるクライアントツールのこと。
Gitとはプログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムのこと。
GUIとは端的にまとめるとマウスや指などでポチポチ操作できる画面のこと。

実際にインストールしてみる

手順

  1. Soucetreeの公式HPからインストーラをダウンロードします。 sourcetree.png
  2. 『Bitbucket』を選択し、Atlassianのアカウントを作成する。 sourcetree_install_01.png
  3. 『アクセスを許可する』を選択し、『次へ』で進めていく。 sourcetree_install_02.png
  4. Preferences の『この詳細をすべてのリポジトリに使用する』にチェックを入れる。 sourcetree_install_03.png
  5. インストールが完了すると SSHキーを読み込みますか? と表示されるので、『いいえ』を選択する。 sourcetree_install_04.png

既存のローカルリポジトリを設定する

ではローカルリポジトリの設定を行っていきます。

手順

  1. Soucetreeのアプリを起動させる。
    image.png

  2. 左上で「ローカル」を選択し、フォルダーをドラッグ&ドロップする。
    因みに「リモート」の横にある「新規...」を押下し、「既存のローカルリポジトリを追加」でも可。
    image.png

  3. 今回はLaravelのプロジェクト「sample」を作成しました。
    「保存先のパス」と「プロジェクト名」が表示され、「タイプ」をGitに設定して「作成」をクリック。
    image.png

  4. 上手くいくと、先ほどのSourcetreeの画面がこのように変化します。(下記画像参照)
    これでひとまずローカルリポジトリの設定は完了しました。
    既にデフォルトで生成される「master」ブランチへの差分が87ファイルある事が確認できます。
    image.png

リモートリポジトリの作成

次にGitHubで管理する、リモートリポジトリの作成を行います。

手順

  1. WebブラウザのGitHubページに移動し、新しいリポジトリを作成するために「Repositories」から「New」をクリック。(ご自身のプロフィール画面から作成できます。) image.png
  2. 「Repository name」に任意の名前を入力できるので、今回は先ほど作成したプロジェクト名と同じ「sample」を適用。 個人用なので今回は「Private」を選択( Publicでも可 )し、ページ下部にある「Create repository」をクリックする。 image.png これでリモートリポジトリの作成は完了しました。

ローカルリポジトリとリモートリポジトリを紐付ける

最後に冒頭で作成した「ローカルリポジトリ」と先ほど作成した「リモートリポジトリ」を紐付けていきます。

手順

  1. Sourcetreeのアプリに戻り、ヘッダータブの一番右にある「設定」をクリックする。 image.png
  2. 「リモート」タブに切り替え、リモートリポジトリのパス入力画面へ遷移させる。(下記画像参照) image.png
  3. 左下の「追加」をクリックし、リモートリポジトリの必須情報入力画面へ遷移させる。(下記画像参照) image.png
  4. 「リモートの名前」には先ほどGitHubで作成したリモートリポジトリ名( 今回はsample )を入力する。
  5. 「URL/パス」にはGitHubで先ほど作ったリポジトリのURLをコピー&ペーストする。一番右に表示されているノートのようなアイコンをクリックするとURLを全文コピーできます。 image.png
  6. 必須情報の下にある「オプションの拡張統合」という部分で、「ホスティングサービス」が「GitHub」に切り替わっていることを確認して下さい。 image.png
  7. 「OK」を押下します。
  8. 先ほどのリモート表示画面に、「名前」と「パス」が表示されていれば上手くいっています。 image.png
  9. 「OK」を押下します。
  10. 後は今の差分をコミットして、リモートリポジトリへプッシュしてあげれば完了です。
    お疲れ様でした。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Gitで速くcloneする方法の計測・比較

お客様の Git repository が絶望的に遅いです

いま PM している案件で、お客様のテストサーバへの Deploy をやっているんですが、お客様の repository が絶望的に遅いです。clone するだけで10分とか。ネットワークが不安定だと…。やってられない。おめー、いい加減 timeout しろよと突っ込みたくなる。

お客様の Repository に対して、与えられている権限が限定的なので、できるところから、ということで client 側でできる clone というか読み込みを速くする方法を検証してみた。

方針

  1. shallow-clone する
  2. pull は read-only, push は ssh
  3. ssh ではなく https でやる
  4. さらに ssh_config をいじる

比較方法

github の最も Star の多いリポジトリ(freeCodeCamp/freeCodeCamp)を各種方法で clone し、かかった時間と転送速度(トータルの)の平均を比較する。

Repository の状態

$ git branch --remote | wc -l
47
$ git rev-list --all --count
26515

Git のバージョン

$ git --version
git version 2.28.0

shallow-clone

$ git clone --branch master --single-branch --depth 1 git@github.com:freeCodeCamp/freeCodeCamp.git

clone する時のオプションでなんとかしようという話。あちこち調べると、--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.git

read-only というか、git プロトコルで clone した結果、read-only になってる。(本当になってる?)

pull は Read-only, push は ssh は、

GitHub で clone するときは SSH じゃなく HTTP を使ったほうが高速

のコメント欄参照。pushInsteadOf ってやつ。

https でやる

$ git clone https://github.com/freeCodeCamp/freeCodeCamp.git

そのまんま。特にひねりなし。いちおう、Github の推奨方法。

ssh_config をいじる

.ssh/config
Host 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分くらいで終わる時があるのは、なんでなんだろうなー。

もっと良い方法あるよとか、やり方間違ってるよとか、うちのリポジトリだとこうだよとか、そういうのがあれば教えて下さい。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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が変更されていることを確認できます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む