Merge multiple git repositories

建議 git 版本 2.9 以上,原因是 2.9 的版本以上,在 git merge 時可以下參數 ––allow-unrelated-histories

升級 git

# 如果要升級 git 的話可以照以下步驟
$ sudo add-apt-repository ppa:git-core/ppa
 The most current stable version of Git for Ubuntu.

For release candidates, go to https://launchpad.net/~git-core/+archive/candidate .
 More info: https://launchpad.net/~git-core/+archive/ubuntu/ppa
Press [ENTER] to continue or ctrl-c to cancel adding it

gpg: keyring `/tmp/tmpwbyj0klz/secring.gpg' created
gpg: keyring `/tmp/tmpwbyj0klz/pubring.gpg' created
gpg: requesting key E1DF1F24 from hkp server keyserver.ubuntu.com
gpg: /tmp/tmpwbyj0klz/trustdb.gpg: trustdb created
gpg: key E1DF1F24: public key "Launchpad PPA for Ubuntu Git Maintainers" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
OK
$ sudo apt-get update 
Ign:1 http://dl.google.com/linux/chrome/deb stable InRelease
Hit:2 http://dl.google.com/linux/chrome/deb stable Release                     
Hit:4 https://apt.dockerproject.org/repo ubuntu-xenial InRelease               
Ign:5 http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 InRelease      
Ign:6 http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 InRelease      
Hit:7 http://us.archive.ubuntu.com/ubuntu xenial InRelease          
Get:8 http://security.ubuntu.com/ubuntu xenial-security InRelease [102 kB]     
Get:9 http://ppa.launchpad.net/git-core/ppa/ubuntu xenial InRelease [17.5 kB]  
Hit:10 http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 Release       
Get:11 http://us.archive.ubuntu.com/ubuntu xenial-updates InRelease [102 kB]   
Hit:13 http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 Release       
Hit:14 http://ppa.launchpad.net/ondrej/php/ubuntu xenial InRelease             
Hit:16 https://packages.gitlab.com/gitlab/gitlab-ee/ubuntu xenial InRelease    
Hit:17 http://ppa.launchpad.net/ondrej/php-zts/ubuntu xenial InRelease         
Get:18 http://us.archive.ubuntu.com/ubuntu xenial-backports InRelease [102 kB] 
Hit:19 http://ppa.launchpad.net/phalcon/stable/ubuntu xenial InRelease         
Hit:20 http://ppa.launchpad.net/webupd8team/sublime-text-3/ubuntu xenial InRelease
Get:21 http://ppa.launchpad.net/git-core/ppa/ubuntu xenial/main amd64 Packages [3,256 B]
Get:22 http://ppa.launchpad.net/git-core/ppa/ubuntu xenial/main i386 Packages [3,248 B]
Get:23 http://ppa.launchpad.net/git-core/ppa/ubuntu xenial/main Translation-en [2,496 B]
Fetched 333 kB in 2s (154 kB/s)                                
Reading package lists... Done
$ sudo apt-get install git
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  git-man
Suggested packages:
  git-daemon-run | git-daemon-sysvinit git-doc git-el git-email git-gui gitk
  gitweb git-arch git-cvs git-mediawiki git-svn
The following packages will be upgraded:
  git git-man
2 upgraded, 0 newly installed, 0 to remove and 246 not upgraded.
Need to get 6,174 kB of archives.
After this operation, 6,388 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://ppa.launchpad.net/git-core/ppa/ubuntu xenial/main amd64 git amd64 1:2.13.0-0ppa1~ubuntu16.04.1 [4,726 kB]
Get:2 http://ppa.launchpad.net/git-core/ppa/ubuntu xenial/main amd64 git-man all 1:2.13.0-0ppa1~ubuntu16.04.1 [1,448 kB]
Fetched 6,174 kB in 7s (859 kB/s)                                              
(Reading database ... 343803 files and directories currently installed.)
Preparing to unpack .../git_1%3a2.13.0-0ppa1~ubuntu16.04.1_amd64.deb ...
Unpacking git (1:2.13.0-0ppa1~ubuntu16.04.1) over (1:2.7.4-0ubuntu1.1) ...
Preparing to unpack .../git-man_1%3a2.13.0-0ppa1~ubuntu16.04.1_all.deb ...
Unpacking git-man (1:2.13.0-0ppa1~ubuntu16.04.1) over (1:2.7.4-0ubuntu1.1) ...
Processing triggers for man-db (2.7.5-1) ...
Setting up git-man (1:2.13.0-0ppa1~ubuntu16.04.1) ...
Setting up git (1:2.13.0-0ppa1~ubuntu16.04.1) ...
$ git --version 
git version 2.13.0

Merge two git repositories

# clone 1st project
$ git clone git@REPOSITORY_URL:project1.git
$ cd project1

# add 2nd project into remote source
$ git remote add -f proj_2 git@REPOSITORY_URL:project2.git

# checkout the branch you want to keep, for example: origin/master
$ git checkout BRANCH_1
HEAD is now at 10eb427...

# then merge the other branch, for example: project2/master
$ git merge --allow-unrelated-histories BRANCH_2

# after resolving conflicts, commit and push back to remote branch, for example: origin/master
$ git push origin HEAD:master --force