2024-10-12



以前こちらの記事にて、gitの操作とGitHubへの登録、管理、ブログでのコード引用をgist-itで行うメモを書いた。
これはGitHubリポジトリ内のソースファイルをブログにそのまま貼り付ける方法は存在しないため、外部ツールgist-itを介した訳だが、一応Gistでもコマンドラインで複数ファイルを一括バージョン管理しつつ、貼り付けるファイルを指定可能である。
Gistであればブログにコードをそのまま貼れるので、gist-itを介す必要がなくなる。ただしディレクトリを登録することはできない&名前でなく16進ハッシュ文字列がIDという弱点はある。これらを許容できるなら、cloneした後の編集はgitでそのまま行えるので便利である。
1、GitHub SSH keyにgist.github.comを追加する
GitHubへsshを介してリポジトリ操作をするため、SSH公開鍵の登録を済ませておく。.ssh/configの設定はgithub.comであったが、これにgist.github.comの設定も追加しておく。
Host github.com IdentityFile ~/.ssh/id_rsa.git #秘密鍵がid_rsa.gitで保存している場合 Host gist.github.com IdentityFile ~/.ssh/id_rsa.git #同様に追加する
2、GitHub Personal access tokenを作成する
GitHubにてSettings -> Developer settings -> Personal access tokens にて、新規トークンを作成する。
gistの操作をするだけなら、チェックはgist (Create gists) だけでよい。
作成が成功すると、16進文字列のトークンが発行されるので、これをホームディレクトリの以下設定ファイルに記述する。
$HOME/.config/gist
[gist] token: 取得した Personal access token文字列 editor: /usr/bin/vi
3、gistコマンドのインストール
Python版を使う。Pythonのインストールはこちら。
pip3.8 install python-gist これでgistコマンドが使えるようになる。 gist help Usage: gist list gist edit <id> gist description <id> <desc> gist info <id> gist fork <id> gist files <id> gist delete <ids> ... gist archive <id> gist content <id> [<filename>] [--decrypt] gist create <desc> [--public] [--encrypt] [FILES ...] gist create <desc> [--public] [--encrypt] [--filename <filename>] gist clone <id> [<name>] gist version </name></id></filename></desc></desc></filename></id></id></ids></id></id></id></desc></id></id>
4、新規Gistファイルを作成する
2、のアクセストークン設定がちゃんとできていれば、新規作成が可能なはずである。
まずは最初のファイルを作成する。例としてここではあらかじめsample1.cを作成しておく。
sample1.c
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void){ printf("さんぷる1です\n"); return 0; } </string.h></stdlib.h></stdio.h>
これを最初の登録ファイルとして、新規公開用Gistを作成する。gistの名前はsampleとした。
gist create "sample" --public sample1.c https://gist.github.com/fc969515e3ec6cf8d6dc52e1fc42211e
16進のIDが発行され、作成された。
5、一覧と中身を確認する
現在の一覧確認
gist list fc969515e3ec6cf8d6dc52e1fc42211e + sample
指定IDのGistの中身を確認
gist content fc969515e3ec6cf8d6dc52e1fc42211e sample1.c: #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void){ printf("さんぷる1です\n"); return 0; } </string.h></stdlib.h></stdio.h>
ちゃんと登録されていることがわかる。削除する場合、
git delete fc969515e3ec6cf8d6dc52e1fc42211e
とする。なお、1つのGistに複数の管理ファイルを登録している場合、それも含めてすべて削除されるので注意。
6、クローンして、以降はgitコマンドで操作する
ここからが今回のカナメで、1、でgist.github.comへのSSH秘密鍵、公開鍵が正しく設定されていれば、上記gistをcloneして、以降gitで操作できてしまう。
sampleという名前で取り出す。
gist clone fc969515e3ec6cf8d6dc52e1fc42211e sample Cloning into 'sample1'... remote: Enumerating objects: 3, done. remote: Counting objects: 100% (3/3), done. remote: Compressing objects: 100% (2/2), done. Receiving objects: 100% (3/3), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 ls -alF sample .git sample1.c
カレントにsampleというディレクトリができて、その中に.gitとsample1.cがあるはずである。うまくcloneできなかった場合、SSH鍵の設定等を見直してみる。
ここまでくればもうしめたもの、あとは【ソースコード管理】Git/Hub/Lab/Gist-Itの記事のとおり、gitコマンドでファイル/ディレクトリadd、status、commit、pushをすることができる。
ただしディレクトリ登録はできないので、Androidプロジェクト一式を管理などする場合はGitHub+gist-itの選択肢くらいしかないのは変わらない。
ためしに、sample2.cを作成し、add、commit、pushしてみる。
sample2.c
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void){ printf("さんぷる2です\n"); return 0; } </string.h></stdlib.h></stdio.h>
ここからはgistでなくgitコマンド。
git add sample2.c git status git commit -m "add sample2.c" git push -u origin master Delta compression using up to 2 threads. Compressing objects: 100% (4/4), done. Writing objects: 100% (5/5), 524 bytes | 0 bytes/s, done. Total 5 (delta 0), reused 0 (delta 0) To gist.github.com:/fc969515e3ec6cf8d6dc52e1fc42211e e7ca6e6..34c5c73 master -> master Branch master set up to track remote branch master from origin.
無事成功。ここで、あらためてgistコマンドで上記の反映を確認してみる。
gist files fc969515e3ec6cf8d6dc52e1fc42211e sample1.c sample2.c # 追加されている。 gist content fc969515e3ec6cf8d6dc52e1fc42211e sample1.c: #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void){ printf("さんぷる1です\n"); return 0; } sample2.c: #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void){ printf("さんぷる2です\n"); return 0; } </string.h></stdlib.h></stdio.h></string.h></stdlib.h></stdio.h>
7、ブログに貼り付けて公開する
GitHubのGUIページでも確認できるが、現在以下URLにID値を差し替えて貼り付ける。
<script src="https://gist.github.com/%7BGitHub%20ID%7D/%7Bgist%20id%7D.js"></script>
複数ファイルを指定していて、公開ファイルを指定する場合は以下のようにする。
<script src="https://gist.github.com/%7BGitHub%20ID%7D/%7Bgist%20id%7D.js?file=%7Bfilename%7D"></script>
今回の例では、
<script src="https://gist.github.com/servernote/fc969515e3ec6cf8d6dc52e1fc42211e.js"></script>
で、以下のようにsample1.c、sample2.cのすべてが表示され、
<script src="https://gist.github.com/servernote/fc969515e3ec6cf8d6dc52e1fc42211e.js?file=sample2.c"></script>
で、以下のようにsample2.cだけが表示される。便利!
見栄えの変更はCSSである程度可能。当サイトでは以下のように設定している。
.gist * { font-size: 14px !important; /* フォントサイズ */ line-height: 1.0rem !important; /* 行間 */ } .gist tr:first-child td { padding-top: 10px !important; /* 上余白 */ } .gist tr:last-child td { padding-bottom: 10px !important; /* 下余白 */ } .blob-num { display: none; /* 行番号なし */ }
行番号は表示したいが、ありにすると番号と本体との間にスペース8個も入れられてしまい、これを変更する方法が見つからなかったので、やむなく非表示にしている…。
※本記事内容の無断転載を禁じます。
ご連絡は以下アドレスまでお願いします★
オープンソースリップシンクエンジンSadTalkerをDebianで動かす
ファイアウォール内部のOpenAPI/FastAPIのdocsを外部からProxyPassで呼ぶ
Debian 12でsshからshutdown -h nowしても電源が切れない場合
【Windows&Mac】アプリのフルスクリーンを解除する方法
Debian 12でtsコマンドが見つからないcommand not found
Debian 12でsyslogやauth.logが出力されない場合
Debian 12で固定IPアドレスを使う設定をする
Debian 12 bookwormでNVIDIA RTX4060Ti-OC16GBを動かす
【Debian】apt updateでCD-ROMがどうのこうの言われエラーになる場合
【Windows10】リモートデスクトップ間のコピー&ペーストができなくなった場合の対処法
Windows11+WSL2でUbuntuを使う【2】ブリッジ接続+固定IPの設定
【Apache】サーバーに同時接続可能なクライアント数を調整する
GitLabにHTTPS経由でリポジトリをクローン&読み書きを行う
【C/C++】小数点以下の切り捨て・切り上げ・四捨五入
Intel Macbook2020にBootCampで入れたWindows11 Pro 23H2のBluetoothを復活させる
【PHP】Mail/mimeDecodeを使ってメールの中身を解析(準備編)
【ひかり電話+VoIPアダプタ】LANしか通ってない環境でアナログ電話とFAXを使う
Windows11のコマンドプロンプトでテキストをコピーする