我使用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>'
我想做的是让新的repo包含从最初的浅层克隆开始的历史记录,但仍保留在该点之后所做的更改。换句话说,我不想“unhallow”分支并拉动所有以前的历史。
如果没有从项目中删除.git
目录并重新开始,是否有前进的方法?
我的机器正在运行git 1.9.1。遥控器正在运行1.7.11.7。我可以更新我的方面没有任何不良影响,但不是遥控器,因为它承载了其他几个我不想冒破坏的项目。
答案 0 :(得分:3)
我会这样做:
创建新的根分支:
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
答案 1 :(得分:0)
Why can't I push from a shallow clone?似乎还有一些额外的评论。事实上,看看这个评论:
2015年更新:使用Git 2.5+,您甚至可以获取一次提交。请参阅&#34;从远程git存储库中提取特定提交&#34;
所以也许你不能推,但从另一方面,你可以拉。你试过了吗?