Help us understand the problem. What is going on with this article?

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種類のリポジトリを扱うのは面倒なので、一元化したいと思います。
今度はソリューションとプロジェクトごとに管理を変えるということに挑戦してみたいと思います、。

Masutani
データサイエンティストをしています。地理空間情報系の処理を主に扱っています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away