重整 Git repo 中的階層關係

一般來說,我們會把專案擺成下面這樣子:

	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 名字改掉。

所以想要做的事情就是:

  1. 把原本 Proj1 下的所有檔案,放到更低一層目錄中
  2. 在 repo 第一層多加個 Proj2
  3. 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"

寫完之後發現,其實還蠻簡單的嘛…

Contents

comments powered by Disqus