5

プロジェクトの標準リポジトリがあります

/home/repo/.git  

これは、新しいWebサイトのベースコードを取得するために複製するリポジトリです。つまり、これを複製します。

/var/www/site1

また、リポジトリとして作成したモジュールがいくつかあります。これらのモジュールを使用するWebサイトと使用しないWebサイトがあります。

/home/modules/mod1/.git  
/home/modules/mod2/.git

それらのモジュールを同じサイトフォルダに複製する方法はありますか?

/var/www/site1  

モジュールディレクトリは、マスターリポジトリと同じフォルダ構造で設定されています。マスターリポジトリのクローンの上にクローンを作成する場合は、既存のファイルをマージ/置換する必要があります。(ファイルが重複することはめったにありません)

私の最適な解決策は、リポジトリに何らかの方法で名前を付けて、新しいサイトをデプロイするときに次のようなことを行うことです。

cd /var/www/newsite  
git clone /home/repo/.git  
git clone /home/modules/mod1/.git  
git clone /home/moudles/mod2/.git  

また、サイトを更新する場合は、次のようなプルを実行できます。

git pull origin master  
git pull mod1  
git pull mod2  

またはできれば:

git pull origin master 

また、プルオンとを呼び出しmod1ますmod2

私はgitサブモジュールとブランチを見てきましたが、それらが必要なものであるかどうかわかりません。

4

3 に答える 3

4

以下は、希望するデプロイ コマンドに対するわずかな変更の提案です。

cd /var/www/  
git clone /home/repo/.git newsite
git remote add mod1 /home/modules/mod1/.git  
git remote add mod2 /home/moudles/mod2/.git  

cd newsite
git merge mod1/master
git merge mod2/master

説明:

あなたが言ったように、あなたのメイン モジュール (/home/repo) とあなたmod1mod2などは同じフォルダー構造を持っています。サブモジュールはメインリポジトリのサブディレクトリに存在する必要があるため、サブモジュールは実際には適切ではありません。このバージョンでは、(によって作成されたclone) ローカル git リポジトリは 3 つのリモート リポジトリを認識します。操作後merge、その状態はそれらのいずれとも同じではありません。mod1のmergeは、mod1 が「所有」する新しいファイルを取り込みます。home/repoのファイルが のファイルと同じ名前の場合、マージの競合が発生する可能性がありますmod1。フラグを指定して、常にmergeからバージョンを選択することができます。mod1

于 2012-11-25T07:45:03.723 に答える
1

つまり、ある git リポジトリを別のリポジトリの sudirectory にすることはできません。

このルールには例外が 1 つあります。1 つの git リポジトリを別のリポジトリのサブモジュールとして持つことができますが、これには多くの制限と不都合があります。

これに対する一般的なアプローチは、独自の実際の修道院を持たず、サブモジュールとして少数の git リポジトリのみを追跡する 1 つのマスター git リポジトリを用意することです。

repoまたは、この目的のために Android プロジェクトによって開発されたツールを使用することをお勧めします。サブプロジェクトがどこにチェックアウトされ、どのように結合されているかを追跡する XML ファイル (マニフェストと呼ばれる) を 1 つだけ含む小さな git リポジトリを作成する必要があります。これは Linux と Mac で非常にうまく機能しますが、残念ながら Windows をサポートしていません (レポには OS によるシンボリック リンクのサポートが必要です)。

ある意味では、git サブモジュールと android repo は本質的に同じタスクを解決しますが、わずかに異なる手段を使用します。

于 2012-11-25T07:19:41.483 に答える