Help us understand the problem. What is going on with this article?

Rubyで作るGithubのadd~push効率化コマンド.

More than 1 year has passed since last update.

前書き

Githubでは自分の活動状況を生い茂る草で表現しています.スクリーンショット 2019-03-25 10.10.06.png

実際にディレクトリに変更を加えて,pushするまでには以下の3つのコマンドを使用しています.

// Githubに連携しているディレクトリ内
// originに自作のリポジトリが登録されています.
$ git add -A
$ git commit -m "add icons"
$ git push origin master

この一連の流れ,生い茂る草で自分のモチベーションを維持できるのではないかと考える僕は,工程が多いよ!!とツッコミを入れたくなります.こまめにプッシュした方が良いと思うので,工程を減らしたいと考えました.

実装

機能としては,

// Githubに連携しているディレクトリ内
// originに自作のリポジトリが登録されています.
$ push_seq -A add icon

上記のコマンドで先ほどの3つのコマンドを自動で行ってくれます.
-Agit addのオプション指定です.
add_icongit commit -mのコメント文です.

実装したのは以下の様なコマンドです.

~bin/push_seq
#!/usr/bin/env ruby
require 'open3'
require 'shellwords'

add_opt = ARGV[0]
com_phrase = ARGV[1..-1].shelljoin                                                                              
add_opt = '-A' if add_opt.nil?
com_phrase = 'no_comment' if com_phrase.nil?

out, err, status = Open3.capture3("git remote -v")
out.split("\n").each do |line|
  if m = line.match(/^origin\s+git@(.+) \(push\)$/)
    puts m[1]
    system("git add #{add_opt}")
    system("git commit -m #{Shellwords.escape(com_phrase)}")
    system("git push origin master")
  else
    puts "Don't find origin branch."
  end
end 

簡単に説明をします.
add_optcom_phraseはそれぞれadd時のオプションとcommit時のコメントに相当しております.それぞれの引数に指定がない場合は,-Ano_commentが代入されます.
Open3にてgit remote -vを実行し,Githubに登録されているブランチ?を取得します.その後,そのブランチ内にoriginに対応するものがあるか確かめた後,3つのコマンドを実行します.

  • 注意点が2つあります
    1. commit時のコメント用に使用する第2引数には空白が入れることができない.(@sakuro様からのご指摘により解決いたしました.)
    2. branchに対応したpushができない.
  • 解決策
    1. 第2引数には_(アンダーバー)等を空白の代わりに使用する.
    2. 第3引数などをコード内に用意してpush時に使用すればよい.

(おまけ)僕の環境での自作コマンドの動かし方

Mac使ってます.
自作コマンドは~/binに入れています.
terminalのシェルはfishです.
自作コマンドはfishの設定ファイル~/.config/fish/config.fishにailiasとしてPathを記載.

~/.config/fish/config.fish
set PATH /usr/local/bin $PATH
alias push_seq '~/bin/push_seq'

これで使えるよ!

終わりに

毎度のことながら,何か思うところがあればご指摘お願いします.
ご指摘をいただけることで,僕も勉強になりますので助かっております.:boy_tone1:

TurkeyLeg0403
完結な記事の作成を心がけます。 経験言語: Python/Swift/Ruby/Java/Javascript/html.css/SQL 経験PF: AWS/Firebase/Hadoop, NiFi, Hive/HANA/MSSQL
https://github.com/TurkeyLeg0403/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした