[英]Git: Push shallow clone to a new remote without 'unshallow'?
我使用git clone --depth=1
對存儲庫進行了淺表克隆。 我做了一些更改……顯然是不了解淺層克隆的復雜性……現在我想將新項目推到一個新的遠程站點。
在我的主要開發機器上:
git clone --depth=1 file://old_project new_project
cd new_project
# made a handful of commits here....
我現在想將項目推送到另一台機器。 在那台遠程計算機上,我做了:
git init --bare new_project.git
然后回到我的機器上:
git remote remove origin
git remote add origin ssh://<remote host>/path/to/repos/new_project.git
現在,當我嘗試push
項目時,我得到:
fatal: protocol error: expected old/new/ref, got 'shallow 7f6a256...'
fatal: The remote end hung up unexpectedly
Counting objects: 49299, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (44533/44533), done.
error: pack-objects died of signal 13
error: failed to push some refs to '<my new remote>'
我想做的是讓新的倉庫包含從最初的淺克隆開始的歷史記錄,但是仍然保留在那之后所做的更改。 換句話說,我不想“分解”分支並提取以前的所有歷史記錄。
有沒有沒有從項目中刪除.git
目錄並重新開始的前進方法?
我的機器正在運行git 1.9.1。 遙控器正在運行1.7.11.7。 我可能可以在沒有不良影響的情況下更新自己的身邊,但不能更新遙控器,因為它托管着其他我不想冒險破壞的其他項目。
我將按以下方式進行操作:
創建一個新的根分支:
git checkout --orphan truncated_master
在您的淺存儲庫中使用最早可用的提交來填充其初始提交:
START_COMMIT=$(git rev-list master|tail -n 1) git checkout $START_COMMIT -- . git commit -m "Initial commit"
將所有提交從master復制到新分支:
git cherry-pick $START_COMMIT..master
將新分支推送到新遙控器:
git push origin truncated_master:master
為什么我不能從淺表克隆中推送? 似乎還有一些補充說明。 實際上,請看以下評論:
2015年更新:使用Git 2.5+,您甚至可以獲取單個提交。 請參閱“從遠程git存儲庫中拉特定的提交”
因此,也許您不能推動,但是從另一側,您可以拉動。 你有嘗試過嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.