git实现远程仓库gitee管理实战
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.将master分支推送到gitee
1.注册GitHub或者gitee等仓库账号
首先,需要注册GitHub或者gitee等仓库账号,然后再执行如下命令,将代码上传到仓库。
如上图所示,在新建仓库时,选择不初始化仓库。
2.将本地仓库同步至远程仓库
如上图所示,官方提供了推送到仓库的命令。
如下图所示,成功将代码推送到gitee远程仓库。
以下是我将本地devops目录的代码推送到远程gitee仓库详细步骤:
[root@prometheus-server31 devops]# ll
total 24
drwxr-xr-x 3 root root 4096 Nov 17 22:11 ./
drwxr-xr-x 7 root root 4096 Nov 17 19:43 ../
drwxr-xr-x 8 root root 4096 Nov 17 22:17 .git/
-rw-r--r-- 1 root root 23 Nov 17 19:59 go.mod
-rw-r--r-- 1 root root 26 Nov 17 22:11 k8s.log
-rw-r--r-- 1 root root 16 Nov 17 22:11 office.txt
[root@prometheus-server31 devops]#
[root@prometheus-server31 devops]# git remote -v
[root@prometheus-server31 devops]#
[root@prometheus-server31 devops]# git remote add origin https://gitee.com/jasonyin2020/yinzhengjie-devops-k8s.git
[root@prometheus-server31 devops]#
[root@prometheus-server31 devops]# git remote -v
origin https://gitee.com/jasonyin2020/yinzhengjie-devops-k8s.git (fetch)
origin https://gitee.com/jasonyin2020/yinzhengjie-devops-k8s.git (push)
[root@prometheus-server31 devops]#
[root@prometheus-server31 devops]# git push -u origin "master"
Username for 'https://gitee.com': jasonyin2020
Password for 'https://jasonyin2020@gitee.com':
Enumerating objects: 11, done.
Counting objects: 100% (11/11), done.
Delta compression using up to 2 threads
Compressing objects: 100% (7/7), done.
Writing objects: 100% (11/11), 939 bytes | 939.00 KiB/s, done.
Total 11 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag 9141c7ae
To https://gitee.com/jasonyin2020/yinzhengjie-devops-k8s.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
[root@prometheus-server31 devops]#
二.将多个分支推送到远程仓库
1.新建flink分支
[root@prometheus-server31 devops]# git branch
* master
[root@prometheus-server31 devops]#
[root@prometheus-server31 devops]# git checkout -b flink
Switched to a new branch 'flink'
[root@prometheus-server31 devops]#
[root@prometheus-server31 devops]# git branch
* flink
master
[root@prometheus-server31 devops]#
[root@prometheus-server31 devops]# echo https://flink.apache.org/ > flink.txt
[root@prometheus-server31 devops]#
[root@prometheus-server31 devops]#
[root@prometheus-server31 devops]# git add flink.txt ; git commit -m 'add flink'
[flink 9e74e39] add flink
1 file changed, 1 insertion(+)
create mode 100644 flink.txt
[root@prometheus-server31 devops]#
2.新建kafka分支
[root@prometheus-server31 devops]# git checkout -b kafka
Switched to a new branch 'kafka'
[root@prometheus-server31 devops]#
[root@prometheus-server31 devops]# git branch
flink
* kafka
master
[root@prometheus-server31 devops]#
[root@prometheus-server31 devops]# echo https://kafka.apache.org/ > kafka.log
[root@prometheus-server31 devops]#
[root@prometheus-server31 devops]# git add kafka.log ; git commit -m 'add kafka'
[kafka 932ec59] add kafka
1 file changed, 1 insertion(+)
create mode 100644 kafka.log
[root@prometheus-server31 devops]#
3.推送所有分支到远程仓库
[root@prometheus-server31 devops]# git remote -v
origin https://gitee.com/jasonyin2020/yinzhengjie-devops-k8s.git (fetch)
origin https://gitee.com/jasonyin2020/yinzhengjie-devops-k8s.git (push)
[root@prometheus-server31 devops]#
[root@prometheus-server31 devops]# git push -u origin --all # 推送所有分支到远程仓库
Username for 'https://gitee.com': jasonyin2020
Password for 'https://jasonyin2020@gitee.com':
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 2 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 598 bytes | 598.00 KiB/s, done.
Total 6 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag 88410398
To https://gitee.com/jasonyin2020/yinzhengjie-devops-k8s.git
* [new branch] flink -> flink
* [new branch] kafka -> kafka
Branch 'master' set up to track remote branch 'master' from 'origin'.
Branch 'flink' set up to track remote branch 'flink' from 'origin'.
Branch 'kafka' set up to track remote branch 'kafka' from 'origin'.
[root@prometheus-server31 devops]#
三.配置本地的ssh公钥到gitee服务器
1.新电脑生成秘钥
[root@prometheus-server31 ~]# ssh-keygen -f ~/.ssh/id_rsa -P '' -q
2.查看公钥,将自己本地的公钥拷贝到服务器
[root@prometheus-server31 ~]# cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDJRqH9BN9GEPbqvvoRYZqKPcU8V/muF0GrXQtUrh42NMHecu2sdO5Utp7SQnh4lA/+xX1wp7tm1A2v4jRHCFmHM26okw0O0aFW8BzjY+ZW2bTFuWE/zI1P0q1lxdT4gaCtbFohyjmJi26cqTSDHfeN5r6vatyiJCPsDOzMa/SPMeKf4C8uVoAR+FRCO3T4LAzoGqi5OabsrDguzgkQaqclH7AhHIpyRGwhCMJLtpkDHAxni7PRO6smIlc4Rwuelr8chQRqalS6I8pxQ+82XmCEtE7KV4g2wcRIed2EuZQmBbxZZMSnGZdYRZ+DT5pu3CXUeJ8DDx/8K/9bT05+opZ5/cOtD2Yr5rimRjWIGQgZh7MNsYZpqcxecXSMXLFRsMiGyyuzAavT2GcStknz5E30vE5cgw4gn5/VT49y9/UAFHd8Uw85yD7RSSAw3GGO31H67wzTQbt6YY6XmAr6aSD9rotvS2Ml5KMGx2GU/X3Jtip6rGV9fqiG+d1BEBOrMO0= root@prometheus-server31
[root@prometheus-server31 ~]#
3.添加公钥
按照上图所示的步骤操作,操作成功后,会得到如下图所示的提示哟。
温馨提示:
上面的方式演示了基于ssh的免密登录,其实对于https也是支持免密登录的哟,只不过不建议使用。
- 原来的地址:
https://gitee.com/jasonyin2020/yinzhengjie-devops-k8s.git
- 修改的地址:
https://用户名:密码@gitee.com/jasonyin2020/yinzhengjie-devops-k8s.git
对于ssh免密登录使用的是前缀协议是git,对于https免密登录使用的前缀协议是https。
4.使用ssh协议拉取代码
如上图所示,我们可以按照WebUI的方式来克隆代码到本地。
如下图所示,将代码成功克隆到本地后,我们可以切换分支。
具体操作如下:
[root@prometheus-server31 ~]# git clone git@gitee.com:jasonyin2020/yinzhengjie-devops-k8s.git
Cloning into 'yinzhengjie-devops-k8s'...
remote: Enumerating objects: 17, done.
remote: Counting objects: 100% (17/17), done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 17 (delta 4), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (17/17), done.
Resolving deltas: 100% (4/4), done.
[root@prometheus-server31 ~]#
[root@prometheus-server31 ~]# cd yinzhengjie-devops-k8s/
[root@prometheus-server31 yinzhengjie-devops-k8s]#
[root@prometheus-server31 yinzhengjie-devops-k8s]# ll
total 24
drwxr-xr-x 3 root root 4096 Nov 17 22:51 ./
drwx------ 12 root root 4096 Nov 17 22:51 ../
drwxr-xr-x 8 root root 4096 Nov 17 22:51 .git/
-rw-r--r-- 1 root root 23 Nov 17 22:51 go.mod
-rw-r--r-- 1 root root 26 Nov 17 22:51 k8s.log
-rw-r--r-- 1 root root 16 Nov 17 22:51 office.txt
[root@prometheus-server31 yinzhengjie-devops-k8s]#
[root@prometheus-server31 yinzhengjie-devops-k8s]# git branch
* master
[root@prometheus-server31 yinzhengjie-devops-k8s]#
[root@prometheus-server31 yinzhengjie-devops-k8s]# git checkout kafka
Branch 'kafka' set up to track remote branch 'kafka' from 'origin'.
Switched to a new branch 'kafka'
[root@prometheus-server31 yinzhengjie-devops-k8s]#
[root@prometheus-server31 yinzhengjie-devops-k8s]# git branch
* kafka
master
[root@prometheus-server31 yinzhengjie-devops-k8s]#
[root@prometheus-server31 yinzhengjie-devops-k8s]# ll
total 32
drwxr-xr-x 3 root root 4096 Nov 17 22:51 ./
drwx------ 12 root root 4096 Nov 17 22:52 ../
-rw-r--r-- 1 root root 26 Nov 17 22:51 flink.txt
drwxr-xr-x 8 root root 4096 Nov 17 22:51 .git/
-rw-r--r-- 1 root root 23 Nov 17 22:51 go.mod
-rw-r--r-- 1 root root 26 Nov 17 22:51 k8s.log
-rw-r--r-- 1 root root 26 Nov 17 22:51 kafka.log
-rw-r--r-- 1 root root 16 Nov 17 22:51 office.txt
[root@prometheus-server31 yinzhengjie-devops-k8s]#
5.拉取远程仓库特定的分支
如上图所示,我们可以在拉取代码的时候选择一个特定的分支来拉取代码。
具体操作如下所示:
[root@prometheus-server31 tmp]# git clone git@gitee.com:jasonyin2020/yinzhengjie-devops-k8s.git -b flink
Cloning into 'yinzhengjie-devops-k8s'...
remote: Enumerating objects: 17, done.
remote: Counting objects: 100% (17/17), done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 17 (delta 4), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (17/17), done.
Resolving deltas: 100% (4/4), done.
[root@prometheus-server31 tmp]#
[root@prometheus-server31 tmp]# cd yinzhengjie-devops-k8s/
[root@prometheus-server31 yinzhengjie-devops-k8s]#
[root@prometheus-server31 yinzhengjie-devops-k8s]# git branch
* flink
[root@prometheus-server31 yinzhengjie-devops-k8s]#
[root@prometheus-server31 yinzhengjie-devops-k8s]# ll
total 28
drwxr-xr-x 3 root root 4096 Nov 17 22:55 ./
drwxrwxrwt 14 root root 4096 Nov 17 22:55 ../
-rw-r--r-- 1 root root 26 Nov 17 22:55 flink.txt
drwxr-xr-x 8 root root 4096 Nov 17 22:55 .git/
-rw-r--r-- 1 root root 23 Nov 17 22:55 go.mod
-rw-r--r-- 1 root root 26 Nov 17 22:55 k8s.log
-rw-r--r-- 1 root root 16 Nov 17 22:55 office.txt
[root@prometheus-server31 yinzhengjie-devops-k8s]#
四.git revert实现远程仓库回滚
1.git revert概述
如果我们修改了某些内容已经提交到本地仓库,并且push到远程仓库了,这种情况下想把本地和远程仓库都回滚到某个版本,该怎么做呢?
前面用git reset只是在本地仓库中回退版本,而远程仓库的版本不会变化,这样,即使本地reset了,但如果再次git pull,那么,远程仓库的内容又会和本地之前版本的内容进行merge,造成回退失败。
对于已经把代码push到远程仓库,你退回本地代码其实也想同时退回线上代码,回滚到某个特定的版本,线上和线下代码保持一致。
git revert用于撤销某次操作,此次操作之前和commit和history都会保留,即用一个新提交来消除一个历史提交所做的任何修改。
revert之后你的本地代码会回滚到指定的历史版本,然后再git push。
2.git revert用法
git revert HEAD
撤销前一次commit,会交互式打开文本编辑器提示输入提交信息。
git revert HEAD --no-edit
非交互式撤销前一次提交。
git revert HEAD^
撤销前一次commit。
git revert commit <commit>
撤销指定的版本,撤销也会作为一次提交进行保存。
3.git reset和git revert区别
git revert
是用一次新的commit来回顾之前的commit,git reset是直接删除指定的commit。
git reset
是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容跟要revert的内容正好相反,能够抵消要被revert的内容。
五.可能会遇到的问题
1.Already up to date.
报错信息:
[root@prometheus-server31 devops]# git merge k8s
Already up to date.
[root@prometheus-server31 devops]#
错误原因:
已经合并过分支了。可以忽略此报错,因为你可能已经完成分支合并啦。
解决方案:
检查工作区文件,验证是否已经完成分支合并。
2.Please make sure you have the correct access rights
报错信息:
[root@prometheus-server31 ~]# git clone git@gitee.com:jasonyin2020/yinzhengjie-devops-k8s.git
Cloning into 'yinzhengjie-devops-k8s'...
The authenticity of host 'gitee.com (180.76.198.77)' can't be established.
ED25519 key fingerprint is SHA256:+ULzij2u99B9eWYFTw1Q4ErYG/aepHLbu96PAUCoV88.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'gitee.com' (ED25519) to the list of known hosts.
git@gitee.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
[root@prometheus-server31 ~]#
错误原因:
本地无权限访问gitee的远程仓库,可能是没有将服务器的公钥拷贝到gitee上。
解决方案:
在gitee中的WebUI检查是否配置了本地服务器生成的公钥信息。
本文来自博客园,作者:尹正杰,转载请注明原文链接:https://www.cnblogs.com/yinzhengjie/p/14290869.html,个人微信: "JasonYin2020"(添加时请备注来源及意图备注,有偿付费)
当你的才华还撑不起你的野心的时候,你就应该静下心来学习。当你的能力还驾驭不了你的目标的时候,你就应该沉下心来历练。问问自己,想要怎样的人生。