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

Gitに管理されたファイルを削除したい

.gitignoreに書き忘れてcommitしてしまった時に、
「.gitignoreに追記すれば大丈夫...」
と誤解していませんか?
僕のように..汗

後から.gitignoreに追記するだけではすでにGitに管理されたファイルは除去されないので、そんな時の対処方法を書いておきます。

Gitに管理されたファイルを残して除外したい場合

$ git rm --cached [除外したいファイル名]

その後は必ず.gitignoreに除外したいファイルを追記する。
注意箇所:
--cachedを必ずつける!!
つけないとファイルごと削除してしまいます。

ファイルごと削除したい場合

$ git rm [削除したいファイル名]

ディレクトリごと削除したい場合

$ git rm -r [削除したいディレクトリ]

最後に

Gitを使い始めた時に何回か忘れてcommitして、都度調べていたので備忘録として残しておきます。

同じ境遇になった方のお役に立てば嬉しいです。

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

cargoでfailed to authenticateになった時の対処法

背景

気分転換にRustチュートリアルを始めてみたら初めての依存ライブラリー取得のところで以下のエラーが出て若干ハマったので対処法をメモしておく。

$ cargo build
    Blocking waiting for file lock on package cache
    Updating crates.io index
error: failed to get `rand` as a dependency of package `guessing_game v0.1.0 (/Users/xxx/rust/guessing_game)`

Caused by:
  failed to load source for dependency `rand`

Caused by:
  Unable to update registry `https://github.com/rust-lang/crates.io-index`

Caused by:
  failed to fetch `https://github.com/rust-lang/crates.io-index`

Caused by:
  failed to authenticate when downloading repository
attempted ssh-agent authentication, but none of the usernames `git` succeeded

Caused by:
  no authentication available

原因

cargoコマンドはデフォルトではssh-agentを使用して取得を試みるが、これがコケている。

解決法1: ssh-agentに鍵を登録する

こちらは正統派解決法で、普段使っている秘密鍵をそのまま登録すればOK。下記記事の手順通りにやればいいだけなので難しいことはないが解決法2と比べると若干めんどくさい。

ssh-agentを利用して、安全にSSH認証を行う

解決法2: コケた場合にOSのgitコマンドへフォールバックさせる

言うまでもないかもしれないが、前提条件としてgitコマンドが正しく動作していることが必要。

下記のオプションを入れるとssh-agentを使った認証にコケた場合、gitコマンドを使って取得を試みるように動作を変更することができる。この結果普段通り鍵認証を行うようになるので正しく認証完了しリポジトリを取得できるようになる。

※ファイルが無い場合は作成する

~/.cargo/config
[net]
git-fetch-with-cli = true

ワークアラウンド的なやり方だが、OSのgitコマンドと設定が共通になり多少楽な気がしたので今回私はこのやり方にした。

ダメだった解決法

エラーメッセージでググると以下のように書き換える記事がいくつか出てくるが、私の環境では解決できなかった。

~/.gitconfig
- [url "git@github.com:"]
+ [url "ssh://git@github.com/"]

参考文献

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

dotfiles の秘伝のタレ

はじめに

プログラマ、その中でも CLI の世界で生きている人は、秘伝のタレと化した dotfiles を持っていることも多いでしょう。

そんな私も、思い返せば高専生のときに作り始めて7年以上改良を続けています。私がこれまで書いたコードの中で、最も長くメンテされているコードです。

そんな秘伝のタレを公開したいと思います。そのまま使える人はいないと思いますが、こういう人もいるんだなあと思ってもらえればありがたいです。

なお、筆者の dotfiles は GitHub で公開しています。尤も、秘伝のタレを付け足しながら成長させた結果、5年も経てば自分でも解読不可能なコードも存在しており、見てもあまり参考にはならないかもしれません。

https://github.com/zakuro9715/dotfiles

筆者の CLI 環境

