2

gitに関してはまだ初心者なので、次の質問/回答を見ましたが、実際にこれを行うの に十分な理解が得られませんでした。これが私の基本的な問題です:

コードを移動するいくつかの環境(開発、テスト、本番)があります。ほとんどの場合、私は開発中に開発し、プライベートリポジトリをbitbucketにプッシュします(無料のプライベートリポジトリを持つことができるため)。次に、更新されたコードが必要な他の環境のビットバケットからこれをプルダウンします。それはいいです; 期待どおりに動作します。

問題は、プライベートリポジトリ内に「外部」ディレクトリがあり、パブリックリポジトリの束がぶら下がっている場合です(下の図を参照)。

リポジトリディレクトリ構造の例

すべてのパブリックリポジトリのチェックアウトステータスを常に同じにしたいと思います。したがって、私の開発環境のパブリックリポジトリ1は、マスターより10コミット遅れていたとしましょう。プライベートリポジトリをテスト環境にプルするとき、プライベートリポジトリをプルダウンするだけでなく(問題はありません)、パブリックリポジトリ1を開発時に存在するのと同じコミットレベルにプルダウンしたいと思います。

これは可能ですか?

4

1 に答える 1

1

はじめに、開発、テスト、本番領域にブランチを使用せず、代わりに同じコードベースの複数のリポジトリを管理している場合は、単にブランチを使用することを検討する必要があります。これにより、コードを別の場所にプッシュする代わりに、コードの管理がはるかに簡単になります。

この概念について詳細に説明するgit-flowと呼ばれる「モデル」があります:http://nvie.com/posts/a-successful-git-branching-model/

外部のパブリックリポジトリに関しては、gitサブモジュール機能はまさにあなたが求めているもののように聞こえます。リポジトリをサブモジュールとして追加することにより、メインリポジトリはそれらをコミットまで追跡します。つまり、あなたが言ったように、パブリックリポジトリAが10コミット遅れており、それがメインリポジトリでコミットする場所である場合、同じ場所で再度チェックアウトされます。

サブモジュールリポジトリの変更では、最初に外部リポジトリに変更を加え、それらの変更をプッシュし、メインリポジトリサブモジュールにプルしてから、メインリポジトリでコミットする必要があります(変更されたコミットを追跡するため)。

より詳細なサブモジュールチュートリアルがありますが(ここに1つあります)、一般的な概要は次のようになります。

cd mainRepo
git submodule add http://git.domain.com/repo external/submoduleA

これにより、パブリックリポジトリがexternal/submoduleAに複製されます。ここから、必要に応じて別のコミットをチェックアウトできます。ただし、準備ができたら、メインリポジトリにこれを追加してコミットできます。このメインリポジトリを他の誰かに再度複製すると、次のようになります。

git clone http://git.domain.com/myMainRepo --recursive

このrecursiveオプションは、すべてのサブモジュールのチェックアウトも続行するように指示します。これを省略して、2番目のステップとして初期化することができます。ただし、コマンドのすべてのオプションを調べるのはあなたに任せますsubmodule

于 2012-11-25T02:17:18.770 に答える