我有一个巨大的git仓库,因为提交的数量庞大,所以下面的建议在这里我创建了一个浅克隆。 我修改这个新的本地回购,现在我要推到我的原点在Github上(然后就到在Heroku我的分期和生产的遥控器)。 也许有一天我会学会阅读文档:
git的克隆--depth命令选项说
--depth创建一个浅克隆与截断以修改指定数量的历史。 浅库有许多限制的(你不能复制或读取它,也不是来自也不把它推)
所以...我怎么能拆散自己从这种情况下,我的代码推到Github上?
我有一个巨大的git仓库,因为提交的数量庞大,所以下面的建议在这里我创建了一个浅克隆。 我修改这个新的本地回购,现在我要推到我的原点在Github上(然后就到在Heroku我的分期和生产的遥控器)。 也许有一天我会学会阅读文档:
git的克隆--depth命令选项说
--depth创建一个浅克隆与截断以修改指定数量的历史。 浅库有许多限制的(你不能复制或读取它,也不是来自也不把它推)
所以...我怎么能拆散自己从这种情况下,我的代码推到Github上?
Git的(自1.8.3)现在有获取一个浅克隆的完整历史记录的正式方式:
git fetch --unshallow
从混帐获取文档 :
--unshallow
如果源存储库完成之后,转换浅仓库到一个完整的,除去由浅库规定的所有限制。
如果源存储库是浅,获取尽可能使当前库中有相同的历史源代码库。
我不会因为两个原因接受的答案一致:
这里是我的建议:
你应该有一个$ 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
如果你是在一个浅克隆工作和缺乏历史的原因造成的问题,您可以用获取更多历史--depth
选项。
git fetch --depth=20
其中20是提交给取的量。 提高IT如果这是不够的。
您也可以使用--depth
与选项git pull
。
我曾与推浅克隆回购协议到位桶服务器类似的问题,我也没有悠久历史的访问。 最后,我已经找到了解决办法。 请参见下文的注释的示例脚本:
#!/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
选项1)如果你仍然有原来的回购,只是从中获取前推:
git fetch --unshallow
选项2) 小心! 这只是建议用于新回购,因为这将导致在历史上的损失,同时也非常容易产生矛盾!
如果您已删除你来自哪里获取的信息库,您需要放弃所有的历史。
git filter-branch -- --all
git push
git filter-branch
:让您改写Git的修订历史记录
--
分开修订选项过滤器分支选项
--all
:重写所有分支和标签