2016-05-30 13 views
3

私はバックエンド開発を行い、別の人がフロントエンド開発を担当するプロジェクトを割り当てられました。フロントエンドの開発者は、開発サーバーやプロジェクトコードにアクセスできないという要件があります。そこで、フロントエンド用に別のリポジトリを作成することにしました。gitサブモジュールを自動的に引き出すには?

問題は、何かがリモートのリポジトリにコミットされたときに、リモートサーバーからすぐに引き出すサブモジュールを作成する方法がわかりません。私は開発者にコミットし、フロントエンドの変更をすぐに確認する必要があります。

私はgitフックについて読んでおり、post-receiveフックを使ってこれを行うことができます。しかし、それは動作していないようです。ここに私がやったことです:

  1. をメインプロジェクトのルートディレクトリから、私は次のディレクトリには、私が許可され、実行権限を持つpost-receiveファイルを作成し
  2. /.git/modules/submodule-directory/hooksました。 post-receiveファイルの
  3. 内容:

    #!/bin/sh 
    git pull 
    
  4. は、サブモジュールのレポへの私のローカルマシンからの変更をプッシュが、何も起こりませんでした。

私は間違っていますか?

編集:私は私の質問に関するいくつかの点を明確にするつもりです。

私は2つのリポジトリを持っています: "メイン"リポジトリは、プロジェクト全体です。フロントエンドのもの(ビュー、アセットなど)である別のリポジトリ。この "フロントエンド"リポジトリと呼ぶことにしましょう。

私のメインリポジトリには、/ submodules/frontend内にあるサブモジュールとしてfrontend repoを追加しました。このように、アウトソーシングされたフロントエンドの開発者は、実際のプロジェクトについては何も見ることができません。彼らは彼らが取り組んでいるものだけを見るでしょう。

これは実際にはアクセス制御の点では完全に機能し、フロントエンド開発の進捗状況をプロジェクトとは別に簡単に監視できます。しかし、私はどのようにするか分からないという一つの問題があります。

私たちのプロジェクトには、開発サーバーと運用サーバーの2つのサーバーがあります。開発サーバーは、メインリポジトリとフロントエンドリポジトリの両方のために常にマスターブランチに存在する必要があります。このようにして、フロントエンドチームとバックエンドチームの両方がアップデートを見ることができます。フロントエンドチームは主にテンプレートで動作しますが、テンプレートはデータベースに格納されたデータにアクセスし、バックエンド(たとえばモデル)に統合された多くのものを使用しています。

この「システム」が機能するためには、「フロントエンド」に新しいコミットがあるときは常に、フロントエンドのリポジトリをフェッチしてマージする必要がありますリモートリポジトリ。つまり、フロントエンドチームがgit commitgit pushの場合、開発サーバーの「フロントエンド」レポサブモジュールはすぐにgit pullになる必要があります。だから、フロントエンドの人が自分のものをテストしようとすると、直ちに最新の変更が表示されます。

私はそれを読むことができるpost-receiveフックことができますが、私はこのフックがサブモジュールのためだけに存在する必要があることをお読みください。だから、いくつかの掘り出した後、私はすべてのサブモジュールのフックが/.git/modules/submodules/frontend/hooksに存在することを発見しました。だから、私は次のコードでそのディレクトリにpost-receiveフックを作成しました:

#!/bin/sh 
git pull 

しかし、これは動作しませんでした。私の質問は、ポスト受信サブモジュール内のフックを動作させる方法ですか?

は私が取ったルートは完璧にはほど遠いです知っているが、それは一つのディレクトリ開発サーバーへのアクセスを持たずにのみアクセスする開発者を許可することになると、これは私には理にかなっている唯一の方法です。

これは意味があると思います。

+0

マニュアル 'git pull'はヒントを与えるかもしれません – renemilk

+0

もう一つの精度ミス:例えば、開発サーバーについて、ローカルからリポジトリにプッシュしますか? '--bare'リポジトリへ?直接開発に使用されるディレクトリに? – Asenar

+0

あなたは(あなたのローカルマシン上の)2ローカルリポジトリを持っているので、私は(のがないようにしましょう、OK Gitlab.com – Gasim

答えて

2

あなたgit pull、これは(基本的に)git fetch && git mergeと同等です。これはサブモジュールを更新しません。

私が必要としていることを理解していれば、受信後のフック(メインの.git/hooksディレクトリ)のコマンドgit submodule update(またはgit submodule foreach 'git pull')で実行できます。私が理解した内容に基づいて、あなたはgitlabフロントエンドリポジトリにpost-receiveフックを追加する必要があり、そしてあなたのフックがして(開発サーバーで多分git submodule foreach 'git fetch && git merge'をコマンドgit submodule updateを実行する(または必要があります。

ADD(あなたの版に基づきます) sshコマンドなど)

開発サーバーのインストール方法を再考する方が簡単かもしれませんが、完全に分離された2つのリポジトリをサブモジュールとしてインストールすることはできません。サブモジュール/フロントエンドを追加することもできます.gitignoreディレクトリが。これは必ずしもあなたがサブモジュールからfrontendを削除する必要が意味するが、ちょうどあなたの開発サーバーでそれを使用していない。

+0

私の質問はあまり明確ではありませんでした。私はそれ自身で動作するサブモジュールにフックを追加したいと思います。したがって、私がメインリポジトリにコミットしている場合、サブモジュールを更新しません。サブモジュールは、サブモジュールのリモートリポジトリに変更があった場合にのみ更新されます。 – Gasim

+0

あなたは 'メインリポジトリにコミットする' 'コミット'≠ 'プッシュ'と呼んでいることについて、まだ私には不透明なようですか?ローカルサブモジュールレポリモートサブモジュールのレポ?ローカルの "main project repo"など – Asenar

+0

私はいつもコミットしてプッシュするので、コミットと言うだけです。私の編集を見てください。私は使用しているすべての用語と、それを動作させる方法を明確にしました。混乱させて申し訳ありません。 – Gasim

関連する問題