git常见问题指北

git clone

案例一

  • 问题 trace
    fatal:Authentication failed for '...'
    
  • 原因分析一:
    使用 ssh 协议下载代码,账户认证失败, git 账号,邮箱等信息错误。
  • 解决方法一:
    重新配置用户信息
    git config --global user.name [username]
    git config --global user.email [email]
    
    使用以下命令查询用户信息是否配置正确。
    git config --list
    
  • 原因分析二:
    使用了 http 协议下载代码,密码输入错误。
  • 解决方法二:
    输入正确的密码进行登录。
  • 扩展:
    如果是在 push 时报错这个错误,解决方法为 git config –system –unset credential.helper ,之后再次 push 会提示输入名称及密码。

案例二

  • 问题 trace
    Permission denied(publickey)
    
  • 原因分析:
    没有贴公钥,或者公钥贴错了代码服务器;在服务器上的公钥不是操作环境(如本机、虚拟机或编译服务器等)上的公钥;公钥损坏或者意外删除。
  • 解决方法:
    将公钥贴到要下载的 git 服务器的账号下。

案例三

  • 问题 trace
    error:unable to create file XXXX:file name too long
    
  • 原因分析:
    项目中某个文件的名字太长。
  • 解决方法:
    git config --global core.longpaths true
    git clone XXX  #在克隆一次即可
    

案例四

  • 问题 trace
    ssh: Could not resolve hostname XXXX : Name or service not known
    
  • 原因分析:
    无法解析域名。
  • 解决方法:
    添加域名解析即可。
    windows 环境,添加到 c:/windows/system32/drivers/etc/hosts 文件中;
    Linux 环境,添加到 /etc/hosts 文件中。格式为 IP地址 域名

git push

案例一

  • 问题 trace
    fatal: Unpack error, check server log
    ...
    ! [remote rejected] HEAD -> refs/heads/master (n/a (unpacker error))
    
  • 原因分析:
    默认情况下 git push 会在向服务器推送时进行优化,以将所发送的包降低到最小。 做法是发送时忽略本地仓库和远端仓库中共有的部分.。即 git push 默认是采用 –thin 选项的。在这个问题上,疑似某个 git 对象和服务器不一致了,故需要去掉这个参数。
  • 解决方法:
    git push --no-thin origin HEAD:refs/head/<分支名>
    

案例二

  • 问题 trace
    invalid committer
    
  • 原因分析:
    先提交生成的 committer 与后来更改的提交 email 地址不匹配,无效提交,需要更改邮箱名和用户名。
  • 解决方法一:
    git commit --amend --author='Your Name <邮箱地址>'#修改邮箱名和用户名
    
  • 解决方法二(推荐):
    git config  --global  --unset user.name
    git config  --global  --unset user.email
    git config --global user.name [username]
    git config --global user.email [email]
    git commit --amend --reset-author
    

案例三

  • 问题 trace
    mising Change-Id in commit message footer
    
  • 原因分析:
    当远程服务器是 gerrit 时,下载代码出现这个错误,则是因为没有在网页上选择 clone with commit-msg hooks
  • 解决方法:
    gitdir=$(git rev-parse --git-dir); scp -p -P ${port_id} ${uer_id}@${hostname}:hooks/commit-msg ${gitdir}/hooks/                     
    #其中${gitdir}里面为具体的仓库名称
    #注意hooks路径是否正确
    #注意分支是否正确
    git commit --amend
    #在弹出来的vim界面下,不要操作,执行:wq退出
    git log -2
    #可以查看Change-Id是否补全
    git push origin 
    

git pull

案例一

  • 问题 trace
    There is no tracking information for the current branch
    
  • 原因分析:
    本地分支没有跟远程分支相关联。
  • 解决方法:
    git branch --set-upstream-to=origin/<远程分支>  <本地分支>
    

案例二

  • 问题 trace
    unable to unlink old…………………..(Permisson denied)
    
  • 原因分析:
    文件被占用,没有释放进程。
  • 解决方法:
    关闭占用文件的 IDE ,再操作 git

案例三

  • 问题 trace
    warning:remote HEAD refers to nonexistent ref, unable to checkout.
    
  • 原因分析:
    本地没有对应的远程分支。
  • 解决方法:
    先通过 $git branch -a ;查看分支情况,然后再使用 $git checkout -b <本地分支名> origin/<远程分支名> (两个分支的名字需要相同)切换到需要的分支上。

持续更新中。。。

你可能感兴趣的:(git常见问题指北)