2017-09-27 4 views
0

私は大きなコードベースを持っており、特定のセクションを小さなリポジトリに分割する戦略を評価しています。 git subtree splitを使って、私は&のコミット履歴がそのまま残っていると思われるディレクトリを分けることができます。メインレポからサブツリーを分割して新しいレポを作成すると、古いプルリクエストはどうなりますか?

私はこのアプローチで前進したと仮定し、Githubの古いプルリクエスト(デタッチされたディレクトリのコードを含む)はどうなりますか?

以前のコードへの参照が引き続き表示されるのでしょうか、変更によっては元のコードベースに残っているコードだけが参照されますか?

ありがとうございました。

+0

プルリクエストの本質は、リポジトリ内のハッシュIDです。あなたのハッシュIDと既存のリポジトリはどうなりますか?それはあなたのプルリクエストにどうなるかに対する答えをあなたに伝えます。 – torek

+0

プルリクエストはブランチよりも何もありません。 'fetch = + refs/pull/*/head:refs/remotes/origin/pr/*'のような行を追加することもできます。プルリクエストをマージしようとするのは、通常のコンフリクト解決で、ブランチをマージするのと同じです。 – o11c

答えて

1

git subtree splitから新しく作成されたリポジスには、指定したディレクトリに変更を加えたコミットのみが含まれます。

以下のように、元のGitのレポファイル構造を仮定します

Root 
|___ file1  
|___ file2 
|___ subfolder/ 
     |___ file3 
     |___ file4 

、オリジナルとして歴史をコミット:あなたは新しいGitのレポにsubfolderを分割するgit subtree splitを使用する場合は

* 8cb09fb (HEAD -> master) Merge branch 'dev' into matser 
|\ 
| * e1e054c (dev) change file2 for fourth time merge 
* | 6e8ee57 change file3 for fourth time merge 
* | ebdfb0b Merge branch 'dev' into master 
|\ \ 
| |/ 
| * 5d93766 change file2 for thrid time merge 
* | b95668a change file1 for thrid time merge 
* | 09ca222 Merge branch 'dev' into matser 
|\ \ 
| |/ 
| * d3dc890 change file3 for second time merge 
* | 5818123 change file1 for second time merge 
* | cb39f04 Merge branch 'dev' into master 
|\ \ 
| |/ 
| * 4dc4aaa change file3 and file4 on dev branch 
* | fef775c change file3 and file4 on master branch 
|/ 
* d8d81e6 add subfolder and it’s files 
* 5446ea3 change file1 

、その後、 subfolderfile3file4)を変更したコミットだけが新しいリポジトリコミットの履歴に表示されます。以下のように新しいレポコミットの歴史:最初の5446eaをコミットする、それだけで(subfolderディレクトリから)file1を変更するために

  • 、そのコミット:あなたは、元のレポで見ることができるように

    * 60a7f3e (master) change file3 for fourth time merge 
    * 954b730 Merge branch 'dev' into master 
    |\ 
    | * b4b8d92 change file3 for second time merge 
    * | 35f7754 Merge branch 'dev' into matser 
    |\ \ 
    | |/ 
    | * fde1de3 change file3 and file4 on master branch 
    * | d4795a8 change file3 and file4 on master branch 
    |/ 
    * cd367a2 add subfolder and it’s files 
    

    新しいレポには表示されません。

  • 5818123は、file1のみ変更されたため、を再度マージする必要があります。コミットは新しいリポジトリに表示されません。
  • 3回目のマージのコミット(b95668a,5d93766およびebdfb0b)の場合、それらはすべてsubfolderに変更されないため、新しいリポジトリには表示されません。
  • コミットの場合、e1e054cdevブランチのfile2に変更されただけなので、新しいレポには表示されません。第四のために
  • は、それが最初に親がmaster枝に(サブフォルダを変更していない)6e8ee57をコミットするので、コミットは、新しいレポでは表示されませんだと、それは同じバージョンとしてsubfolderfile3file4)を保つ、8cb09fbをコミット合併しました。
関連する問題