13
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GitHubに毎日自動で草を生やそう (Windows)

Last updated at Posted at 2020-05-12

#草、生えてると嬉しい
新緑の季節なので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
とします。

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に移動します。

.bat
cd C:\Users\[PC_name]\github\atcoder

Gitのリポジトリを作成します。

.bat
git init

ユーザー名とメールアドレスを設定します。

.bat
git config --global user.name "[Your_name]"
git config --global user.email "[Your_address@mail]"

GitHubのリモート上にあるリポジトリのコピーをローカル上に複製します。

.bat
git clone https://github.com/[github_ID]/atcoder C:\Users\[PC_name]\github\atcoder\atcoder

(xcopyはWindowsのコマンドです。)
/dオプションをつけることで、コピー元とコピー先のファイルを比べて、新たに作成された、もしくは最新の状態が更新されたファイルのみコピーされます。

.bat
xcopy /d C:\Users\[PC_name]\desktop\atcoder C:\Users\[PC_name]\github\atcoder\atcoder
.bat
xcopy /d [コピー元] [コピー先]

今回の場合は

.bat
xcopy /d [自動アップロードしたいファイルが含まれているフォルダの場所] [GitHubにアップロードするフォルダの場所]

とします。

C:\Users\[PC_name]\github\atcoder\atcoderに移動します。

.bat
cd atcoder

ローカルからリモートへの変更をaddしてcommitしてpushします。

.bat
git add --all
git commit -m "auto commit"
git push -f

プログラムを終了し、コマンドプロンプトを終了します。最終行に改行が含まれていることに注意してください。

.bat
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.
半自動でアップロードされるので秘密情報が含まれていたり、膨大なサイズのファイルをコピー元のフォルダ内に作成するときは気を付けましょう。

#実行結果

自動でアップロードされています。

#まとめ
ローカルとリモートを手動で同期するという日々の無駄な作業が自動化できました。よい芝生ライフを!

13
12
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?