2017-03-21 8 views
1

"スーパープロジェクト"内のファイルのディレクトリから他の人と作業するために "サブプロジェクト"を作成しようとしていましたが、それはgitのサブツリーで動作するように苦労している。 理想的には、他の人がサブプロジェクトで作業することができます。その後、私は上流の変更を引き出し、更新をプッシュします。git subtree:split sub-project、それに取り組み、マージバック

ここにこの目的のためのMWEがあります。 私はリモートレポ「サブプロジェクト」に続いgit subtreeサブプロジェクト「サブプロジェクト」を含む「スーパー・プロジェクト」を作成します。

$ mkdir subtree-test && cd subtree-test 

# create super-project 
$ mkdir super-project && git init super-project && cd super-project 
$ echo "foobar" >> super.txt 
$ git add super.txt && git commit -m "add file" 

# create sub-project 
$ mkdir sub-project 
$ echo "foobar" >> sub-project/sub1.txt 
$ git add sub-project/sub1.txt && git commit -m "add file" 

# prepare a bare subtree repo named "sub" 
$ git init --bare ../sub-project 
$ git subtree push --prefix=sub-project/ ../sub-project master 

次に「サブに「サブプロジェクトを」クローン「-LIVE、いくつかの作業を行うと、上流のプッシュ:

$ cd ../ 
$ git clone sub-project sub-live 
$ cd sub-live 
$ echo "foobar" >> sub2.txt 
$ git add sub2.txt && git commit -m "add file" 
$ git push 

を次にバック超のプロジェクトにマージしようとすると:

$ cd ../super-project 
$ git subtree pull --prefix=sub-project/ ../sub-project master 

とエラーがあります:

warning: no common commits 
remote: Counting objects: 5, done. 
remote: Compressing objects: 100% (3/3), done. 
remote: Total 5 (delta 0), reused 0 (delta 0) 
Unpacking objects: 100% (5/5), done. 
From ../sub-project 
* branch   master  -> FETCH_HEAD 
fatal: refusing to merge unrelated histories 

私はgit subtreeの使用に関する記事を読んでいます。 しかし、ほとんどの場合、サブプロジェクトは後でスーパープロジェクトに追加されます。 私の場合、サブプロジェクトはスーパープロジェクトに由来しているため、これらの複雑な問題が発生している可能性があります。

どうしたのですか?そして、私はここからどのように進むべきですか?

答えて

0

あなたは、これは非常に簡単になり、最初の分割のためgit subtree split --rejoinを使用していたかもしれない:あなたの問題については、しかし

options for 'split' 
    --annotate ...  add a prefix to commit message of new commits 
    -b, --branch ...  create a new branch from the split subtree 
    --ignore-joins  ignore prior --rejoin commits 
    --onto ...   try connecting new tree to an existing one 
    --rejoin    merge the new branch back into HEAD 

:私はあなたが最初のディレクトリを削除してから、git subtree addを使用する必要がだと思う再び、例えばhttps://www.atlassian.com/blog/git/alternatives-to-git-submodule-git-subtreeを参照されたい。

git rm -rf sub-project/ 
git commit -m "Remover subdir" 
git subtree add --prefix=sub-project/ ../sub-project master 

今後のマージでは、プルまたはマージを使用します。

関連する問題