Skip to content

git异常处理

Peer's Certificate issuer is not recognized异常

在CentOS7操作系统中搭建了内部使用的gitlab平台,当使用git clone下载代码时会提示以下异常:

sh
fatal: unable to access 'https://*****/xx.git/': Peer's Certificate issuer is not recognized.

导致该问题的原因是系统证书问题,因为系统会对SSL证书进行验证,操作系统判断这个操作可能会造成不好的影响,并进行了阻止,停止了下载操作。

因为该gitlab仓库是我们信任的,我们只需要设置跳过SSL证书验证就可以,执行以下命令:

sh
git config --global http.sslVerify false

GitHub无法访问或访问缓慢解决办法

在终端执行指令sudo vi /etc/hosts打开hosts文件进行编辑 插入如下内容,保存退出即可!

# github
204.232.175.78 http://documentcloud.github.com
207.97.227.239 http://github.com
204.232.175.94 http://gist.github.com
107.21.116.220 http://help.github.com
207.97.227.252 http://nodeload.github.com
199.27.76.130 http://raw.github.com
107.22.3.110 http://status.github.com
204.232.175.78 http://training.github.com
207.97.227.243 http://www.github.com

Please commit your changes or stash them before you merge

解决方法:

  • git stash暂存。
  • git pull拉取远程仓库代码。
  • git stash pop释放暂存修改。

当你有多个设备都向同一个仓库中提交文件时,有时就会出现这种情况:

  • 你在A设备是对文件file进行了修改,并提交到git仓库里面去了。
  • 随后,你应该在B设备上面先检出最新的修改到本地,但你忘记了这一步。
  • 然后,你在B设备上面也修改了文件file,然后尝试从远程拉取最新的代码,就会出现这种异常。

如我们在 https://gitee.com/meizhaohui/testgit 仓库中有一个main.c的文件:

c
#include <stdio.h>
 
int main()
{
    /* 我的第一个 C 程序 */
    printf("Hello, World! \n");
 
    return 0;
}

我们先在Web界面上进行修改,然后提交。

此时文件已经增加了一行内容printf("Edited in Chrome! \n");

我们再尝试在本地修改:

sh
# 使用vim进行编辑修改
[mzh@MacBookPro testgit (master)]$ vi main.c

# 查看差异
[mzh@MacBookPro testgit (master ✗)]$ git diff|awk NF
diff --git a/main.c b/main.c
index 7a98610..20f6996 100644
--- a/main.c
+++ b/main.c
@@ -4,6 +4,7 @@ int main()
 {
     /* 我的第一个 C 程序 */
     printf("Hello, World! \n");
-
+    printf("Edited in Vim! \n");
+
     return 0;
 }

尝试拉取代码:

sh
[mzh@MacBookPro testgit (master ✗)]$ git pull
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (3/3), done.
Unpacking objects: 100% (3/3), 1.08 KiB | 554.00 KiB/s, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
From gitee.com:meizhaohui/testgit
   cbf4eb5..9187ca3  master     -> origin/master
Updating cbf4eb5..9187ca3
error: Your local changes to the following files would be overwritten by merge:
	main.c
Please commit your changes or stash them before you merge.
Aborting

可以看到,已经出现了Please commit your changes or stash them before you merge.异常,不能拉取远程仓库最新的代码了。

假如我们不想放弃本地的修改,此时的解决方法:

sh
# 先存储本地的修改
[mzh@MacBookPro testgit (master ✗)]$ git stash
Saved working directory and index state WIP on master: cbf4eb5 add main.c.

# 然后,从远程仓库拉取最新的代码
[mzh@MacBookPro testgit (master)]$ git pull
Updating cbf4eb5..9187ca3
Fast-forward
 main.c | 1 +
 1 file changed, 1 insertion(+)
 
# 把存储在栈中的修改释放出来
[mzh@MacBookPro testgit (master)]$ git stash pop
Auto-merging main.c
CONFLICT (content): Merge conflict in main.c
The stash entry is kept in case you need it again.

# 查看差异
[mzh@MacBookPro testgit (master ✗)]$ git diff|awk NF
diff --cc main.c
index 9489ab1,1e12a0c..0000000
--- a/main.c
+++ b/main.c
@@@ -4,7 -4,7 +4,12 @@@ int main(
  {
      /* 我的第一个 C 程序 */
      printf("Hello, World! \n");
++<<<<<<< Updated upstream
 +    printf("Edited in Chrome! \n");
 +
++=======
+     printf("Edited in Vim! \n");
+
++>>>>>>> Stashed changes
      return 0;
  }

此时,使用vim编辑main.c文件,将文件中标记为上游的修改和栈中的修改,进行对比分析,看看需要保留哪些,如我们需要两者,则可以编辑成这样的:

sh
#include <stdio.h>

int main()
{
    /* 我的第一个 C 程序 */
    printf("Hello, World! \n");
    printf("Edited in Chrome! \n");
    printf("Edited in Vim! \n");

    return 0;
}

然后,再进行提交:

sh
[mzh@MacBookPro testgit (master ✗)]$ git add main.c
[mzh@MacBookPro testgit (master ✗)]$ git commit -m"edited in vim"
[master 118bbd5] edited in vim
 1 file changed, 2 insertions(+), 1 deletion(-)
[mzh@MacBookPro testgit (master)]$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 318 bytes | 318.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.3]
To gitee.com:meizhaohui/testgit.git
   9187ca3..118bbd5  master -> master

可以看到,提交成功了!

此时,可以在浏览器中看到刚才的提交:

参考文献

本首页参考 https://notes.fe-mm.com/ 配置而成