2

ProjectAProjectBの 2 つのプロジェクトがあります。それぞれに git リポジトリがあります。これらのプロジェクトには、同じファイルが多数あります。これらのファイルは、ProjectAProjectBの両方で「 common 」という名前のフォルダーにあります。ファイルの例は次のとおりです。

プロジェクトA :

...
cat-folder
dog-folder

common
    commonFile1
    commonFile2

fish-file.php
squirrel-file.txt
...

プロジェクト B :

...
potato-folder
apple-folder

common
    commonFile1
    commonFile2

tomato-file.xml
pineapple-file.csv
...

私は両方のプロジェクトに取り組んでいます。ProjectAまたはProjectBで作業している共通ファイルを変更する場合があります。ProjectAで行われた共通ファイルの変更が、 ProjectBの共通ファイルにも表示されるようにしたいと考えています(逆も同様です)。したがって、両方のプロジェクトの " common " フォルダーを常に最新の状態にし、同じファイルを含めるようにしたいと考えています。

これにはgit subtreeを使用します。3 番目のレポ「common-repo 」を作成し、そこに「 common 」フォルダーのすべてのファイルを配置してから、両方のプロジェクトから「 common 」フォルダーを削除しました。次に、各プロジェクトでこれを作成します。

$ cd /path/to/ProjectA      # or ProjectB
$ git remote add common-repo https://my_user@bitbucket.org/url/of/common-repo
$ git fetch common-repo
$ git subtree add --prefix=common/ common-repo master --squash    # this command adds the "common" folder with my common files to the current project

次に、common-repoに変更を加えてプッシュすると、簡単にProjectAまたはProjectBにプルできます。

$ cd /path/to/ProjectA      # or ProjectB
$ git pull -X subtree=common common-repo master      # this pulls changes from common-repo

しかし、ProjectA (またはProjectB ) で作業している " common " フォルダー内のファイルを変更し、それをcommon-repoにプッシュしようとすると、問題が発生します。

$ cd /path/to/ProjectA      # or ProjectB
$ git subtree push --prefix=common common-repo master     # !!!! 

最後のコマンドは、非共通ファイルを含むProjectAのすべてのファイルをcommon-repoにプッシュします!

「 common」フォルダーのcommon-repoのみのファイルにプッシュするにはどうすればよいですか? それとも、私は何か絶対に間違ったことをしていますか?

4

1 に答える 1

1

使用する代わりに:

git pull -X subtree

コマンドを使用してみてくださいsubtree pullsubtree pushおよび他のsubtreeサブコマンドに沿って動作するように作られていると思われます。

git subtree pull --prefix=common common-repo master
于 2014-03-06T02:24:26.780 に答える