今さら聞けないGit 2022年11月23日

今さら聞けないGit 2022年11月23日

ソフトウェアエンジニアの為の SSH 鍵ペアの生成方法 2022

SSH 鍵ペアの生成
近々作り直す予定があるので備忘録を記載しておきます。
実際には Windows の msys2 bash 環境での例ですが mac ksh, linux bash でもほぼ同様で大丈夫なはずです

## 鍵を作成する
“`shell
# 作業用ディレクトリの作成と移動
mkdir ~/ssh-keygen-work
pushd ~/ssh-keygen-work

# 個人用 .ssh ディレクトリの作成
mkdir ~/.ssh
chmod 700 ~/.ssh

# このマシンにログインする時に使える秘密鍵に対応する公開鍵を登録しておくファイルの作成
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

# 鍵ペアの作成, 古い形式はセキュリティ的に推奨できなくなっている可能性があるので作成する時点で最適なアルゴリズムを確認すべき (新しすぎても古いサーバーで使えなかったりするのでちょうどいい所を見極めること)
ssh-keygen -t ed25519 -C ‘your_name@e

元記事を表示

【Git】rebaseとは

# rebaseとmergeの違い
– rebaseとは
– コミット履歴をきれいにして、マージすることができる
– ブランチが一つになる代わりに最終コミットの一意な値が変わってしまう

– mergeとは
– 単純な統合なので「マージコミット」として1つ追加される
– コミット自信が一意の値を保持していて、その値は書き換わらない

– rebaseをした際に強制プッシュが必要な理由
– 一度プッシュしたブランチでrebaseを行うとコミットが改変されるため再度プッシュできなくなる
– 複数人で同じブランチを共同で開発することで生じるコミットログの複雑さをシンプルにするため。

![マージの図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2647183/6d1fe001-839c-5110-b39a-658b7468b8d0.png)
![リベースの図.png](https://qiita-image-store.s3.ap-northeast-1.

元記事を表示

git bisectで「誰だよ!バグコミット仕込んだの!」を解決する

バグコミットは唐突に仕込まれ、そのコミット(犯人)を特定するのには時間がかかる場合があります。

git bisectは「バグが仕込まれたコミットを特定」を補助してくれるgitの便利機能です。

誰しもみんな↓みたいな経験をしたことがあるでしょう。

– **「なんかこの機能バグってるよ、いつからバグってんのこれ」**
– **「なんでこんなスタイル崩れちゃってるの、どの修正でおかしくなったんだろう」**

エンジニア・デザイナーであれば、何度もこのような場面に出くわしてると思います。今後もたくさん経験するはずです。

バグが仕込まれたコミットを特定できれば、問題の解決は早いでしょう。
その「バグが仕込まれたコミットを特定」する便利なものが「git bisect」です。

### 普段やりがちな「バグが仕込まれたコミットを特定」する方法

bisectを紹介する前に、バグコミットを特定するために、通常はどのような探し方をしがちなのか見ておきます。

大抵みんなこんな探し方をしてることでしょう。

1. めぼしいプルリクを探して、そこのコミットを一つずつ見てみる
– 予想が当たれ

元記事を表示

WSL2でgit pullをするとgnutls_handshake() failed: Error in the pull function.になる問題の対処法

## どういう問題?

WSL2でgit pullコマンドを実行したときに下記のようなエラーが出た。

“`sh
$ git pull
fatal: unable to access ‘https://github.com/hoge/fuga/’: gnutls_handshake() failed: Error in the pull function.
“`

## 環境

WSL2 Distribution: Ubuntu-20.04
git version: 2.38.1

## 原因

「gnutls_handshake() failed: Error in the pull function.」でググると`git config`の問題やら`proxy`やら出てきますが、configはすべて設定済みで不備もないし、proxyは特にプロキシサーバーを経由させるようなこともやってないしなんだろうなと途方に暮れていました。

根気強く調べていると、WSLのissueで下記のようなやり取りがありました。

https://github.com/microsoft/WSL/issu

元記事を表示

新しく参画したプロジェクトで導入したブランチ運用とCI・CDの紹介

最近会社で新しいプロジェクトにSREとしてジョインし、ブランチ運用やCI・CDを導入したので忘備録がてら紹介。

## 参画したプロジェクトとかに関して
今回ジョインしたのはサーバーサイドがRails、インフラがGCP、フロントはVueのプロジェクトです。自分がジョインした時点でCI・CDの仕組みはほぼ存在せず、ブランチ運用も特に定まってない状態でした。

## CIの導入
ここは至って普通なので軽く済ませますが、Github ActionsでRspecによる自動テストとrubocopによるコードチェックをPR作成時に走らせるようにしました。rubocopに関しては以下のActionsを使えばそれなりにリッチな仕組みが簡単に実現できるのでとても便利ですね。
https://github.com/reviewdog/action-rubocop

## ブランチ運用

### 基本はGitflow
基本的にはGitflowに近い運用を採用しました。ただし、厳密なGitflowは今回のチームでは大げさに思えたので一部簡略化してます。使うのは以下のブランチです。

– main
– deve

元記事を表示

vim-plugのPlugInstallでfatal could not read remote repositoryになったときの対処法

git push するときにパスワード入力をssh通信によって省略するためにレポジトリのurlを置き換える処理をする設定をしていたために生じたエラー

# before

“`:~/.ssh/config
Host github github.com
HostName github.com
IdentityFile ~/.ssh/github
User git
“`

“`:~/.gitconfig
[url “github:”]
InsteadOf = https://github.com/
InsteadOf = git@github.com:
“`

# after

“`:~/.gitconfig
[url “github:”]
pushInsteadOf = https://github.com/
pushInsteadOf = git@github.com:
“`

# 解決方法

`InsteadOf`を`pushInsteadOf`にしてpushのときのみurlを置き換えるように変更したところPlugInstall

元記事を表示

git コマンド備忘録

こんにちは。
以前から、開発中に「あれ?これどうやるんだっけ?」「こんなとき、どう解決したら良い?」など、
迷ったときにいつもお世話になっているQiitaやZe○○やStack○○さん…etcですが、自分で投稿することはありませんでした。
なので、何事も経験ということで思い立ち(もう何番煎じの情報かわかりませんが)初めて投稿してみます。

個人用の備忘録なので、細かい点は端折っております。予めご了承ください。

# gitでコミット済みメッセージを修正したい時

コマンドライン上で下記コマンドを入力後、メッセージを修正してpushする
“`
git commit –amend
“`
2つ以上前のコミットを修正したいときはこのようにします
“`
git rebase -i HEAD~2
“`

# コマンドライン上でgitログを見たい時
コミット履歴を1行で見たい時
“`
git log –oneline
“`
コミット履歴を1行かつグラフで見たい時
“`
git log –graph –oneline
“`

今後も不定期に投稿してみようと思います。

元記事を表示

ローカルの不要なブランチをまとめて削除するshell

gitのブランチが気づいたら大量にできてしまったときに、特定のキーワードを入力すれば候補を確認のために表示して問題なければまとめて削除できるshellを作ってみました。

例えば以下のように`fix/`以下のhogeXXブランチは残したいけどfugaXXブランチは削除したいときに使うと便利かもです。
![スクリーンショット 2022-11-20 21.25.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287537/44d83ea5-d1b3-3839-6197-e45e02ae89fa.png)

# shellの中身
“`.shell
#!/bin/bash

