現在、Pythonのパッケージ管理でpipを実行していますが、コードベースを再実行するときに、チームのメンバーがpip install -r Requirements.txtをやり直すのを忘れてしまい、機能しない理由について混乱し続けています。git pull
そうは言っても、そのコマンドを、彼らのために行われ、彼らがそれについて考える必要がないように、とにかく彼らが常にしなければならない何かに結び付けることができる方法はありますか?
3 に答える
git post-mergeフックでシェルスクリプトを使用できます。これは、マージが行われるたびに実行されます。このフックはすべてのマージで実行されることに注意してください(実際に何かを行うすべてのプルはマージですが、すべてのマージがプルであるとは限りません)。
リポジトリのクローンが作成されたときにクライアント側のフックを自動的にインストールできるかどうかはわかりませんが、チームがプルするたびに何かを行うことを忘れないようにするのではなく、少なくともマージ後のフックを一度インストールできるはずです。 。
ここpost-merge
ではフックが正常に機能するはずです。.git/hooks/post-merge
プロジェクトのディレクトリでファイルを開きます.git
。次のコードスニペットをファイルに貼り付けます。
#/usr/bin/env bash
changed_files="$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)"
check_and_run() {
echo "$changed_files" | grep --quiet "$1" && eval "$2"
}
check_and_run requirements.txt "/path/to/virtualenv/bin/pip install -r /path/to/requirements.txt"
実行chmod +x post-merge
してファイルを実行可能にします。
それでおしまい。requirements.txt
これで、git mergeを実行し、ファイルに変更が加えられるたびに、pip install
自動的に実行されます。
すべてのユーザーのパスにツールを追加する権限がある場合。たとえば、すべてが単一のサーバーで作業します。それを行うためのスクリプトを作成するのは簡単です。
本質的には
#!/usr/bin/env bash
# Save as `git-pull2`
# Mark as executable (chmod +x git-pull2)
# Include on system path.
git pull $@
pip install -r requirements.txt
は@$
すべてのコマンド引数をスクリプトに渡しますがgit pull
、それが常に100%機能することを保証するものではありませんが、ほとんどのユースケースをカバーするはずです。
好きな名前を付けることができます。git内部コマンドをスクリプト化されたコマンドに置き換えることはテストしていません。たとえばgit-pull
、実際のgit-pullと競合して循環ループに入る可能性があるため、名前を付けることはお勧めしませんが、gitもそのように再発しないほど賢い。
gitがカスタムコマンドを展開する場合、git
キーワードが削除された後の最初のハイフン。たとえば、実行するには、文字通り、または埋め込みgitコマンドとしてgit-pull2
実行できます。git-pull2
git pull2