GitHub上のフォークリポジトリの更新・同期方法 (日本語)
GitHub上でフォークしたリポジトリを最新の状態に保つためには、定期的に上流リポジトリと同期する必要があります。以下にその方法を説明します。
上流リポジトリの設定
- フォークしたリポジトリのページで、設定ボタンをクリックします。
- "Branches"タブを選択し、"Set up a branch protection rule"をクリックします。
- "Branch name pattern"に"main"またはフォークしたリポジトリのデフォルトブランチ名を入力します。
- "Require pull request reviews before merging"のチェックボックスをオンにし、必要なレビュー数を設定します。
- "Require status checks to pass before merging"のチェックボックスをオンにし、必要なステータスチェックを設定します。
- "Enforce a linear history"のチェックボックスをオンにします。
- "Restrict who can push to this branch"のチェックボックスをオンにし、必要なユーザーまたはグループを設定します。
- "Save changes"ボタンをクリックして設定を保存します。
- フォークしたリポジトリのページで、"Code"タブを選択し、"Fetch upstream"ボタンをクリックします。
- "Add upstream"ボタンをクリックし、上流リポジトリのURLを入力します。
- "Add upstream"ボタンをクリックして設定を保存します。
上流リポジトリからのフェッチ
- ターミナルまたはコマンドプロンプトを開き、フォークしたリポジトリのディレクトリに移動します。
- 次のコマンドを実行します:
git fetch upstream
これにより、上流リポジトリの最新コミットをローカルにフェッチします。
- 上流リポジトリの変更をローカルのブランチにマージします。
git merge upstream/main
ここで、"main"は上流リポジトリのデフォルトブランチ名です。
変更のプッシュ
- ローカルの変更をリモートリポジトリにプッシュします。
git push
注意:
- 上流リポジトリの変更が競合する場合、マージ時に手動で競合を解決する必要があります。
- 頻繁な更新が必要な場合は、自動化ツールやワークフローを使用することもできます。
GitHubフォークリポジトリの同期に関するコード例と解説
# 上流リポジトリを追加 (まだ設定していない場合)
git remote add upstream https://github.com/original-owner/original-repo.git
# 上流リポジトリから変更をフェッチ
git fetch upstream
git remote add upstream https://github.com/original-owner/original-repo.git
upstream
という名前で、オリジナルのリポジトリをリモートとして追加します。https://github.com/original-owner/original-repo.git
の部分は、オリジナルリポジトリのURLに置き換えてください。
git fetch upstream
- 上流リポジトリから全てのブランチとタグの情報をローカルに取得します。
ローカルブランチとマージ
# ローカルのメインブランチにマージ (mainがデフォルトブランチの場合)
git merge upstream/main
git merge upstream/main
- 上流リポジトリの
main
ブランチの変更を、現在のローカルブランチにマージします。 - 衝突が発生した場合、手動で解決する必要があります。
- 上流リポジトリの
# 変更をリモートリポジトリにプッシュ
git push
git push
特定のブランチをマージする場合
# 特定のブランチ(feature)をマージ
git merge upstream/feature
git merge upstream/feature
GitHub CLIを使う場合
# GitHub CLIでフォークを同期
gh repo sync -b main
gh repo sync -b main
- GitHub CLIを使用し、
main
ブランチを同期します。
- GitHub CLIを使用し、
コード例における重要なポイント
upstream
: 上流リポジトリの別名。feature
: マージしたい特定のブランチ名。
- 競合の解決: マージ中に競合が発生した場合、
git mergetool
や手動でファイルを編集して解決します。 - 定期的な同期: 定期的に同期を行うことで、常に最新の状態を保つことができます。
- GitHub Actions: ワークフローを作成し、自動で同期を行うことも可能です。
これらのコマンドを組み合わせることで、GitHub上のフォークリポジトリを上流リポジトリと同期させることができます。
- 上記のコードは基本的な例です。リポジトリの構成や、個人のワークフローに合わせて適宜変更してください。
- より複雑なシナリオでは、
rebase
やcherry-pick
などのコマンドも利用できます。
さらに詳しく知りたい場合
- GitHubの公式ドキュメント: フォークの同期に関するより詳細な情報が記載されています。
- Qiitaなどの技術情報サイト: 多くのユーザーが自身の経験を共有しています。
- Gitの書籍: Gitの基礎から応用まで、幅広く学ぶことができます。
GitHub CLI を利用した同期
GitHub CLI (gh) は、コマンドラインからGitHubを操作するためのツールです。フォークの同期を簡潔に行うことができます。
gh repo sync -b main
-b main
オプションで、main
ブランチを同期します。他のブランチを同期したい場合は、ブランチ名を指定してください。
GitHub Desktop を利用した同期
GitHub Desktop は、GitHubの操作をグラフィカルなインターフェースで行えるツールです。
- フォークのリポジトリを開く: 同期したいフォークのリポジトリを開きます。
- 「Fetch upstream」ボタンを押す: 上流リポジトリからの変更を取得します。
- 「Merge upstream/main」ボタンを押す: 上流リポジトリの
main
ブランチをマージします。 - 「Push origin」ボタンを押す: 変更をリモートリポジトリにプッシュします。
Webブラウザから同期
GitHubのWebインターフェースからも、ある程度の同期を行うことができます。
- 「Compare & pull request」ボタンを押す: 上流リポジトリとの差分を確認し、プルリクエストを作成する画面に遷移します。
- 「Merge pull request」ボタンを押す: プルリクエストをマージします。
Git Submodule を利用する場合
複数のリポジトリを組み合わせて一つのプロジェクトとして管理したい場合、Git Submoduleが有効です。
- サブモジュールを追加: 上流リポジトリをサブモジュールとして追加します。
- サブモジュールを更新:
git submodule update
コマンドでサブモジュールを更新します。
- スクリプト: BashスクリプトやPythonスクリプトを作成し、自動化することも可能です。
どの方法を選ぶべきか?
- 頻度: 頻繁に同期する場合は、GitHub CLIやGitHub Actionsが便利です。
- 操作性: GUIでの操作が好きな場合は、GitHub Desktopがおすすめです。
- 複雑さ: 複数のリポジトリを組み合わせる場合は、Git Submoduleが有効です。
注意点
- 競合: マージ時に競合が発生する可能性があります。競合は手動で解決する必要があります。
- ブランチ: どのブランチを同期するのかを明確にする必要があります。
- リモート: 上流リポジトリを正しくリモートとして設定しているか確認してください。
GitHubフォークリポジトリの同期方法は、コマンドライン、GUIツール、Webブラウザなど、様々な方法があります。ご自身の環境や好みに合わせて最適な方法を選択してください。
git github synchronization