«

""


[Git] コミット済みのファイルを Git LFS 管理対象にしたいとき

バイナリファイルコミットしちゃたけど、これ Git LFS 管理対象にしたかったよねー。。。

というときの作業メモです

わたしの環境は Windows での動作確認になります

1) git lfs installGit LFS をインストールします
わたしの環境にはすでに入っていたみたい…

>git lfs install
Updated Git hooks.
Git LFS initialized.

2) git lfs version でバージョンを確認しておく

>git lfs version
git-lfs/3.2.0 (GitHub; windows amd64; go 1.18.2)

3) git lfs track とすると、.gitattributes に格納されている対象データの情報が見れます

例えばこんな感じ

>git lfs track
Listing tracked patterns
    *.dll (.gitattributes)
    *.exe (.gitattributes)

4) git lfs track でLFS管理に入れたいファイルを指定します

>git lfs track "*.o"
Tracking "*.o"

ファイル単体を指定したければ、直接指定すればOK

>git lfs track "aaa/bbb/ccc.bin"

5) .gitattributes に追加した対象ファイルが記載されているので
それをコミット&プッシュすればOK!

6) まだLFS管理してなかったときにコミットしてしまったファイルは
いったん削除コミットをしてから、もう一度コミット&プッシュするのが良さそうでした


(参考リンク)


[Hugo] GitHub Actionsでサイトを自動デプロイしたときにCNAMEを残す方法

Hugo に限らないのですが
gh-pages ブランチを利用して GitHub Pages を作った時
自動デプロイで、独自ドメインの設定を記載した CNAME が消えちゃうことがあります

そのトラブルシュートについてです


Hugo 自体の設定もあるのですが、それよりも
元のコンテンツに CNAME ファイルを含めてしまうのがシンプルで簡単です

Hugo ならメインブランチの static ディレクトリ以下に CNAME を設置します

これだけでOK!


[Git] フォーク元のリポジトリに追いつきたいときメモ

よくフォークしたリポジトリを最新化する方法を忘れては検索を繰り返してるので、いい加減自分のブログにメモしておきます

最初の fork 以降、フォーク元のリポジトリに追いつきたいときのお話です


1. 自分のローカルのリポジトリに登録されているリモート情報を見てみる

1
$ git remote -v

わたしの実行結果はこんな感じ、まだフォーク元との関連はなし

1
2
3
$ git remote -v
origin	https://github.com/h-sao/xxx.git (fetch)
origin	https://github.com/h-sao/xxx.git (push)

2. フォーク元のURLを upstream に登録します

(フォーク元は zzz/xxx という名前で公開されている場合です)

1
$ git remote add upstream https://github.com/zzz/xxx.git

ちゃんと登録されてるかどうかは、さっきの git remote -v で確認します

1
2
3
4
5
$ git remote -v
origin	https://github.com/h-sao/xxx.git (fetch)
origin	https://github.com/h-sao/xxx.git (push)
upstream	https://github.com/zzz/xxx.git (fetch)
upstream	https://github.com/zzz/xxx.git (push)

upstream にフォーク元が登録されていますね

<余談>

もし upstream の内容を間違って登録してしまったときは
$ git remote remove upstream
このコマンドで削除することができます

3. フォーク元リポジトリを fetch and mearge します

1
2
$ git fetch upstream
$ git merge upstream/master

<余談>

※ これ↑↑↑ は主流のブランチが master の場合。ものによっては main の場合もあるので確認が必要!
@qt_luigi さんからのコメント頂いたので、記事に追記しておきます~

ローカルのリポジトリ内容が、フォーク元と同じに最新化されました!


あとは別ブランチでプルリクエストを出すなりなんなりすればOK

ローカルの master はこのまま push しておくのも忘れずに♪

一度この作業をやっておくと、GitHub側に Fetch upstream というボタンが出てくるので、次からはこのボタンをポチッとするだけで↓↓↓

内容がフォーク元に追いつきます

便利ですね〜★

(参考)


[Github] Github Actionsでブログを更新するようにしました

元々、このブログは hugo で作った静的HTMLを wercker でオートデプロイして作っていました
だけど wercker は設定の変更が多くてすぐにデプロイ出来なくなっていたんですよね~で、辞めました
これを作った当時は wercker がイケイケドンドンだったので
CircleCI から乗り換える人も多かったのですが
今となってはカジュアルデプロイは CircleCI …いやいや Github Actions があるやないか!
ということで、 Github Actions でデプロイするようにしてみました

