[Git] fork 儲存庫到 private Git 帳號

在做軟體開發的時候常常需要針對一個開源的 Git 專案進行客製化,這時候會需要用到 Git 中很好用的 fork 功能,關於 fork 可以參考另外一篇文章,但是 fork 的專案此時預設也都會是公開的(除非你 fork 的專案本身就是 Private),但是可能由於某些緣故你不想要公開你客製化的改動,本篇將會記錄如何將一個 Public 的 forked 專案轉移到 Private 的存放庫中。

備註:從一個 public 專案 fork 過來的專案並不能夠直接從設定將其改成 Private,在專案的設定地方,你可以看到以下的限制。

所以要如何將其改成私人的專案呢?你只需要參照並且執行以下的步驟,即可達成,這邊參考以下兩個連結:

1. 複製 bare .git 檔案

選定你要私有化的 GitHub 專案,將其複製下來,以下的指令可以擇一執行:

git clone --bare git@github.com:usi-systems/easytrace.git
git clone --bare https://github.com/account/easytrace.git
2. 在指定的存放庫(Repository)裡面新增一個專案

參考,注意此時的專案名稱與原本的專案名稱相同例如 easytrace。

3. 鏡像 (Mirror) 下載下來的 .git 專案到新的存放庫
cd easytrace.git
git push --mirror git@github.com:<your_username>/easytrace.git
git push --mirror https://github.com/account/easytrace.git

本步驟是整個流程中最重要的一步,執行以上的指令,執行完這一步在前往 GitHub 的專案介面中,你就會發現檔案已經全部被複製到這個 Private 的專案中了!

4. 清除下載的  project.git 檔案
cd ..
rm -rf easytrace.git
5. 重新下載整個專案
cd desired_path
git clone git@github.com:account/easytrace.git
git clone https://github.com/account/easytrace.git
6. 設定上行的 GitHub 專案

如同我們在 fork 那一篇的介紹,此時用戶也可以在新的專案中增加其他 remote 的存放庫,就可以繼續與原本的開源專案保持連結。 

git remote add upstream git@github.com:usi-systems/easytrace.git
git remote set-url --push upstream DISABLE

設定完之後可以利用 git remote -v 的指令來查看多個不同的上行存放庫位置:

origin	git@github.com:<your_username>/easytrace.git (fetch)
origin	git@github.com:<your_username>/easytrace.git (push)
upstream	git@github.com:usi-systems/easytrace.git (fetch)
upstream	DISABLE (push)

此時你在本地的專案就與多個遠端 Repository 取得連結!