2017-03-09 10 views
0

GITの実装では、すべての変更が1つのリモートoriginからプルされてプッシュされます。私もローカルブランチが1つしかありません:masterGIT:別のリモートリポジトリに異なるサブディレクトリをプッシュ

私にはクローンしてから引き出すクライアントがあります。originです。ただし、特定のフォルダのみが必要です。毎回すべてを引っ張ると、望ましくないいくつかのフォルダが上書きされます。 Gitは選択的な引っ張りを許さないようです。

別のリモートレポを作成しました:production;私のローカルリポジトリから特定のフォルダだけがプッシュされます。予想される結果として、originにはプロジェクトのすべてのフォルダが含まれ、productionには選択されたフォルダのみが含まれています。

私はこれを解決するためのヒントや代替の最小限のアプローチを得てうれしいです。ここで

を説明するための例です: 私のローカルリポジトリには、以下の構造を有する:

root/... 
root/folder1... 
root/folder2... 
root/folder3... 
root/folder4... 

私はルートフォルダにgitのを初期化し、そして私は私のリモートoriginにすべての変更を追跡し、押してください。 originから引き出すクライアントは、フォルダ1-4からすべての変更を取得します。しかし、彼らはfolder2とfolder4と言う必要があります。ですから、私の考えはすべてのコミットをoriginにプッシュすることですが、folder2とfolder4のコミットだけをproductionにプッシュできるようにしてください。

このように、クライアントが起源をクローンすると、フォルダ1-4が取得されます。彼らがproductionをクローンすると、folder2とfolder4だけが得られます。

これはどのように達成できますか?

+2

Gitはファイルやフォルダをプッシュせず、*コミット*の観点から動作します。他のコミットのサブセットを含むコミットを送信する場合は、それらのサブセットを別々にコミットする必要があります。その後、好きなサブグラフを好きなものにプッシュできます。 – torek

答えて

0

この場合、私は2つのgitリポジトリを保持します。これを行うためのより適切な方法がありますが、このアプローチも有効です。次のようにディレクトリがある場合は、その後

root/... 
root/prod/.... 

は今、あなたはここにgit initroot上のディレクトリを行うことができます。このprod.gitignoreファイルに追加します。次にgit initroot/prodに置き、これを完全に異なるリポジトリとして扱います。

prod.gitignoreファイルを追加しないと、最初のリポジトリでそれを追跡できます。

+0

こんにちは。あなたのアナロジーを使って、ローカルディレクトリは、ルート/ ...、ルート/フォルダ1 ...、ルート/フォルダ2 ...、ルート/フォルダ3の形式です。 root(フォルダ1,2,3を含む)を起点とする。私は、リモートリポジトリをprodするためにfolder1とfolder3と言うだけの変更をプッシュしたい。そうすれば、誰かがクローンを作成すると、プロジェクト全体が取得され、クローン化された場合は、毎回folder1とfolder3だけが取得されます。ありがとう。 –

3

リポジトリ全体をプルできないプロジェクトがある場合は、間違った構造を設定しています。

それぞれのプロジェクトが必要とするコンポーネントごとにリポジトリをセットアップする必要があります。つまり、リポジトリは、それぞれの別個のパーツに適切にリポジトリを使用できます。

これでもまだ問題が解決しない場合は、全体的なアーキテクチャーを検討する必要があります。

関連する問題