アプリケーション開発ポータルサイト
ServerNote.NET
Amazon.co.jpでPC関連商品タイムセール開催中!
カテゴリー【Git/GitHubPythonDebian
【GitHub】GistファイルをコマンドラインからGitを使って管理する
POSTED BY
2023-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

4、新規Gistファイルを作成する

2、のアクセストークン設定がちゃんとできていれば、新規作成が可能なはずである。

まずは最初のファイルを作成する。例としてここではあらかじめsample1.cを作成しておく。

sample1.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void){
 printf("さんぷる1です\n");
 return 0;
}

これを最初の登録ファイルとして、新規公開用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;
}

ちゃんと登録されていることがわかる。削除する場合、

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 
#include 
#include 
int main(void){
 printf("さんぷる2です\n");
 return 0;
}

ここからは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;
}

7、ブログに貼り付けて公開する

GitHubのGUIページでも確認できるが、現在以下URLにID値を差し替えて貼り付ける。

<script src="https://gist.github.com/{GitHub ID}/{gist id}.js"></script>

複数ファイルを指定していて、公開ファイルを指定する場合は以下のようにする。

<script src="https://gist.github.com/{GitHub ID}/{gist id}.js?file={filename}"></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個も入れられてしまい、これを変更する方法が見つからなかったので、やむなく非表示にしている…。

※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
【WEBMASTER/管理人】
自営業プログラマーです。お仕事ください!
ご連絡は以下アドレスまでお願いします★

☆ServerNote.NETショッピング↓
ShoppingNote / Amazon.co.jp
☆お仲間ブログ↓
一人社長の不動産業務日誌
【キーワード検索】