2010-12-06 18 views
5

は、私は、スタンドアロンで使用することができるライブラリCommonを持っており、プロジェクトP1P2で使用されているので、私が作るときに私が欲しい木が共有のgitのサブモジュールで作業ツリー

/Common/.git 
     ... 
/P1/.git 
    .gitmodules # points to remote server 
    Common/ 
    ... 
/P2/.git 
    .gitmodules # points to remote server 
    Common/ 
    ... 

のように見えるとし/Commonが変更されました。コミットする前にP1P2を使用してテストすることができます。通常のgit submoduleコマンドセットでは、/Commonからコミットし、リモートにプッシュしてから、/P1/Common/P2/Commonの両方からプルする必要があります。コミットが何かを壊した場合、悪い変更が既に公開されているため、修正することはできません。あるいは、/P?/Commonからgit remote add quicktest /Commonをリモートサーバーに触れることなくプルできるようにすることもできます。しかし、これには矛盾する機会がたくさんあり、/P?/Commonから壊れたコミットを取り除くのが汚いので、/Commonに修正することができます。

私は開発中に、/Commonから作業ツリーがP1P2によって使用される、ということではなくだろうが、git submoduleがディレクトリからのような別のシンボリックリンクを認識するので、私は/Common/P1/Commonシンボリックリンクを作成することはできません。ほとんどのファイルシステムでは、ハードリンクディレクトリは許可されていません。私は、新しいファイルがこのプロセスを繰り返す必要がある。その場合には/Commonに追加されるまではかなりうまく機能

rm -rf /P1/Common 
cp -rl /Common /P1/Common 

を使用して、すべてのファイルをハードリンクすることができます。両方

  1. にエレガントな方法は私が簡単にP1P2/Common仕事でその変更をテストすることができますが、エンドユーザーのために働いてgit clone --recursive git://remote/P1.gitを維持し、
  2. ですか?
+0

サブモジュールでgit worktree機能(git 2.5以降)を試してみてください。そして、[この回答](https://stackoverflow.com/questions/27379818/git-possible-to-use-same-submodule-working-copy-by-multiple-projects/44649319#44649319)を参照してください –

答えて

0

私はむしろ中間裸のレポを確立します:コミットが改正された場合

  • プッシュCommon新しいコミット
  • P1/CommonP2/Common
  • 少なくとも

用からプル、/中間のレポが決して外部に公開されておらず、まだP1/CommonP2/Commonサブモジュールをリセットすることができます中間レポの内容。

+0

私はしないこの中間のレポが私には裸でない '/ Common'から引っ張ってくるものを見てください。私はまだテストする必要があります。テストが失敗した場合は、クリーンアップする必要があります。 – Jed

+0

@Jed:あなたが購入したものは、他のチームメイトには何の影響も与えずに履歴を書き直す可能性があります。 – VonC

+0

'git clone --bare/Common/Common-bareを比較してください。 cd/P1/Common; git remote add quicktest-bare/Common-bare'を 'git remote add quicktest/Common'に追加します。裸のリポジトリは何も追加していないようで、リモートも関係していません。しかし、これらの両方にパッチをテストするためのいくつかのステップがあります。 '/ Common-bare'を' git push -f'で削除することはできますが、余分な間接指定は何も追加していないようです。そして、私の質問のポイントは、数字を増やすのではなく、ステップ数を減らすことです。 – Jed

0

git 2.5以降でgit worktree機能を試してください。

  1. /P2に同じことをしてくる/P1/Common作業ツリー
  2. 実行のためgit worktree add ../P1/Common P1

P1ブランチを作成/P1/Common

  • CD /Common
  • を削除します。

    次に、/P1/Common,/P2/Common and/Common working trees share the same repository/Common/.git`。

    また、別の作業ツリーでコミットしているコミットを簡単にチェックアウトすることができます。

    P.S. git submoduleコマンドをgit worktree機能を使って毎日の作業に使うことができます。

  • 関連する問題