hotch-potch, Note to self

いろいろ作業記録

git, Note to self

(覚え書き用)

1.はじめに

たまにしか使わない、あるいは”やっちまった”ときに手直しするコマンドなどをまとめました。

2.gitのリポジトリの初期化

(1)空のままcommitする

# リポジトリ作成
$ git init

# 最初のコミット
$ git commit --allow-empty -m "first commit"

(2)master→mainに変更

ローカルのブランチ名をmainに変更

$ git branch -m master main

※ローカルを変えてからリモートを変えること

3.githubとのやりとり

pushするときや、privateリポジトリをcloneする際に、ユーザを認証するためにあらかじめ、githubg側に、自分を特定できる情報を登録する必要があります。

(1)自分のパソコンの公開鍵を登録

自分の公開鍵・秘密鍵のペアがあるか確認

下記のように、既にid_rsa id_rsa.pubがあれば、ここで新たに作成する操作は不要です。

$ ls ~/.ssh/
id_rsa  id_rsa.pub 

自分の公開鍵・秘密鍵のペアを作ります

コマンド実行後は、[enter]キーを入力だけでOKです。

$ ssh-keygen

Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\user/.ssh/id_rsa
Your public key has been saved in C:\Users\user/.ssh/id_rsa.pub
The key fingerprint is:

公開鍵・秘密鍵のペアができていることを確認します。

$ ls ~/.ssh/
id_rsa  id_rsa.pub 

公開鍵をgithubに登録します

githubにログインできている状態で、こちらのページを開いておきます。

Sign in to GitHub · GitHub

「New SSH Key」ボタンを押します。

Titleには、好きな名前を付けられますが、公開鍵を作成したホスト・ユーザ名など、後で出所はわかりやすい名前を付けて下さい。

つづいて、Keyのところに貼りつける文字列を準備します。 先ほど生成した鍵のうち、id_rsa.pub のほうの中身をターミナルに表示します。

$ cat ~/.ssh/id_rsa.pub 

表示された文字はちょうど一行になっていますので、これをそのままコピーしてください。

ブラウザに戻って、改めて、Keyのところに先ほどコピーした1行分の内容を貼りつけてください。 (うっすら書かれている文字は、貼りつけたときに消えます)

最後に「Add SSH Key」ボタンを押します。

これで、自分のホストに公開鍵を、Githubに登録完了です。 これでホスト~Githubの認証ができるようになりました。

4.過去の修正

(1)commit直後に名前やメールアドレスを修正

.gitconfigが設定されていること。

$ git commit --amend --reset-author

直前のコミットだけ修正されます。

(2)名前やメールアドレスを過去に遡って修正

ステージングしていない修正があると、この方法は出来ません。

#名前
$ git filter-branch -f --env-filter 'export GIT_AUTHOR_NAME="なまえ"'
#メール
$ git filter-branch -f --env-filter 'export GIT_AUTHOR_EMAIL="メール"'

(2)先程のコミットを無かったことに

$ git reset --soft HEAD^

5.設定変更

 (1)ユーザ情報

いまいる特定のリポジトリの設定だけ変更

$ git config --local user.name hoge
$ git config --local user.email hoge@fuga.org

unixのユーザごとの全体設定を変更

$ git config --global user.name hoge
$ git config --global user.email hoge@fuga.org

[Git]これだけ押さえる!gitconfigの基本 #Git - Qiita

user.emailに、匿名メールアドレスを設定する場合

githubのこのページの中で、number-hoge@users.noreply.github.comで 表記された部分があるので、そこからコピペして使う。

参考:GitHub でダミーのメールアドレスを使用する #GitHub - Qiita

(2)ファイルの大文字・小文字の変更を検知

$ git config core.ignorecase false

(3)改行コードの自動変更を無効化

$ git config --global core.autocrlf false

9.そのほか

(1)追加の変更を最新のコミットに追加する

$ git commit --amend --no-edit

(2)UNIX, Windows併用するときの改行コード設定