基本的には WSL の黒い画面で生きています。VSCode や JetBrains IDE も試しては見たことがあります。昨日も充実していてとても素晴らしい IDE だと思いますただ、機能が豊富すぎて使いこなせず、また自分の好みとは違う設定にしにくかったりもして私には向いていないという結論に至りました。ですが非常にうらやましい機能があるのも事実です。

そもそも私は性格的にとがった技術が好きで、手になじむ、書いていて楽しい環境を作るには、IDE では難しいと感じています。

OS は Windows で、開発は WSL で行っています。WSL も昔はハマりポイントがそれなりに存在しましたが、今は非常に安定しており、Web 開発では十分です。

さて、筆者の環境ですが、以下のような方針で選定されています

  • ターミナルですべてが解決すること。IDE にはボタンという概念がどうしても発生するため、要所要所でマウスに手を伸ばさなければならないのが面倒。
  • 開発したいと思ったときにすぐにできること。WSL がまだなかったころは VirtualBox を使っていましたが、やはり起動しなければならないというのが面倒でした。
  • Linux であること
  • Dvorak 配列でも使いやすい、あるいはカスタマイズしやすいこと。ただ Vim の hjkl は諦めました。矢印キーで足りるので。

インストールスクリプト

新しいマシンに移った時、bootstrap.zsh でほぼすべてのセットアップが完了します。このスクリプトには何度も救われました。Linux であれば基本的に動きます。

なお私が zsh のことをよく知らないこともあり、このスクリプトはかなりカオスなことになっています。正直自分でもなぜこれが動くのか理解しない放置している部分が多々あります。

見た目

見た目が楽しいのは大切です。工夫すれば利便性が上がるのはもちろん、なによりコーディングが楽しくなります。今の私のターミナルは以下のような感じです。

image.png

tmux には時刻と実行されているプログラムが表示されます。また、画像には映っていませんが端っこに絵文字が居て、たまに癒されます。

ディレクトリの部分は直前のコマンドが成功すると青に、失敗すると赤になります。また、未コミットの変更がある場合はブランチ名が黄色になります。

過去には Powerline を入れてもう少し凝った見た目にしていたのですが、マシンを変えたときにフォントのセットアップが面倒だったという理由で今の形に落ち着いています。

Vim

vim に関してはあまり凝った設定はしていません。一時期はとがったカスタマイズをしようと思ったこともあるのですが、難しくて私には無理でした。

暗黒美無王さんの dein でプラグインを管理し、必要に応じてプラグインを入れるスタイルになっています。

最近になって vim-lsp-settings および Language Server の設定をある程度したことによって、補完が聞くようになったりリアルタイムでエラーが表示されたりと、かなり快適になりました。

zsh

zsh の設定については正直全く理解しておらず、ほとんどがインターネットからのコピペです。

ただ、いくつかの便利コマンドを定義しており、それらは非常によく働いてくれます

  • set-title: ターミナルのタイトルを設定してくれます。Windows Terminal でタブをたくさん開いているとあっという間にわからなくなるので、地味ですが便利です。ただし、tmux の上では動かないという弱点があります(当たり前ですが)
  • reload: source ~/.zshrc します。意外と便利です
  • repo: src の中を検索して、指定した名前のリポジトリに移動します。set-title も自動で実行されます。かなり便利です

また、Prompt には少しこだわっています。やはり見た目が楽しいとモチベーションも上がります。

tmux

こちらもあまりよくわかっていないので最低限の設定です。ただし、Dvorak 配列で打ちやすいキーバインドになるように設定はしています。例えば、prefix は C-h(qwerty の j の位置)です。

git

gitconfig は一番工夫した設定です。dvorak 配列で打ちやすく、かつタイプ数が少なくなるように、大量のエイリアスを設定しています。

こんな感じのエイリアスになっています。基本的には短縮形ですが、単に短縮するのではなく、dvorak で打ちやすいようになっています。

