お知らせ

現在サイトのリニューアル作業中のため、全体的にページの表示が乱れています。
投稿日:
ソフトウェア::Git

設定方法

  • コマンドでやるときは以下の形式。=つけると怒られるので注意
    • git config --[scope] [variable] [value]
  • 設定ファイルに書くときはプレフィクスがINI形式のセクション名になる

設定コマンド

Windows向けだがLinuxなどでもよしなにいじれば使える

# ユーザー名
git config --global user.name "Foo Bar"
# メアド
git config --global user.email foo@example.com
# 改行コードの LF 強制
git config --global core.autocrlf false
# UTF8 文字がエスケープされるのを防止する
# 設定してないと "\343\202\275" のような表示になる
git config --global core.quotepath false
# コードエディタ
git config --global core.editor nano
# コミット時に使う gpg プログラム
git config --global gpg.program "C:/Program Files (x86)/GNU/GnuPG/bin/gpg.exe"
# コミット時に使う gpg 署名鍵
git config --global user.signingkey XXXXXXXXXXXXXXXX
# コミット時に gpg 署名する
git config --global commit.gpgsign true
# git init したときのメインブランチ
git config --global init.defaultbranch main
# push時のデフォルトブランチ
# 設定しておくと初回 push 時のオプションが不要になる
# もし別ブランチにpushする場合は注意が必要
git config --global push.default current
# pull時のデフォルトブランチ
git config --global pull.default current
# pull時にrebaseさせない
git config --global pull.rebase false
# pull/fetchで削除されたリモートブランチ情報をローカルから消す
git config --global fetch.prune true

参考

投稿日:
ソフトウェア::Git

いくつか方法があるが、正直どれも使わないに越したことはない。しかし業務上の様々なしがらみなどでやむを得ず使うハメになることがある

ローカルで無視しておきたいがリモートで変更があったときには検知したいケース

リモートの変更まで無視してしまうと事故の元なので一番オススメ
git update-index --[no-]skip-worktreeを使う

  • .envのような個々人の環境によって異なるものがリポジトリ管理対象になっているときに使える
  • ブランチの切り替え時のコンフリクト対策としてはスクリプトを組んでおくと楽
ブランチ切り替え時のテクニック
  • ブランチで--skip-worktreeとなっている対象の変更を隠す
# --skip-worktreeの一括解除
git ls-files -v | grep ^S | sed -r 's/^S.(.+)$/\1/g' | xargs git update-index --no-skip-worktree
# 出てきた変更を全てスタッシュに入れる
git stash push -q -m stash_skiptree
  • 前項で隠した変更を再現して、--skip-worktreeし直す
# stashから戻す
git stash pop -q
# この時点での差分に対し--skip-worktree
git diff --name-only HEAD | xargs git update-index --skip-worktree

常に無視しておきたいケース

リモート側で重大な変更があったときにローカルで検知できないので事故りやすい
git update-index --[no-]assume-unchangedを使う
使ったことないので存在だけ記述して終わり

リポジトリの管理下にないファイルを常に無視するケース

--[no-]skip-worktree--[no-]assume-unchangedも使えないときにユースケースが存在するやつ

  • .git/info/excludeに無視対象のパスを記述することで無視できる
  • 自分のローカルにだけこっそり存在するdocker-compose.override.yamlみたいなのを無視するときに使える
投稿日:
ソフトウェア::Git

SSHが使えない悲劇に出会った時に。CentOS 7.7で確認。

パスワードは平文保存されるっぽいので、そこら辺は注意が必要。

  1. 認証情報をキャッシュする設定にする
    1. git config --global credential.helper cache
  2. キャッシュのタイムアウトを1年くらいにしとく
    1. git config --global credential.helper 'cache --timeout=31536000'

確認環境

Windows

あらかじめgpgのパスをPATHに通しておくと良い
参考値:C:\Program Files (x86)\GnuPG\bin

Env Ver
Windows 10 Pro Build 19042.804
git 2.30.0.windows.1
VSCode 1.53.2
Kleopatra Gpg4win-3.1.15

Linux

Windows側からVSCodeのRemote - SSHで接続

Env Ver
Ubuntu Desktop 20.04.2
git 2.25.1
gpg 2.2.19

手順

Windows

  1. Kleopatoraを起動
  2. ファイル> New Pair Key
  3. 個人用のOpenPGP鍵ペアを生成
    1. 期限なし、パスフレーズは適当に
  4. Exportから -----BEGIN PGP PUBLIC KEY BLOCK----- の中身を全部GitHubの GPG keys/ Add new に貼り付ける
  5. 追加後にでてきた Key IDgit config --global user.signingkey KeyID として cmd に流す
  6. 以下を流す(gpg.program はなくても動くが、あったほうが問題が起きない)
    ```bat
    git config --global commit.gpgsign true
    git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"
    ```
  7. 管理者権限で cmd を起動し次のシンボリックリンクを作成
    1. mklink /D %USERPROFILE%.gnupg %AppData%\GnuPG
  8. VSCodeで適当なリポジトリを作成
  9. なんか適当にコミットする
  10. GitHubに投げる
  11. GitHubのコミット履歴にverified signatureがついてたら成功

Linux

  1. Windows側のKleopatoraから公開鍵と秘密鍵をエクスポートして持ってくる
  2. gpg --import FooBarpublic.asc で公開鍵をインポート
  3. gpg -k でインポートされていることを確認し、下記XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX相当の部分をコピペ
pub rsa3072 2021-01-17 [SC]
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
uid [ 不明 ] Foo Bar <foobar@example.com>
sub rsa3072 2021-01-17 [E]
  1. gpg --edit-key XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  2. trust
  3. 5を選ぶ
  4. quit
  5. gpg -kで信用度が[ 究極 ]になっていることを確認
  6. gpg --import FooBarSECRET.ascで秘密鍵をインポート
    1. SSHで繋いでいる時でタイムアウトする場合、GUIプロンプトからの入力になっている可能性があるので、どうにかして入力
    2. XRDP経由ならpkill gnome-sessionを叩くと入れる
  7. Windowsの時と同様に次のコマンドを流す
    1. git config --global user.signingkey KeyID
    2. git config --global commit.gpgsign true
  8. VSCodeで適当なリポジトリを作成
  9. 何か適当にコミットする
    1. コミットがコケたらXRDPから入力する
  10. GitHubに投げる
  11. GitHubのコミット履歴にverified signatureがついてたら成功
CLIからやる場合でパスフレーズを何度も打ちたくないケース

以下の手順が参考になる

WSL2のUbuntuでGPGキーのパスフレーズを記憶させる

トラブルシュート

Key IDを確認したい

以下のコマンドで確認可能

gpg --list-signatures

GPGキーを消したい

GPGキーの消し方