44470


どうにも困っておりまして、質問させていただきます。

現在、違うサーバにAというリポジトリと、Bというリポジトリがあり、これをAのサーバに統合したいのですが、  
A--.git  
|--develop--B--.git  
|-home  
としたときに、BがAのリポジトリに認識されず、commit,pushした後、別の端末でAをクローンすると、  
A--.git  
|--develop--B  
となり、Bの中身を取得することができませんでした。  
別のリポジトリだからだと思い、git remote set-urlでリモートリポジトリを変更したのですが、効果がありませんでした。

履歴を残す必要があり、以下の記事を読んだりしたのですが、どのようにすればよいのかわかりません。  
<https://chaika.hatenablog.com/entry/2015/06/04/173401>

どうかご教授お願いいたします。


CC BY-SA 4.0
2018-06-01T12:00:44.767
44455
2018-06-02T10:41:39.590
2018-06-01T12:13:08.363
28449
28449
question
git tortoisegit
Gitで２つのリポジトリを統合したい


git リポジトリの中に git repository を物理的に配置した場合、それは git submodule
が実体化されたものであると認識して動作するようになっています。 submodule
は、端的に言えば、ディレクトリ構造をコミットするかわりに別リポジトリのコミットの sha-id のみを記録しておく機能です。

submodule ではなく、 git
の履歴自体を取り込みながら、とある統合コミットがあって、それは二つのリポジトリの歴史のマージコミットであり、一方がもう一方のサブディレクトリに配置されているようなことが実現したい場合、これは
git subtree を用いるのが良いです。

[code]

    git subtree add --prefix=サブディレクトリへのパス リモート ブランチ
    
[/code]

で実行します。

## 具体例

### 準備スクリプト

[code]

    #!/bin/bash
    
    rm -rf A
    mkdir A
    
    ( cd A
      git init
      echo hoge > hoge
      git add -A
      git commit -m "init hoge"
    )
    
    rm -rf B
    mkdir B
    
    ( cd B
      git init
      echo fuga > fuga
      git add -A
      git commit -m "init fuga"
    )
    
[/code]

### A リポジトリ

[code]

    .
    └── hoge
    
[/code]

### B リポジトリ

[code]

    .
    └── fuga
    
[/code]

### 実行スクリプト

[code]

    cd A
    git remote add B ../B
    git fetch --all
    git subtree add --prefix=B B master
    
[/code]

### 結果

[code]

    $ cd A
    $ tree
    .
    ├── B
    │   └── fuga
    └── hoge
    $ git log --oneline --graph
    *   d05554a Add 'B/' from commit 'c4945e3a01ecfd7e9ed88c76222c52a1e10c3235'
    |\  
    | * c4945e3 init fuga
    * a842d05 init hoge
    
[/code]


CC BY-SA 4.0
2018-06-02T10:41:39.590
44470
2018-06-02T10:41:39.590
754
44455
answer