Github Actions の設定ON

ここをポチっと押すと、Actionsの設定画面へ

Github Actions の設定ファイルを書いてみる

知識なしで初めてみましたが、すんなり簡単にビルド&デプロイすることが出来ました

というのも、GitHub Actions for GitHub Pages というデプロイするためのオールインワンアクションを公開してくれている方がいらっしゃいました
設定ファイルをまんま真似するだけで使えます

そしてこの方、hugo 対応のアクションも公開して下さっています!

ここの例に書いてる yaml ファイルのまんまで良い感じにデプロイ出来ました

こんな感じ↓↓↓

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# This is a basic workflow to help you get started with Actions

name: Deploy Github Pages to Hugo

# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
  push:
    branches: [ master ]

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v2
      
      - name: Hugo setup
        uses: peaceiris/actions-hugo@v2
        with:
          # The Hugo version to download (if necessary) and use. Example: 0.58.2
          hugo-version: 0.54.0 
          # Download (if necessary) and use Hugo extended version. Example: true
          # extended: true 

      # Runs a single command using the runners shell
      - name: Build Hugo
        run: hugo -v

      # Runs a set of commands using the runners shell
      - name: Deploy
        uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./public

超カンタンでした(。・_・。)ノ

CNAME 対応

Github Pages でカスタムドメインを使う際には
Github Pages の公開ブランチ(わたしの場合 gh-pages )のルートにドメイン名を記載した CNAME ファイルを設置する必要があるのですが
これが peaceiris/actions-gh-pages を使ってデプロイした際に、消えてしまってました

アクションの方の設定で対応することも出来たようなのですが
わたしはHugoそのものの設定を変えて、対応しました

Hugo の変換元のディレクトリに static/CNAME を設置するだけです
これも超カンタン

感想

SSHキーの外部登録などもしなくて良いし、Github の中で閉じてビルド&デプロイ出来るのが良いですね!

コネコネしたいときは CircleCI とか使うかもなぁと思いつつ、Github へのアクションメインの自動化であれば、これで充分ですね
今後も使っていくと思います~

参考


[GitHub Pages] カスタムドメインのDNS情報を更新する

去年、2019年の4月くらいから
GitHub Pages にファイルをアップすると、ワーニングが出るようになった

内容はこんなやつ

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
Title: [h-sao/h-sao.com] Page build warning

The page build completed successfully, but returned the following warning for the `gh-pages` branch:

The custom domain for your GitHub Pages site is pointed at an outdated IP address. You must update your site's DNS records if you'd like it to be available via your custom domain. For more information, see https://help.github.com/en/github/working-with-github-pages/configuring-a-custom-domain-for-your-github-pages-site.

For information on troubleshooting Jekyll see:

  https://help.github.com/articles/troubleshooting-jekyll-builds

If you have any questions you can contact us by replying to this email.

(* ̄- ̄)ふ~ん、よくわからんけど
何やらDNSの設定を変えないといけないのね

めんどくさー
後で後で…と思い続けて早10か月ほど…

さすがに対応しないと、自分のブログがアクセスできなくなるかもと焦り、重い腰を上げました

(前提条件)このブログの運用情報

カスタムドメインを GitHub Pages に割り当てる方法

調べてみると全然難しくなくて
上記のワーニングメールに書かれてたURLにアクセスしたら、全てが書かれてました

ただわたしにとっては真剣に読む気で読まないと頭の中スルー…って感じの内容だったので、ちょっと真剣に読んでみました

英語版はこれ↓↓↓なのですけど

https://help.github.com/en/github/working-with-github-pages/managing-a-custom-domain-for-your-github-pages-site

ご丁寧に日本語版も提供されています

これを見ながらやってみます

まずわたしのGitHub Pagesの設定画面は、こんな感じで黄色いワーニングが出てました

今までずーっと無視してきましたが、いよいよ解決する日が来ましたよ

わたしが割り当てているカスタムドメインは Apex ドメイン になっています
( www.h-sao.com ではなく、 h-sao.com としてアクセス)

日本語版の「カスタムドメインとGitHub Pagesについて」の説明を読んでみると、
「GitHub Pages サイト用のカスタムドメインを管理する」を参照してください。 とあるので、素直にそのリンクに飛びます

ここにありました! Apexドメインを設定する方法が!
A レコードのIPアドレスが書いてありました