改行コード変換が、デフォルトで有効のため、異なるOSを行き来するごとに不具合を起こしやすい(気がします)

改行コード変換を無効にするため、設定ファイルc:\users\<name>\.gitconfigに、以下のエントリーを追加

[core]
    autocrlf = false

(3)コミット履歴をグラフで表示

$ git log --oneline --graph

(4)SourceTreeの使い方

(5)bash用gitプロンプト

$ cd
$ wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash
$ mv git-completion.bash .git-completion
$ nano .bash_aliases

.bash_aliases

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
...
## for Git
. $HOME/.git-completion
...

(6)gitのブランチ・マージ・プルリクまで

(7)git-flowを使う

ブランチを体系的に管理したいときに、このツールを使うと便利です。

Gitflow ワークフロー | Atlassian Git Tutorial

なお、SourceTreeには標準で支援ツールが入っています。

# 初回はパッケージのインストールが必要(Linuxの場合)
$ sudo apt install git-flow 

# git初期化してgit-flow化
$ git init
$ git commit --allow-empty -m "first commit"
$ git flow init -d
$ git branch -m master main

#作業を開始
$ git flow feature start MYFEATURE

#作業を終了
$ git flow feature finish MYFEATURE 

(8)エラーadding the parent project as a safe.directoryの処置

設定ファイルc:\users\<name>\.gitconfigに、以下のエントリーを追加

[safe]
    directory = *

(9)エラーThe server's host key is not cached in the registryの処置

プッシュ・プルするときに、下記のエラーが出る。

The server's host key is not cached in the registry. You
have no guarantee that the server is the computer you
think it is.
  • SourceTreeからbashターミナルを起動
  • SourceTreeに付属のplink.exeと、自分の秘密鍵を使って、ホストを登録しなおす
$ "C:\Users\<user name>\AppData\Local\SourceTree\app-3.4.12\tools\putty\plink.exe" -ssh -C -i "C:\Users\<username>\keys\rsa-key-hogefuga.ppk" git@github.com
The host key is not cached for this server:
  github.com (port 22)
You have no guarantee that the server is the computer
you think it is.
The server's ssh-ed25519 key fingerprint is:
  ssh-ed25519 255 SHA256:*************
If you trust this host, enter "y" to add the key to
PuTTY's cache and carry on connecting.
If you want to carry on connecting just once, without
adding the key to the cache, enter "n".
If you do not trust this host, press Return to abandon the
connection.
Store key in cache? (y/n, Return cancels connection, i for more info) y

Using username "git".
Server refused to allocate pty

参考

  • puttyの設定SshHostKeyレジストリ保存先
    • コンピューター\HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys

(10)リポジトリ入れ子にしたいとき

(11)ブランチを分けずに編集しちゃったとき

編集内容を破棄することなく、別ブランチに取り込みます。

# 編集内容をいったん退避
$ git stash
$ git stash list
stash@{0}: WIP on develop: 3b3f064 コメント等補足

# 新しいブランチを作る
$ git branch zenoh
$ git branch 

* develop
  main
  zenoh

# 新しいブランチをチェックアウト
$ git checkout zenoh
$ git branch 
  develop
  main
* zenoh

# 新しいブランチに編集内容を適用
$ git stash apply

# あとはコミットすればOK


# コミットした後、先ほどのスタッシュが不要なら消す
$ git stash drop

(12)gitignore

(91) 番外編・git英語

(92) 番外編・ホームディレクトリをまとめてZIP圧縮するコマンド

ホームディレクトリをまとめて、どこか別のところに持っていくときに、このコマンドが便利です。

$ cd ~ &&  \
sudo apt install zip && \
cd .. && \
sudo zip -r homepi_$HOSTNAME.zip ./pi/ -x \*/.git/\* \*/.ros/\* \*/\catkin_ws/log/\*  \*/\MagPi/\* \*/\.cache/\* \*/\.local/\* \*/\.Downloads/\* && \
sudo mv homepi_$HOSTNAME.zip pi/ && \
sudo chown pi pi/homepi_$HOSTNAME.zip