echo “削除したいブランチ名の一部を入力してください。”

read KEYWORD

LIST=($(git branch | grep -E –color=always $KEYWORD))

printf “%s\n” “${LIST[@]}”

if [ ${#LIST[@]} = 0 ]; then
echo

元記事を表示

PowershellでGitを使う

## Oh My Posh

https://ohmyposh.dev/

### Oh My Poshのインストール

1. wingetでインストールする
“`powershell
winget install JanDeDobbeleer.OhMyPosh -s winget
“`
1. ターミナルを再起動する

### フォントのインストール

1. ターミナルを __管理者権限__ で起動する
1. フォントをインストールする
“`powershell
oh-my-posh font install
“`
1. ターミナルを再起動する

### フォントの設定

#### Windows Termainal

1. [設定(Ctrl+,)]→[JSON ファイルを開く]
もしくは
Json ファイルを開く(Ctrl+Shift+,)
1. フォントを設定する
“`json
{
“profiles”:
{
“defaults”:

元記事を表示

GitHubの基本的な使い方

# Introduction

GitHubのリモートリポジトリを使う時に必要な操作についての個人的メモ.
ターミナルでのコマンド操作とVSCodeでのGUI操作の両方まとめる.
チーム開発ではなく個人使用を想定している.
環境はWindows

# リモートリポジトリの作成
リポジトリの名前入力→Privateにチェック→**Create a new repository**をクリック
![create.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/931058/01462617-39d9-e041-436c-134ed09a1aaf.png)

# リモートリポジトリとの紐づけ
ローカルリポジトリを作成しコミットした後以下を実行
“`:terminal
git romote add origin https://github.com/ユーザー名/リポジトリ名
“`
1. ソース管理の・・・をクリック
2. Remote→Add Remoteをクリック
3. リモートリポジトリのURLを入力後リポ

元記事を表示

Gitの基本的な使い方~ローカル編~

# Introduction
Gitをローカルのみで使う時に必要な操作についての個人的メモ.
ターミナルでのコマンド操作とVSCodeでのGUI操作の両方まとめる.
環境はWindows

# バージョンの確認
Gitがインストールされているかをまずは確認
“`:terminal
git version
“`
“`
git version 2.38.0.windows.1
“`

# ユーザー設定
まずはユーザー名とメールアドレスを設定
この作業はgitインストール後に一度だけ実行すればよい
“`:terminal
git config –global user.name “ユーザー名”
git config –global user.email “メールアドレス”
“`
正しく設定できたか一応確認
“`:terminal
git config –global –list
“`
“`
user.name=ユーザー名
user.email=メールアドレス
“`

# ローカルリポジトリの作成
フォルダ内に隠しファイル.gitが作成される
“`:termina

元記事を表示

VSCode+WSLのGitで “Missing or invalid credentials” エラーの対処法

# ネタバレ
* Windows側の資格情報マネージャーでGitHubの資格情報を消してWSLを再起動する

以下,詳しい経緯と解説です.

# Gitの失踪
ある日,VSCodeでWSL上のレポジトリ(GitHubで管理)を開いて`git fetch`を実行すると,まさかの
“`shell:WSL
$ git fetch
git: command not found
“`

!!?
消した覚えないんだけど……
もしかして Windows 側で Visual Studio (VSCodeじゃなくて) のインストール作業をしたせい?

それで,とりあえずWSL上でGitを再インストールしたのはいいものの,今度はこんなエラーが.
“`shell:WSL
$ git fetch
Missing or invalid credentials.
Error: connect ENOENT /run/user/1000/vscode-git-xxxxxxxxxx.sock
at PipeConnectWrap.afterConnect [as oncomplete] (node:n

元記事を表示

git reset: 直前のcommitの取り消し

git reset –soft HEAD^

直前のcommitのみを取り消す

元記事を表示

git revert の –mainline 2 について検証してみた

# 結論
先に書いておく。**使い所がわからんかった**。

## 発端
複数人で開発中のブランチで下記の事象が起きました。(DEV1とDEV2ブランチが存在するとします)
この時に、先にリリースする予定だった**DEV1より先にDEV2がメインブランチに合流**してしまった。
DEV2での変更がDEV1の変更に影響が有るリスクが高いので、DEV2のマージを取り消したい。

### 当時に採った対応
「マージコミットのリバート」とかでググると、大体以下のコマンドが出てきた。
“`
$ git revert -m 1 <マージコミットのハッシュ>
“`
ヘルプとかを読んでも問題無さそうなので脳死で入力した。
https://git-scm.com/docs/git-revert#Documentation/git-revert.txt—mainlineparent-number

### 疑問
オプションの`–mainline`を脳死で1を指定したが、`git revert –mainline 2`(マージした側のブランチ)を指定するとどうなるか?と言う訳で検証してみよう。そ

元記事を表示

グローバルなignoreファイル

[~/.gitignore_global を指定するのをやめ、デフォルトの置き場に置こう](https://zenn.dev/qnighy/articles/1a756f2857dc20)
これを読んで、
「ふんふん、で?」
と思った自分にビックリした。

自分で自分をお膳立てだ。コピペでいけるように整理する。
環境は macOS Ventura + zsh です。

`% vi ~/.config/git/ignore`

“`~/.config/git/ignore
.idea
.DS_Store
“`

## グローバルなignoreファイルを設定する
`% git config –global core.excludesFile ~/.config/git/ignore`

## 設定できているか確認する
“`
% git config –global core.excludesFile
takepan/.config/git/ignore
“`

## gitクライアントで除外されるか確認する
macOS + SourceTree な私は `command` +

元記事を表示

Git 特定のコミットまでリポジトリの状態を巻き戻す方法(ローカル)

# 概要

– Gitにて特定のコミットまでリポジトリの状態を巻き戻す方法をまとめる。

# 方法

– ローカルリポジトリにて下記コマンドを実行する。

“`bash
git reset –hard 戻したいコミットのコミットID
“`

元記事を表示

git clone時にログの詳細を確認する

# 前提
* Linux(RedHat系)
* gitlab
* httpsでクローン

# 確認方法

* コマンドの頭に、GIT_TRACE=1 GIT_CURL_VERBOSE=1をつけるだけ。
“`
GIT_TRACE=1 GIT_CURL_VERBOSE=1 git clone https//XXXX
“`

* httpsではこんな感じのログが出ます。
以下のケースでは、アクセス先から送信されてきたCA証明書の公開鍵暗号強度が弱いためcloneに失敗していた例。
※クライアント側のcrypto-policiesがFUTURE(暗号化強度の要求が高め)だと発生した。DEFAULTに変更すると解消できる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2962888/0e30d676-a719-f479-5685-2e315a0934db.png)

元記事を表示

コミットの整理に git add -p を使おう

git のコミットを適切に作れていますか?

自分はコードを書く前にTODOを作成しますが、どのようにコミットを分けるかも意識しています(TODO ≒ コミット)
ただ最初から全てが見えていない時もあり、予定通りコミットを分けることができないこともあります。
後からコミットを整理しますが、ファイル単位だけでなく同じファイル内の修正でも別コミットにしたい時がありますよね。
そんな時に`git add -p`使ってコミットを整理します。

## `git add -p` とは

`git add –help`でヘルプを確認します。

> -p, –patch
> Interactively choose hunks of patch between the index and the work tree and add them to the index. This gives the user a chance to

修正のまとまり(hunk)をインタラクティブに選択して、インデックスに追加することができます。
ファイル単位だけでなく、自分で行を選択してインデックスに追加できるので

元記事を表示

git submoduleとは

gitのsubmoduleについて初めて触ったので備忘録としてメモ

## git submoduleとは
git submoduleとは、外部のgitリポジトリを、自身のgitリポジトリのサブディレクトリとして登録し、特定のcommitを参照する仕組み。

## git submodule add
“`bash
$ git submodule add [サブプロジェクトのリポジトリURL]
“`
と行うことで、作業中のリポジトリに、サブモジュールとして既存のリポジトリを追加することができる。

これを行うことで、.gitmodulesファイルがルートディレクトリに追加される。
“`.gitmodules
[submodule “submoduleの名前”]
path = submoduleの名前
url = submoduleのURL
“`

複数のサブモジュールを追加した場合は、このファイルに複数のエントリが追加される

## 参照
https://qiita.com/sotarok/items/0d525e568a6088f6f6bb
https://gi

元記事を表示

TortoiseGitでメッセージのみの空コミットをしたい

# 概要

コーディング終了してコミット。
その後、テストをしてバグが無かった。(ソースコードは一切変わっていない)

コミットする物は何もないが『テストをしてバグが無かった』という記録だけを残すコミットをしたい。

そんな時。

# やり方

左下の “`Message only“` にチェック入れればできる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/70cf3eb9-14c7-8ba9-3309-6a009cfa6cdb.png)

# 蛇足

あたいの場合、英語とか用語に慣れるためにTortoiseGitは日本語化してません。

もし日本語化していた場合 “`Message only“` のところはどう表示されるか…
そんなものは知らん。

# バージョン

Windows 10 Pro 21H2 OSビルド 19045.2311
TortoiseGit 2.13.0.1
git version 2.38.1.windows.1

元記事を表示

OTHERカテゴリの最新記事