#草、生えてると嬉しい
新緑の季節なのでGitHubにも草を生やしましょう。草とはこれのこと
参考
GitHub 芝生入門/芝生応用
https://qiita.com/sta/items/2c1f0252a6a9ce5e2087
ここは毎日熱心に活動しているとキレイな緑色が並びます。その見た目が芝生みたいにカラフルだからか、日本では 芝生 と呼びます(正確な起源や由来はわかりません)。
この芝生に緑色を増やすには、Contribution(GitHub上での活動のうち芝生に反映される活動)を行う必要があります。この行為を 草を生やす といいます。
#自動化しようと思った経緯
Atcoderの問題を解くのにAtCoder Problemsを利用しているのですが、これのHeatmapと同じことをGitHubにも反映させたいと思ったからです。毎日問題解けばAcoder Problemsだけでなく、GitHubにも草を生やせます。
AtCoder Problems - kenkoooo.com
https://kenkoooo.com/atcoder
User ID入力 → UserPage → Progress Charts → Heatmap
で確認できます。
#流れ
・ローカルに自動アップロードしたいファイルを作ります(abc167a.py等、問題の解答のソースコードを作ります)。
以下の操作コマンドを.batファイルに書き込み、Windowsのアプリケーションのタスクスケジューラで毎日定期実行します。
・GitHub上のリモートリポジトリをローカルに複製します。
・リポジトリ内のファイルと比べて最新の状態が更新されていたらそのファイルを更新します。
・GitHubへローカルからリモートリポジトリに自動でアップロードします。
#やること
GitHubのアカウントを作成済み、gitはWindowsにインストールされている前提とします。
GitHubにリポジトリを作ります。
自動アップロードしたいファイルがC:\Users\[PC_name]\desktop\at\abc167a.py
にあるとします。
ローカルのgithubフォルダの下にGitHubリポジトリと同じ名前のフォルダを作ります。今回のフォルダ名は"atcoder"としています。
C:\Users\[PC_name]\github\atcoder
さらにその下に"atcoder"フォルダを作ります。
C:\Users\[PC_name]\github\atcoder\atcoder
GitHubに自動アップロードしたいフォルダと同じディレクトリに"auto_git.bat"を作ります。
デスクトップ上の"at"フォルダ内のすべてのファイルをアップロードしたいので、
C:\Users\[PC_name]\desktop\at\auto_git.bat
とします。
cd C:\Users\[PC_name]\github\atcoder
git init
git config --global user.name "[Your_name]"
git config --global user.email "[Your_address@mail]"
git clone https://github.com/[github_ID]/atcoder C:\Users\[PC_name]\github\atcoder\atcoder
xcopy /d C:\Users\[PC_name]\desktop\at C:\Users\[PC_name]\github\atcoder\atcoder
cd atcoder
git add --all
git commit -m "auto commit"
git push -f
exit
[PC_name]
等、適正変更が必要です。各個人の環境に合わせてください。
コマンドプロンプトを開いた時のデフォルトの場所がC:\Users\[PC_name]>
になっていることを確認してください。
#コマンドの解説
C:\Users\[PC_name]\github\atcoder
に移動します。
cd C:\Users\[PC_name]\github\atcoder
Gitのリポジトリを作成します。
git init
ユーザー名とメールアドレスを設定します。
git config --global user.name "[Your_name]"
git config --global user.email "[Your_address@mail]"
GitHubのリモート上にあるリポジトリのコピーをローカル上に複製します。
git clone https://github.com/[github_ID]/atcoder C:\Users\[PC_name]\github\atcoder\atcoder
(xcopyはWindowsのコマンドです。)
/d
オプションをつけることで、コピー元とコピー先のファイルを比べて、新たに作成された、もしくは最新の状態が更新されたファイルのみコピーされます。
xcopy /d C:\Users\[PC_name]\desktop\atcoder C:\Users\[PC_name]\github\atcoder\atcoder
xcopy /d [コピー元] [コピー先]
今回の場合は
xcopy /d [自動アップロードしたいファイルが含まれているフォルダの場所] [GitHubにアップロードするフォルダの場所]
とします。
C:\Users\[PC_name]\github\atcoder\atcoder
に移動します。
cd atcoder
ローカルからリモートへの変更をadd
してcommit
してpush
します。
git add --all
git commit -m "auto commit"
git push -f
プログラムを終了し、コマンドプロンプトを終了します。最終行に改行が含まれていることに注意してください。
exit
好みでpause
に変更可能です。
#タスクスケジューラの設定
検索バーに「タスクスケジューラ」と入力します。
タスク名を入力します。今回は「auto_git」としています。
実行するタイミングを決めます。毎日実行したいので「毎日」を選択します。
実行する時間を決めます。今回は「22:00:00」としています。
タスクの操作を選択します。「プログラムの開始」を選択します。
前の項で作成した"auto_git.bat"ファイルを参照します。コピー元フォルダにある"auto_git.bat"ファイルを指定してください。
完了しました。右タブ内の「実行」で試しに実行してみるとよいでしょう。
#注意事項
###1.
プログラムの実行中にxcopyコマンドでファイルの更新があったときに-dオプションの特性で
C:\Users\ktais\github\atcoder\atcoder\.bat を上書きしますか (Yes/No/All)?
と聞かれるので
y
とファイルごとに入力する必要があります。自動じゃなくて半自動じゃんというツッコミには対応していません。
###2.
タスクスケジューラはPCがスリープ状態だと起動しないようです。もし、22:00:00にスリープ状態になっていて、そのあとPCを起動した際に手動でauto_git.batを実行しましょう。
###3.
半自動でアップロードされるので秘密情報が含まれていたり、膨大なサイズのファイルをコピー元のフォルダ内に作成するときは気を付けましょう。
#まとめ
ローカルとリモートを手動で同期するという日々の無駄な作業が自動化できました。よい芝生ライフを!