Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git:在没有“取消允许”的情况下将浅层克隆推送到新远程?_Git - Fatal编程技术网

Git:在没有“取消允许”的情况下将浅层克隆推送到新远程?

Git:在没有“取消允许”的情况下将浅层克隆推送到新远程?,git,Git,我用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 n

我用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
我想做的是让新的回购协议包含从最初的浅层克隆开始的历史记录,但仍然保留在此之后所做的更改。换句话说,我不想取消分支并拉取所有以前的历史记录

有没有一种方法不需要从项目中删除.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"
将所有提交从主机复制到新分支:

git cherry-pick $START_COMMIT..master
将新分支推送到新的远程端口:

git push origin truncated_master:master
似乎有一些额外的评论。事实上,看看这个评论:

2015年更新:使用Git 2.5+,您甚至可以获取一次提交。请参阅从远程git存储库提取特定提交


所以也许你不能推,但从另一边,你可以拉。你试过了吗?

我并没有给出一个真正的答案,因为这太过投机,但我认为1.7.11.7和1.9.1之间浅层克隆支持的变化注定了你的命运。在某些情况下,您可以创建一个.git目录的tarball,并直接复制它,完全绕过git,以完成您想要的操作。下次我必须尝试一下。我放弃了,做了快速肮脏的rm-f.git;git-init;这对我很有帮助。谢谢这对我不起作用;在git cherry pick$START_COMMIT..master期间,我遇到了一个冲突,不知道如何解决它。@Jez我也遇到了冲突,我想这是因为在运行cherry pick时,所有更改都已经存在于初始提交中。错误是运行START_COMMIT=$git rev list master | tail-n1。当我从一开始拿起第二个时,效果更好。是的,我试过拉。我也犯了同样的错误,不能拉一个浅克隆。
git push origin truncated_master:master