185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153

あと、最初の「カスタムドメインとGitHub Pagesについて」には、こんな記載もありました

サイトには、カスタムドメインの一方または両方を設定できます。 Apex ドメインを使用している場合でも、www サブドメインを使用することをおすすめします。

ふむふむ、www は付けるのを推奨してるのね、了解
cname も追加してみました

# 設定するAレコード
a @ 185.199.108.153
a @ 185.199.109.153
a @ 185.199.110.153
a @ 185.199.111.153

# サブドメインも設定しておく
cname www h-sao.github.io.

Valueドメインの設定画面

これを設定すると、わたしの場合はちょうど15分後に設定が反映されました

よかったー!


[GitHub] GitHubリポジトリを別アカウントに移動させる

旧 Github Micro Plan では、プライベートリポジトリは5つまでしか持てませんでしたが
最近は Presonal Plan に変更されて、リポジトリ制限数が無制限になりましたね

それを受けて、手元で持っている複数の Micro Plan アカウントを、一つのアカウントにまとめる作業を行いました

あるGithubのリポジトリを別アカウントに移管する、という意味になります

移動元個人アカウント(XXX)のリポジトリ(X-REPO)
   ↓
移動先個人アカウント(YYY)

ドキドキしたけど、結構すんなり出来たので、別にドキドキする必要なかった(^^;)

とはいえ、わたしの様な小心者が、他にもいらっしゃるかもしれないので
(あと、忘れた頃の未来の自分のため^^;)
手順を詳細に載せときます


GiuHub上での操作(移動元)

  1. 移動元(XXX)のアカウントで GitHub にログインします

  2. 移動元(XXX)のGitHubのリポジトリ(X-REPO)の Settings> Options に行きます

  3. 一番下に Denger Zone があるので、そこの Transfer をクリックして、移動させます
    (まだ、いきなりは移動しないよ)

  4. 移動元(XXX)のリポジトリ名(X-REPO)移動先のアカウント名(YYY) を入力します

    これで、リポジトリを移動させる準備が出来ました

  5. 移動元リポジトリ(X-REPO)は、移動先アカウント(YYY)の許可待ち状態になります

    この状態であれば、Abort transferを押して、まだ移管を取り消すことが出来ますね!

その後、移動先アカウント(YYY)にメールが届く

  1. こんなメールが移動先アカウント(YYY)に届きます
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
<タイトル>
[GitHub] Repository transfer from @XXX (XXX/X-REPO)

<内容> 
Hello YYY,

@XXX wants to transfer the XXX/X-REPO repository to YYY/X-REPO. To accept the transfer, visit this link:

    (★ここにリンクが記載されている)

If you don’t accept the transfer, it’ll expire in about a day.

Questions? Problems? Email support@github.com any time.

Thanks,
Your friends at GitHub

ここで★のリンクをクリックすると、突然の移動完了です
お気を付けください(^_^;)

というわけで、ドキドキしながら★をクリックします

すぐに、移動元アカウント(XXX)にメールが届く

  1. 移動元アカウント(XXX)の方に、通知メールが届きます
1
2
3
4
5
6
7
YYY added you to X-REPO

You can now push to this repository.

---
View it on GitHub:
https://github.com/YYY/X-REPO

これで、完全に移動が完了しました


結構すんなりすぎて、あっけない感じです

issue、Collaborators など、リポジトリに必要な情報がまるっと移動できるので、とても便利でした


[Git] Gitで利用するsshキーペアの作成、ssh接続、複数ID接続

しょっちゅう作っては、作り方を忘れ、また検索で調べる…ということをしているので、sshキーの生成&接続について、忘れないようにメモしておきます

GitサーバへSSHキーを使って接続したい

Gitサーバに接続するには、

この2種類の接続方法があるみたいです

Git接続用のクライアントアプリは、どっちで接続するか選択できるものもあるので
Sourcetreeなどを使っていると、あまり認識してない人もいるかもしれません

今回、こんなクライアント環境で試しました

これを試そうと思ったモチベーションは、push のたびに IDとパスワードを毎回聞かれるのがやだ、だからキーペアを利用して ssh アクセスにするんだー
というところから始まってます

GitHub のIDとパスワードをスキップして、セキュアアクセスするのだ!という方の参考になればと思います!

あと、番外編として、 非推奨ですが https アクセスでIDとパスワードを毎回聞かれないようにする方法も最後にメモしておきます

