推到github上的浅表副本后(Pushing to github after a shallow

2019-06-26 02:44发布

我有一个巨大的git仓库,因为提交的数量庞大,所以下面的建议在这里我创建了一个浅克隆。 我修改这个新的本地回购,现在我要推到我的原点在Github上(然后就到在Heroku我的分期和生产的遥控器)。 也许有一天我会学会阅读文档:

git的克隆--depth命令选项说

--depth创建一个浅克隆与截断以修改指定数量的历史。 浅库有许多限制的(你不能复制或读取它,也不是来自也不把它推)

所以...我怎么能拆散自己从这种情况下,我的代码推到Github上?

Answer 1:

Git的(自1.8.3)现在有获取一个浅克隆的完整历史记录的正式方式:

git fetch --unshallow

从混帐获取文档 :

--unshallow

如果源存储库完成之后,转换浅仓库到一个完整的,除去由浅库规定的所有限制。

如果源存储库是浅,获取尽可能使当前库中有相同的历史源代码库。



Answer 2:

我不会因为两个原因接受的答案一致:

  1. 原因是多方面的失败而忘记一个文件
  2. 你失去了你提交的信息和历史记录

这里是我的建议:

嫁接点

你应该有一个$ GIT_DIR / git的/浅文件与移植点。 如果历史是很简单的,这点移植应该让你即使推,虽然文件说,否则。

补丁

这可以让你保持提交历史和等:

git format-patch origin..master

然后克隆起源和重新申请:

git clone origin_path
cp shallow_clone/*.patch deep_clone
cd deep_clone
git am *.patch

这时候你可以把!

git push


Answer 3:

如果你是在一个浅克隆工作和缺乏历史的原因造成的问题,您可以用获取更多历史--depth选项。

git fetch --depth=20

其中20是提交给取的量。 提高IT如果这是不够的。

您也可以使用--depth与选项git pull



Answer 4:

我曾与推浅克隆回购协议到位桶服务器类似的问题,我也没有悠久历史的访问。 最后,我已经找到了解决办法。 请参见下文的注释的示例脚本:

#!/bin/bash

# Fix shallowness
mv .git/shallow .git/info/grafts

git checkout --orphan temp # create temp empty commit
git reset --hard
git commit -m "Init" --allow-empty

# Replace all shallow commits ids with new commit id. I copy-paste all refs from shallow file 
git replace 196cdbdb30e608aae2fd7cbe97cc8c0e6fa66c06 <commit_id_of_empty_init_above>
git replace 4c645849b296aaafc1809a9e1537c0fb305167ad <commit_id_of_empty_init_above>
git replace 50eab8bd8c416c47354331211b1efd8688ad8e97 <commit_id_of_empty_init_above>
git replace 649dc7577b87d1b05dff05bf9adc5e46f6612dfa <commit_id_of_empty_init_above>
git replace 6902148fde7b98ff0d6b6c6ebe929590322c95ff <commit_id_of_empty_init_above>
git remote set-url origin http://<username>:<password>@<example.com:port/repo.git> # reference to a remote repo to push
git push origin 'refs/replace/*' # push replace refs to remote repo first
git push -u origin master # push to master, finally

# Clear some garbage just in case
git filter-branch --tag-name-filter cat -- --all # rewrite history
git push --force origin
git fsck # check that everything is ok


Answer 5:

选项1)如果你仍然有原来的回购,只是从中获取前推:

git fetch --unshallow

选项2) 小心! 这只是建议用于新回购,因为这导致在历史上的损失,同时也非常容易产生矛盾!

如果您已删除你来自哪里获取的信息库,您需要放弃所有的历史。

 git filter-branch -- --all
 git push

git filter-branch :让您改写Git的修订历史记录

--分开修订选项过滤器分支选项

--all :重写所有分支和标签



文章来源: Pushing to github after a shallow clone