我是Git新手,有一个相当大的项目,我想在Github上推送到远程回购(repo B)。最初的项目也在Github上,但来自不同的回购协议(RepoA)。在我可以在Repo B上设置项目之前,我必须对Repo A中的文件进行一些更改。我已经设置了远程设备、ssh密钥等,并且在将代码库推到Repo B时遇到了问题。
我一直收到以下错误:
$ git push <remote_repo_name> master
Enter passphrase for key '/c/ssh/.ssh/id_rsa':
Counting objects: 146106, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (35519/35519), done.
fatal: pack exceeds maximum allowed size00 GiB | 154 KiB/s
fatal: sha1 file '<stdout>' write error: Invalid arguments
error: failed to push some refs to 'git@github.com:<repo>.git
我在本地gitconfig中更改了以下设置
git config pack.packSizeLimit 1g
git config pack.windowMemory 1g
...运行git gc(我看到它重组了包,以便每个包都保持在1GB的包大小内)。这不起作用,我得到上面看到的错误。
我也试着缩小每包的尺寸。。。。
git config pack.packSizeLimit 500m
git config pack.windowMemory 500m
... 并运行git gc(我看到它重新组织了包,使每个包都保持在500MB的包大小内)。这也不起作用,我遇到了同样的错误。
我不确定Github的默认包装限制是什么(如果有的话)。如果这很重要的话,这个账户就是一个微型账户。
嗯,在大多数情况下,每次推送中限制提交计数(例如500)是有帮助的。但它无法解决单个大型提交所导致的错误。
如果单个大型提交超过git服务器的限制大小,那么将提交计数限制为1也无济于事。
要修复单个大型提交:
修复具有多个文件的单个大型提交(例如file1,file2,...,file10)
git checkout -b tmp SINGLE_LARGE_COMMIT^
git add file1 file2 file3 file4 # add a sub-class of files inside SINGLE_LARGE_COMMIT
git commit -m 'sub-commit'
git push origin tmp
git merge master # or any other branch which contains SINGLE_LARGE_COMMIT
git push origin tmp
git checkout master
git push origin master # success
正如onionjake在他的回答中所指出的,包。packSizeLimit
设置不影响推送。正如他所建议的,这通常可以通过使用多个推送来解决,每个推送的提交次数更少。rurban就如何自动推送500次提交的块发表了评论。下面是他的评论的修改版本,无论远程分支是否存在或是否已经包含一些提交,都可以正常工作。我还将--first parent
参数添加到git log
调用中,以防止在存储库包含多个根提交时出错。我还做了一些调整以提高效率,并添加了一个额外的调用git push
,以推送最后(部分)批提交:
# Adjust the following variables as necessary
REMOTE=origin
BRANCH=$(git rev-parse --abbrev-ref HEAD)
BATCH_SIZE=500
# check if the branch exists on the remote
if git show-ref --quiet --verify refs/remotes/$REMOTE/$BRANCH; then
# if so, only push the commits that are not on the remote already
range=$REMOTE/$BRANCH..HEAD
else
# else push all the commits
range=HEAD
fi
# count the number of commits to push
n=$(git log --first-parent --format=format:x $range | wc -l)
# push each batch
for i in $(seq $n -$BATCH_SIZE 1); do
# get the hash of the commit to push
h=$(git log --first-parent --reverse --format=format:%H --skip $i -n1)
echo "Pushing $h..."
git push $REMOTE ${h}:refs/heads/$BRANCH
done
# push the final partial batch
git push $REMOTE HEAD:refs/heads/$BRANCH
包大小限制不会影响git协议命令(您的推送)。
从git-config下pack.packSizeLimit
:
一个包裹的最大尺寸。此设置仅在重新打包时影响打包到文件,即git://协议不受影响。
当执行推送时,git总是只创建一个包,无论大小!
要解决此问题,请使用两次(或更多)推送:
git push remoteB <some previous commit on master>:master
...
git push remoteB <some previous commit after the last one>:master
git push remoteB master
这些推送都会有更小的包,并且会成功。
iOS 远程推送 之前曾经简要整理过iOS远程推送各个回调的一些内容 传送门 感觉脑子不够用了, 很多内容当时整理的不够详细清晰, 记忆也逐渐模糊 考虑很早的一些回调方法明显已经用不上了, 之前的部分文章也失去了回头再看的意义, 所以本篇文章主要以iOS 10.0 +为主, 重新梳理一下, 便于今后翻阅 若这篇文章有描述错误的地方, 还请及时指出 基础业务回调方法总结 一、 iOS 10 + 注册
本文向大家介绍iOS实现远程推送原理及过程,包括了iOS实现远程推送原理及过程的使用技巧和注意事项,需要的朋友参考一下 推送通知,是现在的应用必不可少的功能。那么在 iOS 中,我们是如何实现远程推送的呢?iOS 的远程推送原理又是什么呢?在做 iOS 远程推送时,我们会遇到各种各样的问题。那么首先让我们准备一些做推送需要的东西。我们需要一个付费的苹果开发者账号(免费的不可以做远程推送),有了开发
下面的示例显示了如何列出远程标记,而无需克隆repo: 如何像上面的例子一样远程编辑/添加/删除新标签,而无需克隆存储库? 需要克隆回购协议。 有没有办法在不克隆回购协议的情况下实现这一点?
我想使用GitHub操作自动化我的构建过程,这个过程有以下步骤: 签出 构建 打包 标记 增量版本 提交更改 推送标记和新提交 将包推送到repo
我正在尝试用远程通知处理所有可能的情况。当调用Foreground-DidReceiverEmoteNotification中的app时我就ok了。问题是当应用程序处于后台状态时,我收到推送通知。什么都不叫。如何让用户知道他有新的远程通知当应用程序回到前台?
几个小时前,我通过Github网站创建了两个存储库。然后,我访问了Github桌面应用程序,并对这两个存储库中的每一个都做了许多promise。我所遵循的程序是: 在Github网站上创建存储库 转到Github桌面应用程序,点击“克隆”以获得所选存储库 存储库已克隆到“Documents”中的“GitHub”文件夹 然后将代码文件复制到每个存储库文件夹(通过Windows资源管理器) 在Gith