前回GitHubのリポジトリをAzure Reposにインポートする方法を解説しました。
今回はその続きとして、インポート元のGitHubリポジトリに対して行われた修正を、Azure Reposのリポジトリに反映する方法について解説しようと思います。 なお今回はVisual Studioを使った方法を解説します。 コマンドラインでも同等のコマンドを発行することで、同じことができます。
環境
- Visual Studio 2019 16.4.5
Gitリポジトリをクローンする
まずはGitHubからインポートしたAzure ReposのGitリポジトリをローカルにクローンしておきます。 Visual Studioを起動して [チームエクスプローラー] を立ち上げて、Azure ReposのGitリポジトリをクローンします。
リモートリポジトリを設定する
次に、Gitリポジトリの設定画面を開きます。 [チームエクスプローラー] の上部にあるドロップダウンから [設定] を開きます。 そして下部に表示される [リポジトリの設定] を選択します。
リポジトリの設定画面の中の [リモート] のセクションを開きます。 初期状態ですと、 [origin] という名前のAzure Reposのリモートリポジトリが設定されていると思います。 [追加] を選択します。
[リモートの追加] ダイアログが出るので、そこにGitHubのリポジトリを設定します。 名前はなんでも構わないのですが、わかりやすく [upstream] にしておきます。
これでリモートリポジトリの設定ができました。
GitHubに入った変更を取得してローカルのmasterブランチに反映する
再度 [チームエクスプローラー] に戻り、上部のドロップダウンから [同期] を選択します。 次に [フェッチ] を選択して、先ほど設定した [upstream] をドロップダウンから選択します。 設定が終わったら [フェッチ] ボタンを押下します。
これで正常に動作していれば、GitHubのリポジトリの情報がフェッチされます。 上部のドロップダウンから [ブランチ] を選択します。 正常にフェッチが完了していれば、 [remotes/upstream] にGitHubのリポジトリの情報が見えるはずです。
続いてGitHubのリポジトリに対する変更をローカルのmasterブランチに取り込んでいきます。 引き続き [ブランチ] のウィンドウで [リベース] を選択します*1。 今回はローカルのmasterブランチに、GitHub上のmasterブランチを取り込んでいくので、以下のような設定になります。 設定が終わったらそのまま [リベース] ボタンを押下しましょう。
うまくマージができたら、Azure Reposに変更を反映します。 上部のドロップダウンから [同期] を選択します。 [出力方向のコミット] にGitHub上で行われたコミットが並ぶので、そのまま [プッシュ] を押下して反映させます。
これでGitHubのリポジトリの変更を、Azure Reposのリポジトリに取り込むことができました。
インポートしたAzure ReposからGitHubへのプルリクエストは作れない
前回の記事でも記載した通り、ここで解説した方法はGitHubやAzure Reposのフォークを使った方法ではありません。 そのため、インポートしたAzure Reposに対して行った修正を用いて、GitHubのリポジトリに修正を反映させることはできません。 プルリクエストもGitHub、Azure Repos単独の機能なので、この境界を超えることはできないんですよね。 こういったことをやりたいのであれば、元となるリポジトリと同じサービス内にフォークしたリポジトリをたててあげる必要があります。
*1:こういったケースでは、git rebaseで取り込む方が都合が良いと思います。