キーの生成方法 ssh-keygen

ここは普通に
公開鍵と秘密鍵を作ればいいだけなので、知ってる人に取ったら何をいまさら…になりますが、一応メモ

Gitがインストールされているなら ssh-keygen が使えますので、コマンドを打つだけ
(コマンドを打たなくても、Gitのクライアントアプリが勝手にやってくれる場合もあります)

GitBash などを起動します

コマンドはこちら

$ ssh-keygen -t rsa

基本的には、何か聞かれてもエンターで進めばOKです

デフォルトでは c:\Users\[ユーザ名]\.ssh\** 以下に秘密鍵(id_rsa)公開鍵(id_rsa.pub)**のキーペアが作成されます

Windowsだとキーの保存位置は c:\Users\[ユーザ名]\.ssh\ にしないといけません

わたしは、Github用のキーだと判るように、名前を github_rsa として作成しました
(既に別の用途で id_rsa を使っているからです、つまり複数アカウントを利用しています)

実行結果はこれ↓↓↓

(SHA256以下の箇所は、適当に x で書き換えています) haruka.sao@MyPC MINGW64 ~ $ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/haruka.sao/.ssh/id_rsa): /c/Users/haruka.sao/.ssh/github_rsa Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /c/Users/haruka.sao/.ssh/github_rsa. Your public key has been saved in /c/Users/haruka.sao/.ssh/github_rsa.pub. The key fingerprint is: SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx haruka.sao@MyPC The key's randomart image is: +---[RSA 2048]----+ | x | | x | | x | | x | | x | | x | | x | | x | | x | +----[SHA256]-----+ haruka.sao@MyPC MINGW64 ~ $

キーペアができたできた

SSHキーをGitHubに登録

c:\Users\[ユーザ名]\.ssh\ に保存された id_rsa.pub (わたしの場合はgithub_rsa.pub)を GitHubに登録します

自分のアカウントの Settings > SSH and GPG keys > New SSH key をクリックすると、先ほど作った公開鍵を登録することができます

先ほど作った id_rsa.pub 公開鍵を登録しましょう!
くれぐれも id_rsa の秘密鍵の方ではないので、お間違え無く!

id_rsa.pub の中身を見ればわかりますが、「ssh-rsa ……」 から始まっているファイルになります

登録すると、こんな感じの記載になります

最後に、自分の秘密鍵が c:\Users\[ユーザ名]\.ssh\ に設置されていることを再確認!

OpenSSH モード

GitExtensions で ssh 接続したい場合、
私的にはお勧めなのは、OpenSSHモードにすることです

※ PuTTYアクセスは、PuTTYの独自フォーマットのキーを登録するなどが必要ですので、わたしは利用をやめました

これで下準備はOK!

PCから ssh で接続テスト

Git bash で接続テストしてみましょう

さっきの Git bash で、リポジトリの下まで移動します
もしくは、GitExtensions から起動すると、初期ディレクトリはそのリポジトリの下になります

確認パターンは2パターンあります

(パターン1) id_rsa で登録している ssh キーを利用する場合

このコマンドで確認します

1
$ ssh -T git@github.com

id_rsa というファイル名を、ssh 接続では自動的に認識するようです

初回は、known_hosts に GitHub サーバを登録するよ?と聞いてくるので、 yes を入力します

Hi [GitHubユーザ名]! You’ve successfully authenticated, but GitHub does not provide shell access.

が表示されればOKです

わたしの実行結果はこちら↓↓↓

$ ssh -T git@github.com The authenticity of host 'github.com (192.30.252.122)' can't be established. RSA key fingerprint is xx:xx:xx:xx:xx:xx: Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'github.com,192.30.252.122' (RSA) to the list of known hosts. Hi h-sao! You've successfully authenticated, but GitHub does not provide shell access.

known_hosts ファイルがこんな感じで作られました

(パターン2) 独自の名前で作った ssh キーを利用する場合

わたしの場合は、先ほど github_rsa という名前でキーを生成したので、こちらのパターンになりました

まず、 github_rsa という独自名称を ssh アクセス時に認識させる必要があります

c:\Users\[ユーザ名]\.ssh\ 直下に config という名前のファイルを作成します

※この部分は、Gitうんぬんは関係のない、ssh 接続の話です
 Windows の ssh 接続では c:\Users\[ユーザ名]\.ssh\config はすべてのSSH接続で共有されます

