一般來說,我們會把專案擺成下面這樣子:
Projects/
Proj1/
.git/
proj1_readme.md
CVT2HUGO: > ls -la
就是很單純的有個 Projects
目錄,裡面放著所有的專案,然後把 Proj1
做成 git repo。
隨著時間過去,可能會另外有個相關的專案叫 Proj2
,然後放置的方式就會像這樣:
Projects/
Proj1/
.git/
proj1_readme.md
Proj2/
proj2_readme.md
CVT2HUGO: > ls -la
但是這樣 Proj2
就不在 git 控制之下了。這時可以另外弄個 Proj2
的 repo,或者想辦法整理成下面這種階層:
Projects/
FullProject/
.git/
Proj1/
proj1_readme.md
Proj2/
proj2_readme.md
CVT2HUGO: > ls -la
邏輯上就像是,把 repo root 上提一層,然後把 Proj2 加進來。不過換個角度想,其實就是把舊的 Proj1
所有的檔案放到更下一層目錄,然後把 Proj2
加到 repo root,最好再把 repo 名字改掉。
所以想要做的事情就是:
- 把原本
Proj1
下的所有檔案,放到更低一層目錄中 - 在 repo 第一層多加個
Proj2
- repo 目錄改名為
FullProject
其實還蠻簡單的。因為 git 會在 repo 的 root 放置 .git/
這個目錄,反過來說,只要把 .git/
這個目錄移到任何地方去,那邊都會被當成 repo 的 root,而且實際的目錄名稱一點都不重要。因此整個流程如下:
Projects$ mv Proj1 FullProject
Projects$ mkdir FullProject/Proj1
Projects$ cd FullProject
FullProject$ git mv <all files> Proj1
FullProject$ git commit -a -m "Move files to new directory"
FullProject$ mv ../Proj2 .
FullProject$ git add Proj2
FullProject$ git commit -a -m "Add Proj2 to this repo"
寫完之後發現,其實還蠻簡單的嘛…