2016-05-24 7 views
3

考えるgitリポジトリのA:コミットログのHEADにグループ化されたすべてのヒストリを持つサブディレクトリとして別のgitリポジトリをインポートするにはどうすればよいですか?ファイルと

A/a.1.txt 

と、コミットの歴史:ファイルと

A3333333333 
A2222222222 
A1111111111 

とgitリポジトリB:

B/a.1.txt 

と、コミットの歴史

B3333333333 
B2222222222 
B1111111111 

私はそれがファイル

A/a.1.txt 
A/B/a.1.txt 

を持っており、歴史をコミットするように、Aの歴史の後にグループ化され、その歴史のすべてで、サブディレクトリとしてリポジトリAにリポジトリBをインポートする:

B3333333333 
B2222222222 
B1111111111 
A3333333333 
A2222222222 
A1111111111 

答えて

2

サブツリーマージ戦略を使用して
# register the remote of the other repo 
git remote add -f other url-to-repo 

# merge the content from `other` 
git merge -s ours --no-commit other/master 

# read the content under the directory PREFIX 
#git read-tree --prefix=somedir -u other/master 
git read-tree --prefix=A -u other/master 

# commit the merge 
git commit -m "subtree merge" 

他のブランチがマージされますので、マージがあるだろうとして、あなたが、 を尋ねとして歴史がない100%になりますコミットを最後にコミットし、歴史がより次のようになります。

* 938762e (HEAD -> append) subtree merge 
|\ 
| * B3333333333 
| * B2222222222 
| * B1111111111 
* A3333333333 
* A2222222222 
* A1111111111 
+0

残念ながら、歴史は私が望んでいたようにグループ分けされていませんでした。私が知っている 'B3333333333 A3333333333 A2222222222 B2222222222 B1111111111 A1111111111 ' 一つの方法は、私は再びリベースた場合、それが持っているということです。 は歴史をシャッフルし、最終的にはより多くの本のように見えたコミットマイ競合をマージします。 –

+0

あなたは日付で履歴を見る場合に限り、そのように見えることがあります。コミットは、ブランチによってグループ化されています。これは、子 - >親関係を見ると分かります。例えば ​​'git log --graph --decorate --pretty = oneline --abbrev-commit --all --date = local' – janos

+0

ありがとうございます。あなたが私を助けようとしたことに本当に感謝しています。 'git rebase origin master'を実行しようとすると、ツリーの現在の状態はマージ競合を起こします。私が押すと、それが追加されずに履歴を書き換えたように見えるので、力が必要になります。 –

関連する問題