2016-10-26 3 views
1

この質問は、私がこのルートを選択された原因となっています。だから私は独自のgruntfileとgitリポジトリを持ち、積極的な開発の下にある小さなプロジェクト(web stuff)を持っています。私はこの開発のの結果を他のいくつかのプロジェクトで使用したいと思います。つまり、私はgruntfileやsassファイルなどを必要としません。しかし、この共有プロジェクトにアップデートがあれば、それらの更新を現在のプロジェクトのファイルに取り込みマージすることができます。また、これらのファイルを変更して、現在のプロジェクトのニーズに合わせて変更したいと考えています。他のいくつかのプロジェクトでgitサブモジュールとして小さなプロジェクトを使用しています - 動作させることはできません。

私が理解している方法は、これらのファイルが必要な他のプロジェクトでgitサブモジュールを作成する必要があります。私はgitにはかなり新しいと言わなければなりませんが、これまで私はいくつかの個人的なプロジェクト(それを愛しています)のために使ってきましたが、協力的ではありません(まだ引っ張り合いません)本当にそれをよく理解している。

とにかく私が現在作業しているプロジェクト(これをAと呼ぶ)のサブモジュールとして、共有プロジェクト(SUBと呼ぶ)を追加しました。だからSUBはAにフォルダとして存在し、git statusは今このフォルダをmodifiedと表示します。 git add SUB/を実行してもこれは変わりません。そして、git merge SUB/を実行すると、私にはmerge: SUB/ - not something we can mergeが網羅されます。 ??更新されたファイルをSUBからAにどのように取得するのですか?それとも私はこれについて間違った方法をとっていますか?私はまた、どこかでサブツリーのマージ戦略を見つけました、おそらくもっと適していますか?

私はgit v2.1.4を使用していますが、afaik v2.10.1でgitサブモジュールに変更がありました。これが問題であるかどうかはわかりません。

答えて

0

まず、ASUBは、それぞれ独自の寿命を持つ2つの異なるレポです。

Aの観点からは、SUBは、SUBの特定のコミットへの参照/リンクです。
ですから、SUBで何かを変更した場合、これらの変更をコミットする必要があります。

$ cd SUB/ 
$ git commit -a -m "Improve SUB framework loading times" 
[master f78dc91] Improve SUB framework loading times" 
10 files changed, 228 insertions(+), 28 deletions(-) 
$ git push 

はだから今、あなたが新しいSUBに(f78dc91)をコミットを追加した、あなたが戻っAに行くと入力することもできます。

$ cd .. 
$ git status 
On branch master 
Your branch is up-to-date with 'origin/master'. 
Changes not staged for commit: 
    (use "git add <file>..." to update what will be committed) 
    (use "git checkout -- <file>..." to discard changes in working directory) 

    modified: SUB (new commits) 

ザ・あなたは(つまり、新しい参照f78dc91をコミット)git addにこれらSUBの変更を必要とする:

$ git add SUB 
On branch master 
Your branch is up-to-date with 'origin/master'. 
Changes to be committed: 
    (use "git reset HEAD <file>..." to unstage) 

    modified: SUB 

そしてコミット:あなたはAを取得したい場合

$ git commit -m "A now uses a new version of SUB improving loading times." 
$ git push 

ご覧のように、コミットと押しSUBで変更をし、Aでこれらの変更を統合するには、あなたが実行する必要のある2つの独立したアクションです変更。

その他のコメント

gitのマージSUB /あなたが参照のみをマージすることができ

、それはコミット、ブランチやタグ(とAレポのは明らかにのみ参照)ので、このコマンドを意味し、意味がありません。 (ファイルやディレクトリをマージすることはできません)

+0

ありがとうございます!まだ私は機械の仕組みを理解していないのが分かります。私はどこに行きますか? SUBで 'git push'を実行すると、私にも同様の質問が出ます...私は自分の仕事をすべてローカルでやっているので、リモートリポジトリはありません。 –

+0

ああ、私の応答で 'git push 'を無視することができます。そして 'git commit'を実行するだけです。ちょうどあなたがコードを定期的にバックアップしていることを確認してください。 –

+0

しかし 'B 'に' SUB'が必要なときはどうしますか?あなたができることの1つは、 'B 'プロジェクトに' SUB'を置いておきたいときに、 'push'、' pull'、 'fetch'、' clone'するドライブに_bare_リポジトリを作ります。 –

関連する問題