- 投稿日:
設定方法
- コマンドでやるときは以下の形式。
=
つけると怒られるので注意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 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
みたいなのを無視するときに使える
- 投稿日:
SSHが使えない悲劇に出会った時に。CentOS 7.7で確認。
パスワードは平文保存されるっぽいので、そこら辺は注意が必要。
- 認証情報をキャッシュする設定にする
git config --global credential.helper cache
- キャッシュのタイムアウトを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
- Kleopatoraを起動
- ファイル> New Pair Key
- 個人用のOpenPGP鍵ペアを生成
- 期限なし、パスフレーズは適当に
- Exportから
-----BEGIN PGP PUBLIC KEY BLOCK-----
の中身を全部GitHubのGPG keys/ Add new
に貼り付ける - 追加後にでてきた
Key ID
をgit config --global user.signingkey KeyID
としてcmd
に流す - 以下を流す(
gpg.program
はなくても動くが、あったほうが問題が起きない)
```bat
git config --global commit.gpgsign true
git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"
``` - 管理者権限で
cmd
を起動し次のシンボリックリンクを作成mklink /D %USERPROFILE%.gnupg %AppData%\GnuPG
- VSCodeで適当なリポジトリを作成
- なんか適当にコミットする
- GitHubに投げる
- GitHubのコミット履歴にverified signatureがついてたら成功
Linux
- Windows側のKleopatoraから公開鍵と秘密鍵をエクスポートして持ってくる
gpg --import FooBarpublic.asc
で公開鍵をインポートgpg -k
でインポートされていることを確認し、下記XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
相当の部分をコピペ
pub rsa3072 2021-01-17 [SC]
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
uid [ 不明 ] Foo Bar <foobar@example.com>
sub rsa3072 2021-01-17 [E]
gpg --edit-key XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
trust
5
を選ぶquit
gpg -k
で信用度が[ 究極 ]
になっていることを確認gpg --import FooBarSECRET.asc
で秘密鍵をインポート- SSHで繋いでいる時でタイムアウトする場合、GUIプロンプトからの入力になっている可能性があるので、どうにかして入力
- XRDP経由なら
pkill gnome-session
を叩くと入れる
- Windowsの時と同様に次のコマンドを流す
git config --global user.signingkey KeyID
git config --global commit.gpgsign true
- VSCodeで適当なリポジトリを作成
- 何か適当にコミットする
- コミットがコケたらXRDPから入力する
- GitHubに投げる
- GitHubのコミット履歴にverified signatureがついてたら成功
CLIからやる場合でパスフレーズを何度も打ちたくないケース
以下の手順が参考になる
トラブルシュート
Key ID
を確認したい
以下のコマンドで確認可能
gpg --list-signatures