ちなみに全盛期にはもっと大量のエイリアスを張っていったのですが、定期的に見直しており、現在はこのエイリアスをすべて 日常的に使用しています。

  a    = add
  ad   = add .
  ba   = branch
  bad  = branch -D
  bam  = branch -m
  c    = commit
  ca   = commit --amend
  co   = checkout
  cob  = checkout -b
  com  = !git checkout ${GIT_DEFAULT_BRANCH:-master}
  d = dif
  dif = !zsh -c 'source ~/.zsh/git.zsh && git-less-diff' # git-less-diff は package-lock.json などを除外してくれます
  dih = !zsh -c 'source ~/.zsh/git.zsh && git-less-diff HEAD'
  dib = !zsh -c 'source ~/.zsh/git.zsh && git-less-diff HEAD~'
  l = log --no-merges --date=short --pretty=format:'%C(yellow)%h %Cgreen%cr %Creset%s %Cred%d %C(cyan)%b'
  me   = merge
  mem  = !git merge ${GIT_DEFAULT_BRANCH:-master}
  ps   = push
  pso  = push origin
  psof = push origin -f
  pl   = pull
  plo  = pull origin
  plom = !git pull origin ${GIT_DEFAULT_BRANCH:-master}
  re   = rebase
  rei  = rebase -i
  rea  = rebase --abort
  rec  = rebase --continue
  res  = rebase --skip
  rem  = !git rebase ${GIT_DEFAULT_BRANCH:-master}
  s    = status .
  sall = status
  sa   = stash
  sak  = stash -k
  sal  = stash list
  sap  = stash pop
  sad  = stash drop

Dvorak

Dvorak 配列を使用している人というのはかなり珍しいですが、手の負担が減るのに加えてタイピングするのが楽しくなります。

なお、私の場合は Dvorak 配列に更にカスタマイズを加えています。Dvorak の弱点といえばやはりショートカットですが、Ctrl を押している間は Qwerty にするなどの設定でかなり改善されます。このあたりのカスタマイズは Dvorakj というソフトウェアがおすすめです。キーマッピングの設定が特殊なフォーマットのテキストファイルなのが若干使いづらいところですが、修飾キーの割当などは GUI から設定できます。

おわりに

ThinkPad に debian を入れて Linux だけで生きていた時にはこれ以上にカオスな状態になっていたのですが、ここ数年でかなり厳選されています。

私は別に CLI 主義者ではないので、VSCode を使うことを否定はしません。むしろ、あれだけ簡単にいろいろなセットアップができてとてもうらやましいです。

業界によっては、特定のツールが使えないと仕事ができないこともあるかもしれません。しかtしながら、プログラマは基本的に好きなツールを使ってもいいという文化があります。Vim などは開発が活発なので今すぐ使えなくなったりはしないでしょうし、私は当面このまま秘伝のタレを洗練させ続けたいと思っています。

特に Vim は工夫次第でいろいろなことができるので、VSCode ほどとはいかなくても、かなり IDE 的な機能を付けることができます。昔に比べると、プラグインも豊富になり、導入難易度も下がっていると思います。

たしかに VSCode 等に比べると敷居は高いかもしれませんし、玄人向けなのは否定できません。ですが、今でも CLI は時代遅れではありませんし、一度チャレンジしてみても良いかと思います。

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

gitの基本コマンド

gitの基本

gitは、作業ディレクトリ→ステージング→ローカルリポジトリ→リモートリポジトリの4つの領域に分けることができる。
この内、作業ディレクトリ、ステージング、ローカルリポジトリの3つはローカル環境(自分のパソコンの中)で管理されている。
Untitled (Draft)-1.jpg

主なgitコマンド

git init

git init
  • リポジトリを新しく作成する。
  • ファイルの中に.gitという隠しフォルダが作られる。

git add

git add
  • 作業ディレクトリからステージングに移動させる。
  • addの後ろにファイルを指定できる。
    • git add -A (gitで管理していないファイルも含めてすべてのファイルが対象になる。)
    • git add . (今いるディレクトリのすべてのファイルが対象になる。)
    • git add 【ファイル名】 (ファイル名に指定したファイルが対象になる。)

git commit

git commit -m"【コメント】"
  • ステージングからローカルリポジトリに移動させる。
  • -mの後ろにコメントを付ける。

