2017-07-21 3 views
0

バージョン管理GUIツールを使用しないワークフロー(たとえば、SourceTreeなど)は、次のようなものです。コマンドラインで入力します。ローカルマシンにローカルリポジトリがあります。ローカルのリポジトリのコピーを持つサーバー(AWS EC2インスタンス)があります。私はリモートレポにBitbucketを使用します。私のローカルマシンで行う最初の部分(ローカル、以下のコードを参照してください)。私はSourceTreeのようなGUIツールを持っている最初の部分についてリモートレポのサーバーコピーの更新を自動化するにはどうすればよいですか?

# On local repo: 
$ git add . 
$ git commit -m "Commit message" 
$ get push origin foo-branch 

# On remote repo 
$ git fetch origin 
$ git merge origin/foo-branch 

:それから私は、SSHとコマンドラインを使用して、私のEC2サーバを接続し、第二部、git fetchget mergeを入力します。しかし、2番目の部分では、サーバー上で変更を取得して適用するためにコマンドラインを使用する必要があります。

私の質問は、プロセスを自動化するためのツールがあるかどうかです。したがって、コマンドラインでサーバをSSHに接続し、git fetchgit mergeと入力する必要はありません。

たとえば、ローカルマシンで(たとえばSourceTreeを使用して)コミットをプッシュすると、サーバーが自動的にそれを検出して変更をフェッチしてマージします。

答えて

1

複数の異なるrepoイベント(プッシュなど)に基づいてサーバーコマンドをトリガーするBitbucket webhookを使用できます。ページURLがヒットしたときにサーバー上でGitの手順を実行するスクリプトを実行するWebページを作成するだけです。

BitbucketレポにWebhookを追加して、目的のイベントが発生したときにWebページにヒットします。

webhooksのBitbucketクラウドドキュメントを参照してください。https://confluence.atlassian.com/bitbucket/manage-webhooks-735643732.html Bitbucketサーバーも同様です。

1

リモートリポジトリが作業ディレクトリを持たない裸のレポであるため、リモートgitリポジトリはマージ操作を実行できません。したがって、git fetchgit mergeのようなコマンドは、リモートレポには使用できません。

あなたの周りの仕事は、あなたの地元のレポに前プッシュフックを使用することができます:あなたは、リモートにfoo-branchをプッシュする前に、事前にプッシュフックがtriggerdされ、その後、あなたはあなたのmasterブランチを更新し、masterfoo-branchをマージすることができます。以下のように事前にプッシュフックのスクリプト:

#!/bin/sh 

git checkout master 
git pull origin master 
git merge foo-branch 
git checkout foo-branch 

注:

  • masterブランチにfoo-branchをマージすると、早送りマージされていない場合、または競合が合併していることと、あなたがすべきマージ競合を自動的に解決するには、-Xオプションを使用してください。あなたは代わりにgit merge foo-branch -X theirsを使用することができますなど。
  • マージコミットをローカルmasterブランチからリモートmasterブランチにプッシュしたい場合は、代わりにgit push origin foo-branchgit push --allを使用する必要があります。

ところで、リモートのrepoにプッシュしたときにwebhookを使ってスクリプトを起動しても、リモートのrepoからgit fetchとgit mergeを実行することはできません。

関連する問題