2011-11-07 13 views
0

ステージングサーバー上にプッシュされた裸のレポがあります。これにはポスト受信フックがあり、すべてのデプロイメントを行います。これらの作業はすべて独立した作業ツリー(gitフォルダはありません)にチェックアウトされます。Gitサブモジュールを別の作業ツリーにプッシュ

ので、セットアップはこれです:

裸のレポは

/var/www/apps/e_learning_staging/elearning_resource.git 

作業ツリーでこのセットアップは現在正常に動作します

/var/www/apps/e_learning_staging/www 

になっています。しかし、私はプロジェクトに4つのサブモジュールを追加しました(実際には2つの別々のリポジトリを使用します - それぞれプロジェクトの2つの場所に複製されます)。サブモジュールreposはすべて別のサーバーにあります。 - 私はちょうど

git submodule add [email protected]:/home/charangadh/source_code/git/virgin_lesson_viewer.git public/assets/dvd_files/Virgin_lesson_viewer 
を行うだろうgitのフォルダは作業ツリーの中にあった

[core] 
    repositoryformatversion = 0 
    filemode = true 
    bare = true 
    logallrefupdates=true 
    worktree = /var/www/apps/e_learning_staging/www 
    gitdir = /var/www/apps/e_learning_staging/elearning_resource.git 
    [submodule "public/assets/players/virgin_lesson_viewer"] 
    url = [email protected]:/home/charangadh/source_code/git/virgin_lesson_viewer.git 
    [submodule "public/assets/players/virgin_lesson_viewer_staging"] 
    url = [email protected]:/home/charangadh/source_code/git/virgin_lesson_viewer_staging.git 
    [submodule "public/assets/dvd_files/Virgin_lesson_viewer"] 
    url = [email protected]:/home/charangadh/source_code/git/virgin_lesson_viewer.git 
    [submodule "public/assets/dvd_files/Virgin_lesson_viewer_staging"] 
    url = [email protected]:/home/charangadh/source_code/git/virgin_lesson_viewer_staging.git 

場合、それは十分に簡単だろう。このようになります

これらはすべて裸レポのconfigファイルにリストされています、サブモジュールごとに

を入力してから、「git submodule update」を実行してサブモジュールを更新します。しかし、私はそれを別々のgitフォルダからどうやって行うのかは分かりません。誰も私をまっすぐに置くことができます

答えて

0

私が問題をよく理解しているのであれば、基本的には展開ディレクトリにgit submodule updateを入れたいのですが、実際の作業ディレクトリではないためできません。バージョンがターゲットディレクトリに、このバージョンsupermodule

  • チェックアウトによって参照されたサブモジュールを決定し

    1. 私のソリューションは、カスタムgit submodule update様のコマンドを実装することです。スーパーモジュールをチェックアウトするのと同じ方法でこれを行うことができます。

    は、あなたがあなたのサーバー上で次のセットアップを持っているとしましょう:

    • ベアリポジトリは、あなたがsupermoduleを押すと、あなたは/var/www/supermoduleにsupermoduleをチェックアウトしたい/opt/repos/supermodule.git/opt/repos/submodule.git
    • に格納されており、サブモジュールを/var/www/supermodule/assets/submodule

    の受信後フックにする必要があります:

    # Checkout supermodule 
    export GIT_WORK_TREE=/var/www/supermodule git checkout -f 
    
    # Determine submodule version 
    submodule_version=$(git ls-tree HEAD assets/submodule | awk '{print $3}') 
    
    # Checkout submodule 
    export GIT_DIR=/opt/repos/submodule.git 
    export GIT_WORK_TREE=/var/www/supermodule/assets/submodule 
    git checkout -f $submodule_version 
    

    とにかくgit ls-treeを使用して、参照されたサブモジュールのバージョンを判断することがよくあります。

    あなたが別のサーバーにサブモジュールをプッシュする場合は、あなたはまだ少し修正して、このソリューションを使用することができます:ターゲットサーバ

  • /opt/repos/submodule.gitへのサブモジュールは、前git fetchコマンドを追加し

    • クローンをgit checkout

    だから、結果は以下の通りです:

    # Checkout submodule 
    export GIT_DIR=/opt/repos/submodule.git 
    export GIT_WORK_TREE=/var/www/supermodule/assets/submodule 
    git fetch 
    git checkout -f $submodule_version 
    
  • 関連する問題