Edited at

Visual Studio Team Services へのコミットをgithubへ同期する

More than 1 year has passed since last update.

Visual Studio Team Servicesを使っていて、途中からgithubへ公開しようということになることはよくあります。

リモートリポジトリを2つにして、別々にコミットすることも可能なようですが、VSTSをプライマリにして、あと、githubへコピーしてくれればいいよという場合は、VSTSのCIの機能で実現することが可能です。


Build を作成

Buildを作成します。[プロジェクト名]-CIという名称のBuild Definitionができます。

image.png


Sourceの設定

ソースとなるのはこの場合VSTSのgitになりますので、それを選択します。当たり前の設定のようですが、このプロジェクトをしていておきます。こちらを外部のgitリポジトリやsubversionなどを監視することで、どのようなマルチサイト構成でも対応できそうです。

image.png


Agentの設定

これも自動的に生成されますが、Agentとして、フェーズをまとめた自動化スクリプトを記述できるようになります。ここでは、基本的には複数のコマンドラインコマンドの実行のみを行います。

image.png


Taskの作成

具体的に行うアクションを指定します。ここではgithubへの操作を行うだけなのですが、特に特別なタスクテンプレートは用意されておらず、直接gitコマンドをコマンドラインで実行することになります。git pull, git pushする形で、同期を行います。

image.png


pullタスク

以下のようなコマンドで指定できました。personaltokenはあらかじめ指定しておきます。allow-unrelated-historiesというものを指定しないと、通らなかったので入れました。

pull https://$(githubpersonaltoken)@github.com/hoge/project.git master --allow-unrelated-histories

image.png


pushタスク

プッシュ時もほぼ同様です。タスクを分ける必要がないように思いますが、エラー時に切り分けがしやすいようでした。

push https://$(githubpersonaltoken)@github.com/hoge/project.git  head:master

またgithubアクセスのセットアップとして、email,nameを指定しなければいけないので、以下2行を追加しました。

config --global user.email "your email address"

config --global user.name "hoge"


Triggerの作成

VSTS(のgitリポジトリ)にPUSHされたタイミングで同期をかけたいので、Enable CI をチェックしてトリガーを作成します。またフィルタにより、特定のブランチや特定のフォルダだけを監視することも可能です。

image.png


まとめ

これでいいのかどうかわかりませんが、どうやら所望の動きはしているようです。

githubへの同期はVisual Studioから直接できますが、2種類のリポジトリを扱うのは面倒なので、一元化したいと思います。

今度はソリューションとプロジェクトごとに管理を変えるということに挑戦してみたいと思います、。