2016-12-11 4 views
0

私は2つの異なるブランチを持っています。新しいブランチでは、ディレクトリ構造が完全に変更されています。gitのあるブランチから別のブランチの別のディレクトリにディレクトリを関連付ける

それはのようなものです:

Old branch: 
project/ 
    manager/ 
     widgets/ 
     components/ 
     workers/ 

New branch: 
factory/ 
    widgets/ 
    components/ 
    workers/ 

Gitはいくつかを認識しますが、ディレクトリの変更のすべてではない、私は新しい枝に古いブランチでの変更をマージするときに、それは彼らがなされるべきであることを認識し、新しいブランチの対応するディレクトリ。

たとえば、古いブランチのバグ修正をproject/manager/widgets/utils.pyにすると、factory/widgets/utils.pyに更新されます。

しかし、何らかの理由で対応するディレクトリの一部がに関連付けられていませんでした。だから、私がマージすると、として削除されたファイルが多く、新しいブランチにが削除されています。

CONFLICT(削除/変更):プロジェクト/マネージャー/労働/ base.py HEADに削除し、古い枝に変更だから、例えば私はproject/manager/workers/base.pyマージレポートに古い枝の改善を行った場合。プロジェクト/ manager/workers/base.pyのold-branchをツリーに残しました。

私はそのフォルダをgitに示すことができる方法があるかどうか疑問に思っています。project/manager/workers/factory/workersと同じです。

+0

Gitはリコrd "フォルダ"(ディレクトリ)を作成します。代わりに、gitは 'git diff'で独自の特別な動的検出、コンピューティング*ファイルアイデンティティ*(' a/b/c/base.py'を 'd/e/f/base.py'とマッチさせるべきかどうか)時間。 Gitは時には何らかの支援を使うことができますが、現在利用可能ではありません。私の答えはこちらを見てください:http://stackoverflow.com/a/40352403/1256452 – torek

+0

この時点で、実際に何もすることはないと思いますか? –

+0

あなたは '-M'設定に戸惑うことができます(低い値を指定すると、ファイルをマッチさせるのがより楽しくなります;極端に低く設定されていると、Gitは完全に無関係なファイルとマッチします:-))、そして/ -B'設定(Gitが 'a/b/foo.py'と' a/b/foo.py'を間違ってマッチさせている場合)です。それ以外にも、 'git-imerge'を試すことができます。これは、インクリメンタルマージを行うことで、より密接に関連するバージョンで動作し、より簡単にマッチすることができます:http://softwareswirl.blogspot.com/2013/05 /git-incremental-merge.html – torek

答えて

0

一つwoprkaroundは最初ようにすることです:

  • は、あなたのマージのソースブランチ
  • から始まる仮の枝を手動で見られるものにフォルダ構造を変換するためにseries of git mvを行います宛先ブランチ
  • 次に、一時的なリファクタリングされたブランチを宛先ブランチにマージします。
+0

これを試して、それがどのように機能するかを見ていきます。 –

関連する問題