有時候,因爲離職、權限調整、或是遠端的 repository 已消失等因素,只留下本地端的備份,等同喪失原始 repo 的存取權時,若想完整保留所有提交記錄和版本樹並在另一個 Git repo 繼續維護,你可以這麼做:
(以下內容部分由 AI 生成)

  • 在 GitHub 建立新的 repo

  • 進入本地 repo 目錄:

cd /path/to/local/repository
  • 確認目前的遠端 repo 設定:
git remote -v
  • 移除舊的遠端 repo(如果還存在):
git remote remove origin
  • 添加新的 GitHub 遠端 repo:
git remote add origin https://github.com/user/repository.git
  • 推送所有分支和標籤:
git push --all origin
git push --tags origin

重要說明:

  • --all 會推送所有本地分支
  • --tags 確保所有標籤也會被推送
  • 確保本地 repo 包含完整的提交歷史
  • 建議先在本地端使用 git log 確認歷史記錄完整性

這樣就能將本地端的所有版本歷史和分支結構完整地遷移到新的 GitHub repo 中。


如果不想把本地端的目錄搞壞,在執行上述指令前想先備份並複製一份到乾淨的環境下在執行,該如何進行?

  • 先備份原始目錄:
cp -r /原始儲存庫路徑 /備份路徑/repository_backup
  • 建立新的測試目錄:
mkdir /測試路徑/repository_test
  • 使用 bare clone 複製一份完整儲存庫:
git clone --bare /原始儲存庫路徑 /測試路徑/repository_test
  • 進入測試目錄:
cd /測試路徑/repository_test
  • 接著就可以安全地執行先前提到的 GitHub 遷移步驟:
git remote remove origin  # 移除舊的遠端
git remote add origin https://github.com/user/repository.git  # 添加新的 GitHub 遠端
git push --all origin
git push --tags origin

重要說明:

  • --bare clone 會建立一個不含工作目錄的純儲存庫
  • 原始目錄完全不會被更動
  • 測試成功後可以安全刪除測試目錄
  • 備份目錄建議保留一段時間以備不時之需

這樣可以在完全不影響原始開發環境的情況下,安全地測試和執行遷移程序。


後記:雖然是 Trivial 等級的文章,但還是留個記錄,以後查找起來比較方便。有了 AI 之後這些內容有時候連記錄都覺得興趣缺缺,但也不完全代表這些內容沒價值,有時候只是自己的心態改變了(認爲大家都能輕易透過 AI 獲得結果,似乎沒有分享的必要)。就連查找資料的過程,雖然表面上比起以往方便快速許多,但解決問題之後的成就感方面卻大打折扣。有沒有人跟我一樣覺得這世界因爲 AI 變得不那麼有趣了呢?