c:\Users\[ユーザ名]\.ssh\config の内容はこんな感じです

Host my.github.server HostName github.com Port 22 User h-sao IdentityFile ~/.ssh/github_rsa TCPKeepAlive yes IdentitiesOnly yes

<参考リンク>

ここまで準備したら、接続テストしましょう
config に設定した名前で Host の名称アクセスすることが出来ます!

1
$ ssh -T my.github.server

うまくいくと、パターン1と同じように、known hostに登録するかどうかを聞かれて、ファイルが作成されます

また、

Hi [GitHubユーザ名]! You’ve successfully authenticated, but GitHub does not provide shell access.

こんな感じで、自分のGitHub名でアクセス出来たことが判ります
いちおキャプチャ置いときます

これで、クライアントPCから GitHub に IDとパスワードを利用せずに接続することが出来ました!

まだGitExtensions から ssh アクセスは出来ない

さて、この状態で、GitExtensions のプッシュボタンを押して Pushしようとしても、IDとパスワードを聞かれます

Pushボタンを押すと…

GitHub のアカウントとパスワードを聞かれます…
どうやら https アクセスがデフォルトみたいです

ちゃんと自身の Git リポジトリに ssh 接続するんだよー

を認識させてあげないといけません

Git リポジトリに ssh 接続設定を教える

Git リポジトリの設定を Git bash のコマンドで見ることが出来ます

$ git config -l

これらの設定は、Git リポジトリ直下にある .\.git\ 以下にあります

この下の config ファイルなどを直接編集しても反映されますが、コマンドを使った方が良いでしょう

わたしの場合の実行結果はこちら

haruk@MACBOOKPROAKIKO ~/xxx (master) $ git config -l core.symlinks=false core.autocrlf=true color.diff=auto color.status=auto color.branch=auto color.interactive=true pack.packsizelimit=2g help.format=html http.sslcainfo=/bin/curl-ca-bundle.crt sendemail.smtpserver=/bin/msmtp.exe diff.astextplain.textconv=astextplain rebase.autosquash=true user.name=Sao Haruka user.email=xxx@yyy.tmp.com core.autocrlf=True core.excludesfile=C:\Users\haruk\Documents\gitignore_global.txt core.editor="C:/utils/GitExtensions/GitExtensions.exe" fileeditor merge.tool=kdiff3 diff.guitool=kdiff3 difftool.kdiff3.path=C:/utils/KDiff3/kdiff3.exe mergetool.kdiff3.path=C:/utils/KDiff3/kdiff3.exe core.repositoryformatversion=0 core.filemode=false core.bare=false core.logallrefupdates=true core.symlinks=false core.ignorecase=true core.hidedotfiles=dotGitOnly remote.origin.url=https://github.com/h-sao/xxx.git remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* branch.master.remote=origin branch.master.merge=refs/heads/master

上記の「remote.origin.url」が Git サーバにアクセスするときの URL になるので、これを ssh でアクセスするように変更します

デフォルトの id_rsa を利用するときは

git@github.com:[ユーザID]/[リポジトリ].git

を設定します

1
$ git remote set-url origin git@github.com:h-sao/xxx.git

id_rsa じゃない、別名の ssh キーファイルを利用するときの設定は

[Host名]:[ユーザID]/[リポジトリ].git

になります

1
$ git remote set-url origin my.github.server:h-sao/xxx.git

GitExtensions で Push してみましょう

URL の表記がちょっと変わりましたね
無事、IDとパスワードを聞かれることなく、プッシュが成功しているはずです\(^o^)/

やったー

<参考リンク>

(番外編) httpsアクセスでIDとパスワードを聞かれないようにする

ええ、今回、本当に色々と試しましたとも…

ssh ではなく https アクセスで、毎回アカウント情報を入力しない方法も調べました

あまりセキュアじゃないので、お勧めできませんが
一応記載しておきます

$ git config -l 

で調べた 「remote.origin.url」 の初期の記載はこれでした

remote.origin.url=https://github.com/h-sao/xxx.git

この https アクセスの URL 中に、IDとパスワードを埋め込めばOKです

https://[ユーザID]:[パスワード]github.com/h-sao/xxx.git

やってみたけど、パスワードが丸々画面に表示されるので、よくないです…
確かに、ssh キーファイルなど用意しなくてもいいので、便利ではありますが…><;

利用は自己責任でお願いします

<参考リンク>

追記記事書きました(2016/5/9)