20200923のGitに関する記事は4件です。

cronでGithubにPushするプロセスを自動化する

やったこと

Pythonとcrontabを使って、データファイル(pklフォーマット)を一週間に一回(土曜日の午後7時)に更新されるようにしました。

毎週更新されるデータをGithubに自動的にPushしたく、同じくcrontabを使ってやってみた。

環境

  • Linux Mint 19
  • Python 3.6.9
  • git 2.17.1

GithubでSSH接続する

ssh接続する方法はたくさんネットに上がっているので割愛します。
(参考: GitHubにssh接続できるようにする)

GITコマンドでプッシュしてみる

ssh接続が出来たら、gitコマンドでPushしてみる。

アップしたいデータファイルはplayers_data.pklというpythonのpickleというモジュールを使用したフォーマットです。

git add players_data.pkl
git commit -m "最初のコミット"
git remote add origin git@github.com:<ユーザー名>/<レポジトリ名>
git push origin master

自動化のPythonコードを作成

この一連の作業を自動化するPythonのコードを書きます。

使用するのはsubprocessというModuleで、bashコマンドをPythonで実行することが出来ます。(参考:Python の subprocess

new_data.py
import os
import datetime
import subprocess as cmd

#input values
new_date = datetime.datetime.now().strftime('%Y%m%d')
current_dir = os.getcwd()

#Subprocessで自動化
cp = cmd.run(f"git -C {current_dir} add players_score.pkl", check=True, shell=True)
cp = cmd.run(f"git -C {current_dir} commit -m 'scoresheet updated on {new_date}'", check=True, shell=True)
cp = cmd.run(f"git -C {current_dir} push origin master", check=True, shell=True)
print('Githubへのアップ成功!')

この段階でpython3 new_data.py をbashで実行し、ちゃんとGithubにアップされているか確認してもよいでしょう。

SSH のラッパースクリプト(git-ssh.sh)を作成

ここが今回引っかかったところなのですが、crontabでgit push origin masterを実行しようとすると、以下のようなエラーがでます。

Command 'git -C /path/to/folder/ push origin master' returned non-zero exit status 128.

cron から自動で git push するを参考にすると、

cron から自動で git push したい時、ssh の秘密鍵を明示的に指定して git push する必要があります。

というわけで以下のSHファイルを.sshのあるフォルダーに置いてやることが必要です。

/path/to/.ssh/git-ssh.sh
#!/bin/sh
exec ssh -oIdentityFile=/path/to/.ssh/id_rsa "$@"

このSHファイルに実行権限を与えることも必要。

cd /path/to/.ssh
chmod +x git-ssh.sh

SHファイルでPythonを動かす

直接Crontabでやってもいいのですが、今回はSHファイルを作成してPythonを動かすようにします。

scripts.sh
#!/bin/sh
cd /path/to/folder
export GIT_SSH=/path/to/.ssh/git-ssh.sh
python3 new_data.py > output_newdata.txt

crontabでSHファイルを定期的に実行する

最後にcrontabで定期実行の方法です。

まずcrontab -eをbashで実行し、crontabを開けます。

Cronの設定の仕方は割愛しますが、毎週土曜日の午後7:00にscripts.shを定期実行したいときは下記のようにします。(参考:crontabのガイドライン

00 19 * * 6 bash /path/to/folder/scripts.sh

これでうまく定期実行のできるようになりました。

参考サイトまとめ

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

リモートのブランチがmasterしかないときは.git/configを確認する

.git/config

の fetch を確認する

fetch = +refs/heads/master:refs/remotes/origin/master

とかだと、masterしか見えない。

fetch = +refs/heads/:refs/remotes/origin/

にすると全部見える。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

リポジトリが大きすぎて、cloneできないときは小分けにする

git clone --depth 1 hogehoge

cd hogehoge

git fetch --depth 50
git fetch --depth 100
git fetch --depth 500
・・・
git fetch --unshallow

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

warning: http.sslcapath has multiple values エラー

背景

gitの設定値の sslCAPathの設定中に warning: http.sslcapath has multiple values が発生して設定がうまくできない場合

原因

エラーメッセージ通り複数のsslcapathが設定されている場合にエラーとなる。

複数あるか確認

git config -l | grep ssl
http.sslcapath=/Library/xxx/somecacert1.pem
http.sslcapath=/Library/xxx/somecacert2.pem

解決策

unset-allする。

# いい例
sudo git config --unset-all --system http.sslCAPath

普通にunsetしようとしてもうまくできないので注意

# ダメな例
sudo git config --unset --system http.sslCAPath

参考

Window Git $ git config --global http.proxy warning: http.proxy has multiple values

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む