Git把Tag推送到远程仓库

一、列出标签

$ git tag # 在控制台打印出当前仓库的所有标签

二、搜索标签

$ git tag -l ‘v0.1.*’ # 搜索符合模式的标签

三、推送标签到远程仓库

git push并不会把tag标签传送到远端服务器上,只有通过显式命令才能分享标签到远端仓库。
1.push单个tag,命令格式为:git push origin [tagname]
例如:
git push origin v1.0 #将本地v1.0的tag推送到远端服务器
2.push所有tag,命令格式为:git push [origin] –tags
例如:
git push –tags

git push origin –tags

git remote: warning: suboptimal pack – out of memory

查找大文件

find / -type f -size +200M -print0 | xargs -0 du -h | sort -nr

cd  /var/opt/gitlab/git-data/repositories/@hashed/5e/c1/5ec1a0c99d428601ce42b407ae9c675e0836a8ba591c8ca6e2a2cf5563d97ff0.git

今天在使用git clone项目的时候出现 ”remote: warning: suboptimal pack – out of memory”

经过搜索找到解决方法:在服务端该项目的仓库下,编辑 config 文件,在文件中添加

[pack]
     window=0

保存退出即可。

Posted in git

RPC failed curl 18 transfer closed with outstanding read data fatal protocol error bad pack header

本周从git clone下载项目时由于项目过大,http方式报错protocol error: bad pack header,ssh方式报错fatal: early EOF fatal: index-pack failed期间查阅各种资料,也走了不少弯路,在此整理记录一下,特此分享。

问题描述

git clone用http方式下载报错如下:
1
2
3
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: The remote end hung up unexpectedly
fatal: protocol error: bad pack header
git clone用ssh方式下载报错如下:

SSH公钥配置的也没问题仍然报错

1
2
3
4
5
6
7
8
error: pack-objects died of signal 9/5818)
error: git upload-pack: git-pack-objects died with error.
fatal: git upload-pack: aborting due to possible repository corruption on the remote side.
remote: aborting due to possible repository corruption on the remote side.
fatal: early EOF
fatal: index-pack failed

错误如下图:

在这里插入图片描述

解决方案

第一种方案

网上说http方式报错protocol error: bad pack header需要配置ssh方式即可解决,但是在我的实际操作过程中,ssh方式爆出然报错fatal: early EOF fatal: index-pack failed等错误。

第二种方案

修改本地的git配置:

1
2
3
4
git config –global pack.windowMemory “100m”
git config –global pack.SizeLimit “100m”
git config –global pack.threads “1”
git config –global pack.window “0”

结果未能解决仍然报错。

第三种方案 浅克隆git clone –depth 1 项目地址

可能是下载的项目工程太大导致的,那我们就下载最近的一次commit就好了,即:git clone –depth 1 项目地址,我出现的现象是很快就下载到100%了,但是下载的是一个空文件夹,什么内容都没有,即下载失败

最终解决方案和原因分析

根据这两种错误,我查到的大部分的解决方案就是浅克隆(git clone –depth)、修改git配置:加大缓存区、修改压缩配置等(git config –global),但是未能解决我的问题,最后在一篇博客评论中看到是应该是git服务有问题,不是本地客户端的问题
需要修改git 服务端的配置,进部署git的服务器,不是打开本地命令窗。在git服务器做如下配置即可解决:

1
2
3
4
git config –global pack.windowMemory “100m”
git config –global pack.SizeLimit “100m”
git config –global pack.threads “1”
git config –global pack.window “0”
我的解决方式

将问题交给运维那边处理,运维那边说改配置比较麻烦怕影响其他的(我也没理解),只是简单改了一下,让我在试试浅克隆结果总算成功了如下图:
在这里插入图片描述浅克隆存在的问题:
浅克隆只会把默认分支clone下来,其他远程分支并不在本地,所以这种情况下,需要用如下方法拉取其他分支需要进行如下步骤

1
2
3
4
5
6
7
8
9
10
11
12
13
14
step1:  浅克隆
git clone –depth 1 https://地址/xxxxxxx.git

step2:  cd  到新下载的项目根目录
cd   xxxxxxx

step3: 设置远程要拉取的地址
git remote set-branches origin  分支名称

step4: 浅克隆下载此分支
git fetch –depth 1 origin 分支名称

step5:切换到分支
git checkout 分支名称

git删除本地分支和删除远程分支

引言:

注:本人一直都是用的git bash窗口完成日常的开发工作。

事情是这样的,切换分支的时候命令打错了,git checkout 后面没有跟分支名,结果git status,很多delete的文件,直接冒冷汗,git add ,commit 之后发现本地与远程确实是删除了很多文件,我本地没有修改的代码,于是选择直接删除本地的分支,然后重新从远程拉分支。

具体操作:

我现在在dev20181018分支上,想删除dev20181018分支

1 先切换到别的分支: git checkout dev20180927

2 删除本地分支: git branch -d dev20181018

3 如果删除不了可以强制删除,git branch -D dev20181018

4 有必要的情况下,删除远程分支(慎用):git push origin –delete dev20181018

5 在从公用的仓库fetch代码:git fetch origin dev20181018:dev20181018

6 然后切换分支即可:git checkout dev20181018

注:上述操作是删除个人本地和个人远程分支,如果只删除个人本地,请忽略第4步

关于http协议