やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

【push】現在のディレクトリをリポジトリとしてGitHubにプッシュする

 コマンド一発。またはCLI対話で。

成果物

github

インストール

git clone https://github.com/ytyaru/push
ln -s ./push.sh /usr/bin/push

使い方

ヘルプ表示

help

cd push/src
push -h

help

現在のディレクトリをリポジトリとしてGitHubにプッシュする。
使い方: push.ja.sh [任意引数...]
任意引数:
  -u ユーザ名
  -m コミットメッセージ
  -h ホームページURL
  -t トピックス
設定:
  手順:
    1. GitHubアカウント作成 https://github.com/
    2. AccessToken作成      https://github.com/settings/tokens
    3. 以下設定ファイル作成
  設定ファイルのパス設定: ./res/setting/setting.sh
    例:
      PATH_TSV_TOKENS=./tokens.tsv
      PATH_TSV_EMAILS=./emails.tsv
    本ソースコード: ./src/push/push.ja.sh
  tokens.tsv: ./res/setting/tokens.tsv
    行の書式: Username\tToken\tNote(ScopesCsv)
  emails.tsv: ./res/setting/emails.tsv
    行の書式: Username\tEMail
例:
  push.ja.sh
  push.ja.sh -u YourUsername
  push.ja.sh -u YourUsername -m CommitMessage -h HomePage -t topic1 -t topic2 -t topic3

 -hオプションはヘルプの表示にも使える。-hオプションはホームページ設定用だが、値が設定されていないと引数エラーが発生する。引数エラーが発生した場合、ヘルプを表示する。結果、ヘルプは-hで表示される。

バッチ処理

push -u USER -m COMMIT_MSG -h HOMEPAGE -t topic1 -t topic2

 すべてオプション。 値が見つからない場合はデフォルト値を探す。それも見つからない場合はエラーとなり処理が中断される。

対話モード

push

 ユーザー名は./.git/config[user]nameから取得する。存在しない場合は次のように入力を求めます。

ユーザを選択してください。
1) user1
2) user2
3) user3
#? 

 変更を表示する。 コミットメッセージを入力すると、gitコマンドのinit,add, commit, andpushが実行される。

 M README.md
--------------------
add 'README.md'
--------------------
Commit messageを入力するとPush。未入力でEnterキー押下すると終了。

 初回時、git initでローカルリポジトリを作成します。 また、GitHub APIを使用してリモートリポジトリを作成します。

リポジトリを作成します。
[master (root-commit) 1342344] Created a repository
 1 file changed, 4 insertions(+)
 create mode 100644 README.md
{
  "id": ?????????,
  ...
  "subscribers_count": 1
}
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 235 bytes | 117.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/USERNAME/REPO_NAME.git
 * [new branch]      master -> master

 変更がない場合、何もせずに終了する。

変更なし。終了します。

 2回目以降、変更があれば add,commit, pushを促す。

 M README.md
--------------------
add 'README.md'
--------------------
Commit messageを入力するとPush。未入力でEnterキー押下すると終了。

Setting

 各設定ファイルにGitHubユーザー名、メールアドレス、トークンを入力する。

emails.tsv

#username email
user1   user1@mail.com
user2   user2@mail.com
user3   user2@mail.com

tokens.tsv

#username token   note(ScopeCsv)
user1   user1token_all  all
user1   user1token_repo repo
user1   user1token_repo_del repo,delete_repo
user1   user1token_del_repo repo_delete_repo,repo
user1   user1token_del_repo_gist    delete_repo,repo,gist
user1   user1token_user user
user2   user2token_all  all
user3   user3token_repo repo

Errors

無効なリポジトリ名です。カレントディレクトリ名は次の正規表現に従ってください。: ^[-._ A-Za-z0-9]+$
無効なホームページURLです。次の正規表現に従ってください: (https?|ftp|file)://.*
トピックスは35文字以内であるべきです。
トピックスは小文字または数字で始まり、ハイフンを含めることができます。他の文字は使用できません。
指定ユーザ\"$USERNAME\"はtoken.tsvファイルに存在しません。
対象ユーザが見つかりません。
設定ファイルにEmailとTokenを持ったGitHubユーザの情報を追加してください。
ユーザを選択できませんでした。終了します。
指定ユーザ\"$USERNAME\"のEMailは設定ファイルに存在しません。
指定ユーザ\"$USERNAME\"のTokenは設定ファイルに存在しません。
カレントディレクトリに README.md が存在しません。作成してください。
説明文が見つかりませんでした。
説明文はREADME.mdファイルから取得します。
最初の見出し(#で始まる行)から2行目を説明文とみなします。

Note

  • アカウント情報をローカルで保持したままgit pullで最新コードに更新する方法
    • .gitignoreres/setting/setting.shを含むこと
    • res/setting/setting.shの内容はリポジトリ外のパスを指定すること

対象環境

$ uname -a
Linux raspberrypi 4.19.75-v7l+ #1270 SMP Tue Sep 24 18:51:41 BST 2019 armv7l GNU/Linux