2018/09/27

分離 git repository 中某個資料夾並獨立為一個 repository



由於歷史因素, 公司以前只開一個 repository, 用資料夾分不同的 applications

然後現在要導入自動化, 總不能每次都下載那一大包 source code 吧

所以想辦法看有沒有可以把某個資料夾獨立成一個 repository 並且 commit log 都可以保留的辦法

當然, 我可以把該資料夾手動複製然後創立新的 repository 並且 commit 上去

但是這樣就會遺失過往的 commit log

於似乎找了一下有沒有其他方法

git 這麼神, 當然有

1. 先建立好要獨立的 repository, 以 bitbucket 為例 git@bitbucket.org:user/sub-folder-project1

2. 下載原先大 repository, 並切換到要分離的資料夾的上層目錄

```shell
$ git clone git@bitbucket.org:user/huge-project
$ cd huge-project/path/to/sub-folder-project1
$ cd ..
```

3. 開始執行 git 指令分開 sub-folder-project1

```shell
# git filter-branch --prune-empty --subdirectory-filter FOLDER-NAME BRANCH-NAME
$ git filter-branch --prune-empty --subdirectory-filter sub-folder-project1 develop
```

4. 將分離出來的 sub-folder-project1 加上遠端資訊並且 push

```shell
$ git remote add subproject1 git@bitbucket.org:user/sub-folder-project1
$ git push -u origin develop
```

這樣就大功告成了啊~~

不過原本的 huge-project 的 develop 就會因此而亂掉, 若還需要繼續使用的話, 建議砍掉重新 clone 一份


參考: [https://help.github.com/articles/splitting-a-subfolder-out-into-a-new-repository/](https://help.github.com/articles/splitting-a-subfolder-out-into-a-new-repository/)

沒有留言:

張貼留言