python-gistを使ってGitHub Gistにアップロードしたファイルを編集してみる(おまけつき)。

By | 2017年9月23日 , Last update: 2017年9月27日

はじめに

前の記事でFedora 26上でpython-gistを使えるようにする方法について書きましたが、この記事では前の記事の内容に引き続き、Gistにアップロードしたファイルを編集する方法について書きます。

…というわけなので、python-gistのインストール及びGistからファイルを読み出すための設定については前の記事を参照していただけると幸いです。

スポンサーリンク

事前の設定

シェルのコマンドラインから

[panda@pandanote pandanote-info-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

 
上記のサブコマンドのうち、少なくとも gist clone については実行しようすると以下のように表示されて、実行することができません。

$ gist clone [有効なGitHub Gistのid]

 
これは、sshの公開鍵をGitHub Gistを見つけることができないために表示されるエラーメッセージなので、以下の手順でGitHub Gistにsshの公開鍵をセットします。

  1. https://github.com/settings/applicationsにアクセスします。
  2. 以下のような画面が表示されますので、”SSH and GPG Keys”(赤枠)をクリックします。
  3. 以下のような画面が表示されますので、”New SSH Key”ボタンをクリックします。
  4. 以下のような画面が表示されますので、”Title”フィールドには適当な文字列を、”Key”フィールドにはSSHの公開鍵を入力します。”Title”及び”Key”フィールドを入力したら、画面下部の”Add SSH Key”ボタンをクリックします。
  5. 追加に成功すると、以下のように表示されます。なお、Fingerprintの値については塗りつぶしてあります。

SSHの公開鍵を使うコマンドの動作確認: gist cloneコマンドの実行

前項の事前設定を行うことで、以下のようにgist cloneコマンドを実行できます。なお、cloneの開始前にGitHub Gistに追加したSSHの公開鍵に対応する秘密鍵のパスフレーズを入力するように指示がありますので、正しいパスフレーズを入力します。

[panda@pandanote pandanote-info-gist]$ gist clone 196df40df0f8d8aba25c8227b1a4035e
Cloning into ‘196df40df0f8d8aba25c8227b1a4035e’…
Enter passphrase for key ‘/home/panda/.ssh/id_rsa’:
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 3
Receiving objects: 100% (3/3), done.

 

cloneした結果については、以下のようにlsコマンド等を実行すると確認できます。

[panda@pandanote pandanote-info-gist]$ ls -l 196df40df0f8d8aba25c8227b1a4035e/
合計 4
-rw-rw-r–. 1 panda panda 3568 9月 23 16:20 movielist.py

 

ちょっとしたコードの修正: gist editコマンドを使ってみる。

実は上記のコードにちょっとコメントを追加したいので、gist editコマンドを使って以下の手順で修正してみることにします。なお、gist editコマンドでは途中でclone処理を実行しますが、/tmpディレクトリに対して一時的にファイルを展開するだけであり、前項のgist cloneで展開したファイルは編集の対象等としては使用しません。

  1. $HOME/.gitconfigの設定を行います。本記事用に以下のように設定してみました。
    # This is Git’s per-user configuration file.
    [user]
    # Please adapt and uncomment the following lines:
    name = pandanote-info
    email = panda@pandanote.info

     

  2. 以下のコマンドを実行するとエディタが開くので必要な修正を行い、エディタを閉じます。
    [panda@pandanote pandanote-info-gist]$ gist edit 196df40df0f8d8aba25c8227b1a4035e
    Cloning into ‘196df40df0f8d8aba25c8227b1a4035e’…

     

  3. エディタを閉じると、以下のように表示されますので、途中でSSHの秘密鍵のパスフレーズを入力しつつ、修正が反映されるのを待ちます。
    [panda@pandanote pandanote-info-gist]$ gist edit 196df40df0f8d8aba25c8227b1a4035e
    Cloning into ‘196df40df0f8d8aba25c8227b1a4035e’…
    Enter passphrase for key ‘/home/panda/.ssh/id_rsa’:
    remote: Counting objects: 9, done.
    remote: Total 9 (delta 0), reused 0 (delta 0), pack-reused 9
    Receiving objects: 100% (9/9), done.
    Resolving deltas: 100% (2/2), done.
    [master f37182d] * Append a comment.
    1 file changed, 1 insertion(+), 1 deletion(-)
    Enter passphrase for key ‘/home/panda/.ssh/id_rsa’:
    Counting objects: 3, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (2/2), done.
    Writing objects: 100% (3/3), 402 bytes | 402.00 KiB/s, done.
    Total 3 (delta 1), reused 0 (delta 0)
    remote: Resolving deltas: 100% (1/1), completed with 1 local object.
    To gist.github.com:/196df40df0f8d8aba25c8227b1a4035e
    c35aaad..f37182d master -> master

    スポンサーリンク

     

  4. GitHub Gistのサイトで、commit及びpushした内容が反映されているかどうかを確認します。

(以下おまけ)gist cloneしたリポジトリのファイルを編集してみる。

前々項でgist cloneしたリポジトリですが、一般的なgitのリポジトリと同様に以下の入力例(add→commit→pushの流れ)のように修正をGitHub Gistに対して反映させることもできます。

[panda@pandanote 196df40df0f8d8aba25c8227b1a4035e]$ git add movielist.py
[panda@pandanote 196df40df0f8d8aba25c8227b1a4035e]$ git commit movielist.py -m ‘ * Add URL as a comment.’
[master b18924a] * Add URL as a comment.
1 file changed, 1 insertion(+)
[panda@pandanote 196df40df0f8d8aba25c8227b1a4035e]$ git push
Enter passphrase for key ‘/home/panda/.ssh/id_rsa’:
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 324 bytes | 324.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To gist.github.com:/196df40df0f8d8aba25c8227b1a4035e
f37182d..b18924a master -> master

 

Python-gistのコマンドのサポート対象外の操作になりますので、本記事ではおまけとして記述しておきます。

まとめ

本記事ではPyhton-gistを使ってGitHub Gistにアップロードしたファイルをコマンドライン経由で編集して、GitHub Gistに対して反映させる方法について記述しました。

gist editコマンドは1回の実行で1個のファイルしか編集することはできませんので、gitのコマンド群と比べると簡易的な機能しか持っていません。しかしながら、GitHub Gistにアップロードしているファイルに対する簡単な修正を(ブラウザ経由でなく)コマンドラインで行うことができるというのはかなり魅力的であると感じました。

この記事は以上です。