git remote

git remote add origin 【githubで作成したリポジトリのURL】
  • ローカルリポジトリとリモートリポジトリを紐付ける。

git push

git push origin master
  • ローカルリポジトリにあるファイルをリモートリポジトリに移動させる。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Mac で GitHub に SSH 接続する方法(Fork を利用)

はじめに

GitHub に SSH 接続してたけど
PC を変えた時にどうやって設定してたか忘れてしまった...

そんな方のため(主に自分のため笑)に記事として残すことにしました :sunglasses:

環境

  • macOS Catalina バージョン 10.15.6
  • git version 2.24.3 (Apple Git-128)
  • Fork Version 1.0.96

前提条件

  • GitHub のアカウントがある
  • GitHub に private リポジトリがある
  • Git が使用できる状態になっている
  • Fork という Git クライアントをインストール済み

接続するまで

1. 認証用ディレクトリを作成
2. 公開鍵と秘密鍵を作成
3. 接続設定を追加
4. GitHub に公開鍵を登録する
5. Fork の設定
6. 接続できるか確認

1. 認証用ディレクトリを作成

# 現在のユーザーで作成
$ mkdir ~/.ssh

# 所有者読み・書き・実行権限を付与
$ chmod 700 ~/.ssh

2. 公開鍵と秘密鍵を作成

# 認証用ディレクトリに移動
$ cd ~/.ssh

# 認証鍵を作成
#
# 以下の3つについて聞かれるため入力する
# 1. 鍵情報を保存するファイルの名前(今回は id_github_rsa )
# 2. パスフレーズ
# 3. パスフレーズ(確認用)
$ ssh-keygen -t rsa

# 認証鍵に所有者読み込み権限を付与
$ chmod 400 ~/.ssh/id_github_rsa
$ chmod 400 ~/.ssh/id_github_rsa.pub

# ssh-agent に秘密鍵を登録
$ ssh-add ~/.ssh/id_github_rsa

こんな感じで生成できたかと思います。
ちなみに Finder で「 shift + command + . 」とすると隠しファイルが見れるようになります :sunglasses:

3. 接続設定を追加

# 認証用の設定ファイルを作成
$ touch ~/.ssh/config

# 所有者読み・書き権限を付与
$ chmod 600 ~/.ssh/config

# 編集を開始
$ vi ~/.ssh/config

#
# 編集終わったら保存して次へ
#

# 内容を確認
$ cat ~/.ssh/config

中身は下記のようにします

Host github
 HostName github.com
 IdentityFile ~/.ssh/id_github_rsa
 User git
 Port 22

4. GitHub に公開鍵を登録する

Terminal の以下のコマンドで、公開鍵の中身をコピーして

$ pbcopy < ~/.ssh/id_github_rsa.pub

GitHub の SSH キーの登録画面 に貼り付けて「Add SSH key」を押して、SSH キーを登録する

貼り付けた画像_2020_07_26_0_50.png

5. Fork の設定

GitHub にログインして SSH key を設定する

ログイン前 ログイン後 SSH key 設定後

6. 接続できるか確認

GitHub の private リポジトリの SSH 用のパスをコピーして

貼り付けた画像_2020_07_26_1_09.png

Fork でクローン

貼り付けた画像_2020_07_26_2_27.png

無事にクローンできたら :ok_hand:

以下のコマンドを使って確認する方法もあります

# 公開鍵が登録されたか確認
$ ssh -T git@github.com

# 登録したホスト名でも接続できるか確認
$ ssh github

接続できなかったら

この記事にコメントなり Twitter の DM なり、気軽に質問していただけたらと思います :hand_splayed:
できれば、知見を集約するという意味で、この記事にコメントしていただけると幸いです :relieved:

参考記事

おわりに

今回は Mac の Terminal で認証鍵を作成したり、Web で GitHub に公開鍵を登録したりしていましたが、実はこれらの作業は Fork で行えたりします。やりやすい方でやってもらえればいいと思います!

Fork おすすめなのでみなさん使ってみてください :hand_splayed:

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