statsmodelsコードの操作¶
Github¶
statsmodels のコードベースは Github でホストされています。貢献するには、無料のGithubアカウントにサインアップ する必要があります。
バージョン管理とGit¶
開発には、Git バージョン管理システムを使用しています。Gitを使用すると、多くの人が同じプロジェクトで共同作業できます。簡単に言うと、他のユーザーがコードで作業している場合でも、独立してコードを変更し、コードベースに変更を簡単に反映させることができます。また、コードに対するすべての変更の完全な履歴が保持されるため、変更を簡単に元に戻したり、変更がいつ、誰によって、なぜ行われたかを確認したりできます。
Gitをインストールして設定し、SSHキーを設定するには、gitの設定 を参照してください。
Gitの詳細については、次のサイトをご覧ください。
以下では、statsmodels に貢献するために必要な最小限のgitコマンドについて説明します。
statsmodelsのGit/Githubワークフロー¶
フォークとクローン¶
gitを設定した後、メインのstatsmodels リポジトリをフォークする必要があります。これを行うには、statsmodelsプロジェクトページ にアクセスし、フォークボタンをクリックします(リポジトリのフォーク の手順を参照)。これにより、フォークのページが表示されます。
次に、フォークをマシンにクローンします
git clone https://github.com/your-user-name/statsmodels
cd statsmodels
git remote add upstream https://github.com/statsmodels/statsmodels
git fetch --all
3行目は、アップストリームのstatsmodelsリポジトリへの読み取り専用接続を設定します。これにより、アップストリームの変更を使用してローカルコードを定期的に更新できます。最後のコマンドは、リポジトリとアップストリームのstatsmodelsリポジトリの両方をフェッチします。
ブランチの作成¶
コードのすべての変更は、フィーチャブランチで行う必要があります。ブランチを作成するには、次のように入力します
git checkout main
git rebase upstream/main
git checkout -b shiny-new-feature
最初の2行は、アップストリームのstatsmodelsリポジトリの最新バージョンから開始することを保証します。3行目は新しいブランチを作成してチェックアウトします。
次を実行すると
git branch
次のような出力が得られます
* shiny-new-feature
main
これは、現在shiny-new-feature ブランチにいることを示しています。
変更の実施¶
自由にハックしてください!必要な変更を加えてください。ただし、ブランチでの作業は、特定のトピック、バグ修正、または機能の実装に完全に限定してください。複数のファイルで作業し、多くのコミットを行うことができますが、変更はすべてフィーチャブランチの機能に関連している必要があります。
foo.py ファイルを変更したとします。変更内容を確認するには、次のように入力します
git status
次のような出力が表示されます
# On branch shiny-new-feature
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: relative/path/to/foo.py
#
no changes added to commit (use "git add" and/or "git commit -a")
これらの変更をコミットする前に、変更をaddまたはstageする必要があります。これを行うには、次のように入力します
git add path/to/foo.py
次に、ステータスを確認して、コミットが問題ないことを確認します
git status
次のような出力が得られます
# On branch shiny-new-feature
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: /relative/path/to/foo.py
#
変更のプッシュ¶
いつでも、フィーチャブランチ(および変更)をgithub(フォーク)リポジトリにプッシュできます
git push
ただし、初めて実行する必要があるのは
git push –set-upstream origin shiny-new-feature
これは、gitに現在のブランチをgithubリポジトリの対応するブランチを追跡するように指示するためです。
リモートリポジトリは、次のように確認できます
git remote -v
上記のようにアップストリームリポジトリを追加した場合、次のような出力が表示されます
origin https://github.com/yourname/statsmodels.git (fetch)
origin https://github.com/yourname/statsmodels.git (push)
upstream https://github.com/statsmodels/statsmodels.git (fetch)
upstream https://github.com/statsmodels/statsmodels.git (push)
ただし、コミットをプッシュする前に、プッシュする内容が理にかなっており、クリーンであることを確認することを*強く*お勧めします。変更履歴は、次のように確認できます
git log --oneline --graph
githubにプッシュする前に、ローカルで処理しておくと便利です。疑問がある場合は、プッシュしないでください。マージとリベース の履歴をクリーンに保つためのアドバイスも参照してください。
プルリクエスト¶
コードレビューを依頼する準備ができたら、プルリクエストを提出することをお勧めします。その前に、変更セットを自分で確認する必要があります。これは、githubの比較ビュー を使用して行うことができます。
githubのリポジトリに移動します。
ブランチリスト をクリックします
フィーチャブランチshiny-new-feature の比較 ボタンをクリックします。
必要に応じて、ベース ブランチと比較 ブランチを選択します。これはそれぞれmain とshiny-new-feature になります。
ここから、変更の概要を確認できます。問題があれば、修正できます。
すべて問題なければ、プルリクエスト を作成する準備ができています。
githubのリポジトリに移動します。
プルリクエスト ボタンをクリックします。
次に、コミット と変更されたファイル をクリックして、すべてが問題ないことを最後に確認できます。
プレビューディスカッション タブに変更の説明を入力します。
プルリクエストを送信 をクリックします。
リクエストがレビューされます。戻ってさらに変更を加える必要がある場合は、ブランチで変更を加えてgithubにプッシュすると、プルリクエストが自動的に更新されます。
最後に一つ。パッチを開始してからupstream/mainに多くの作業があった場合は、リベースすることをお勧めします。ただし、これらの変更がshiny-new-feature ブランチで行った作業に関連していない場合は、リベースしなくても済む可能性があります。避けられる場合は、リベースしないでください。必要な場合は、一度だけ、変更の最後に実行してみてください。マージとリベース に関する注意事項を読み続けてください。
高度なトピック¶
マージとリベース¶
これは、ここで提供できる以上の専門知識と詳細な議論が行われているトピックです。このセクションでは、さらに読むためのリソースといくつかのアドバイスを提供します。ただし、焦点は、フィーチャブランチのプルリクエストを送信したい人のためです。これらの場合、リベースが推奨されます。
リベースは、あるブランチのコミットを別のブランチの上に再生して、線形の履歴を保持します。コミットは、ブランチを開始した(おそらく)古いバージョンのmainに対してテストされたため、リベースするとバグが発生する可能性があることに注意してください。ただし、コミットが少数の場合は、それほど問題にならない可能性があります。リベースについて学ぶのに最適な場所の1つは、簡単なリベース です。特に、警告に注意 してください。つまり、**リベースを行う前に、必ず新しいブランチを作成してください**。これは、gitで作業するための一般的な良いアドバイスです。また、**公開済みの作業にはリベースを使用しないでください**。別の開発者が作業を使用している場合は、リベースしないでください!
マージに関しては、**トランクからフィーチャブランチにマージしないでください**。ただし、作業がトランクにクリーンにマージされることを確認する必要があります。これはレビュー担当者の役に立ちます。これは、ローカルリポジトリで作業をmainブランチ(またはリモートmainブランチを追跡するブランチ)にマージし、テストを実行 することで実行できます。
ブランチの削除¶
フィーチャブランチがアップストリームに受け入れられたら、それを削除することができます。最初に、アップストリームmainをブランチにマージします。そうすれば、gitはブランチを安全に削除できることを認識します
git fetch upstream
git checkout main
git merge upstream/main
その後、次のように実行できます
git branch -d shiny-new-feature
小文字の-dを使用してください。そうすれば、フィーチャブランチが実際にマージされていない場合、gitは警告を発します。ただし、ブランチはgithubにまだ存在します。githubでブランチを削除するには、次のようにします
git push origin :shiny-new-feature branch