簡體   English   中英

Git:將淺表克隆推送到沒有'unshallow'的新遙控器嗎?

[英]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。 我可能可以在沒有不良影響的情況下更新自己的身邊,但不能更新遙控器,因為它托管着其他我不想冒險破壞的其他項目。

我將按以下方式進行操作:

  1. 創建一個新的根分支:

     git checkout --orphan truncated_master 
  2. 在您的淺存儲庫中使用最早可用的提交來填充其初始提交:

     START_COMMIT=$(git rev-list master|tail -n 1) git checkout $START_COMMIT -- . git commit -m "Initial commit" 
  3. 將所有提交從master復制到新分支:

     git cherry-pick $START_COMMIT..master 
  4. 將新分支推送到新遙控器:

     git push origin truncated_master:master 

為什么我不能從淺表克隆中推送? 似乎還有一些補充說明。 實際上,請看以下評論​​:

2015年更新:使用Git 2.5+,您甚至可以獲取單個提交。 請參閱“從遠程git存儲庫中拉特定的提交”

因此,也許您不能推動,但是從另一側,您可以拉動。 你有嘗試過嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM