Git分布式版本控制系统

目录

2、安装git

2.1 初始环境

2.2 Yum安装Git

2.3 编译安装

2.4 初次运行 Git 前的配置

2.5 初始化及获取 Git 仓库

2.6 Git命令常规操作

2.6.2 添加新文件

2.6.3 删除git内的文件

2.6.4 重命名暂存区数据

2.6.5 查看历史记录

2.6.6 还原历史数据

2.6.7 还原未来数据

2.6.8 标签使用

2.6.9 对比数据

2.7 分支结构

2.7.2 合并失败解决

2.7.3 删除分支

2.8 windwos上Git的使用

2.8 windwos上Git的使用

GitHub托管服务

注册GitHub

添加密钥

创建仓库


Git 是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。一个原始 Git 版本仓库,可以让其他主机克隆这个原始版本仓库,从而使得一个Git 版本仓库可以同时分布到不同的主机上,并且每台主机的版本库都是一样的,并没有主次之分,极大的保证了数据的安全性,并使得用户能够自主选择 Git 服务器推送文件了,其

实部署一个 Git 服务器是一件非常简单的事情。

服务器

IP地址

主机名

角色

CentOS7.x

192.168.147.142

gitserver

Git服务器

CentOS7.x

192.168.147.143

gitclient

Git客户端

2、安装git

2.1 初始环境

[root@gitclient ~]# systemctl stop firewalld
[root@gitclient ~]# iptables -F
[root@gitclient ~]# setenforce 0

2.2 Yum安装Git

# centos 自带git

[root@gitclient ~]# rpm -q git
git-1.8.3.1-13.el7.x86_64

安装方法

[root@gitclient ~]# yum -y install git

2.3 编译安装

编译安装可以安装较新版本的git

Git下载地址: Releases · git/git · GitHub

 

 # 安装依赖关系

[root@gitclient ~]# yum -y install curl-devel expat-devel gettext-devel  openssl-devel zlib-devel

# 编译安装—服务端和客户端

[root@gitclient ~]# wget https://github.com/git/git/archive/v2.22.0.tar.gz
[root@gitclient ~]# tar xf git-2.22.0.tar.gz -C /usr/src/
[root@gitclient ~]# cd /usr/src/git-2.22.0/
[root@git git-2.22.0]# make configure  #最小化安装要yum下载autoconf命令
#最小化要有gcc、gcc-c++
[root@git git-2.22.0]# ./configure --prefix=/usr/local/git && make && make install
[root@git git-2.22.0]# ln -sf /usr/local/git/bin/git /usr/bin/
[root@git git-2.22.0]# git --version
git version 2.22.0

2.4 初次运行 Git 前的配置

命令集

git config --global user.name "crushlinux"  #配置git使用用户

git config --global user.email "crushlinux@163.com"  #配置git使用邮箱

git config --global color.ui true  #语法高亮

git config --list         #查看全局配置

配置过程

[root@gitclient ~]# git config --global user.name "crushlinux"  #配置git使用用户
[root@gitclient ~]# git config --global user.email "crushlinux@163.com"  #配置git使用邮箱
[root@gitclient ~]# git config --global color.ui true  #语法高亮
[root@gitclient ~]# git config --list #查看全局配置
user.name=crushlinux
user.email=crushlinux@163.com
color.ui=true

生成的配置文件

[root@gitclient ~]# cat .gitconfig
[user]
	name = crushlinux
	email = crushlinux@163.com
[color]
	ui = true

获取帮助

使用Git时需要获取帮助,有三种方法可以找到Git命令的使用手册:

  1. git help config
  2. git config --help
  3. man git config

例如,要想获得配置命令的手册,执行

[root@gitclient ~]# git help config

2.5 初始化及获取 Git 仓库

Git服务器操作

[root@gitserver ~]# mkdir git_data.git
[root@gitserver ~]# cd git_data.git/
[root@gitserver git_data.git]# git --bare init
初始化空的 Git 版本库于 /root/git_data.git/

Git客户端操作

[root@gitclient ~]# ssh-keygen
[root@gitclient ~]# ssh-copy-id root@192.168.200.111
[root@gitclient ~]# git clone root@192.168.200.111:/root/git_data.git
正克隆到 'git_data'...
warning: 您似乎克隆了一个空仓库。
[root@gitclient ~]# cd git_data/
[root@git git_data]# git status
位于分支 master

尚无提交

无文件要提交(创建/拷贝文件并使用 "git add" 建立跟踪)

2.6 Git命令常规操作

常用命令说明

命令

命令说明

add    

添加文件内容至暂存区(索引)

bisect 

通过二分查找定位引入 bug 的变更

branch 

列出、创建或删除分支

checkout

检出一个分支或路径到工作区

clone  

克隆一个版本库到一个新目录

commit 

记录变更到版本库(本地)

diff   

显示提交之间、提交和工作区之间等的差异

fetch  

从另外一个版本库下载对象和引用

grep   

输出和模式匹配的行

init   

创建一个空的

Git    

版本库或重新初始化一个已存在的版本库

log    

显示提交日志

merge  

合并两个或更多开发历史

mv     

移动或重命名一个文件、目录或符号链接

pull   

获取并合并另外的版本库或一个本地分支

push   

更新远程引用和相关的对象

rebase 

本地提交转移至更新后的上游分支中

reset  

重置当前HEAD到指定状态

rm     

从工作区和索引中删除文件

show   

显示各种类型的对象

status 

显示工作区状态

tag

创建、列出、删除或校验一个GPG签名的 tag 对象

常用操作示意图

 文件的状态变化周期

 2.6.1 创建文件

[root@gitclient git_data]# touch README
[root@gitclient git_data]# git status
位于分支 master

尚无提交

未跟踪的文件:
  (使用 "git add <文件>..." 以包含要提交的内容)

	README

提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

添加文件跟踪

[root@gitclient git_data]# git add ./*
[root@gitclient git_data]# git status
位于分支 master

尚无提交

要提交的变更:
  (使用 "git rm --cached <文件>..." 以取消暂存)

	新文件:   README

文件会添加到.git的隐藏目录

[root@gitclient git_data]# tree .git/
.git/
├── branches
├── config
├── description
├── HEAD
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── fsmonitor-watchman.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   ├── pre-receive.sample
│   └── update.sample
├── index
├── info
│   └── exclude
├── objects
│   ├── e6
│   │   └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
│   ├── info
│   └── pack
└── refs
    ├── heads
    └── tags

10 directories, 17 files

由工作区提交到本地仓库

[root@gitclient git_data]# git commit -m 'first commit'
[master(根提交) 1c0ce70] first commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README

查看git的状态

[root@gitclient git_data]# git commit -m 'first commit'
[master(根提交) 1c0ce70] first commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README
[root@gitclient git_data]# git status
位于分支 master
您的分支基于 'origin/master',但此上游分支已经不存在。
  (使用 "git branch --unset-upstream" 来修复)

无文件要提交,干净的工作区
[root@gitclient git_data]# 

提交后的git目录状态

[root@gitclient git_data]# tree .git/
.git/
├── branches
├── COMMIT_EDITMSG
├── config
├── description
├── HEAD
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── fsmonitor-watchman.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   ├── pre-receive.sample
│   └── update.sample
├── index
├── info
│   └── exclude
├── logs
│   ├── HEAD
│   └── refs
│       └── heads
│           └── master
├── objects
│   ├── 1c
│   │   └── 0ce702b42c6f90474782dae145bbf7ffed922b
│   ├── 54
│   │   └── 3b9bebdc6bd5c4b22136034a95dd097a57d3dd
│   ├── e6
│   │   └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
│   ├── info
│   └── pack
└── refs
    ├── heads
    │   └── master
    └── tags

15 directories, 23 files

提交到远程仓库

[root@gitclient git_data]# git push root@192.168.147.142:/root/git_data.git
枚举对象: 3, 完成.
对象计数中: 100% (3/3), 完成.
写入对象中: 100% (3/3), 204 bytes | 204.00 KiB/s, 完成.
总共 3 (差异 0),复用 0 (差异 0)
To 192.168.147.142:/root/git_data.git
 * [new branch]      master -> master

2.6.2 添加新文件

  1. git add            #添加到暂存区域
  2. git commit     #提交git仓库 -m 后面接上注释信息,内容关于本次提交的说明,方便自己或他人查看

修改或删除原有文件

常规方法

  1. git add
  2. git commit

简便方法

  1. git commit  -a  -m "注释信息"

-a 表示直接提交

2.6.3 删除git内的文件

命令说明:

  1. 没有添加到暂存区的数据直接rm删除即可。
  2. 已经添加到暂存区数据:

git rm --cached database 

#将文件从git暂存区域的追踪列表移除(并不会删除当前工作目录内的数据文件)

git rm -f database

#将文件数据从git暂存区和工作目录一起删除

操作命令:

# 创建新文件

[root@gitclient git_data]# touch 123
[root@gitclient git_data]# git status
位于分支 master
您的分支基于 'origin/master',但此上游分支已经不存在。
  (使用 "git branch --unset-upstream" 来修复)

未跟踪的文件:
  (使用 "git add <文件>..." 以包含要提交的内容)

	123

提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

将文件添加到暂存区域

[root@gitclient git_data]# git add 123
[root@gitclient git_data]# git status
位于分支 master
您的分支基于 'origin/master',但此上游分支已经不存在。
  (使用 "git branch --unset-upstream" 来修复)

要提交的变更:
  (使用 "git reset HEAD <文件>..." 以取消暂存)

	新文件:   123

删除文件

[root@gitclient git_data]# rm -f 123
[root@gitclient git_data]# ls
README
[root@gitclient git_data]# git status
位于分支 master
您的分支基于 'origin/master',但此上游分支已经不存在。
  (使用 "git branch --unset-upstream" 来修复)

要提交的变更:
  (使用 "git reset HEAD <文件>..." 以取消暂存)

	新文件:   123

尚未暂存以备提交的变更:
  (使用 "git add/rm <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

	删除:     123

[root@gitclient git_data]# git reset HEAD ./*
重置后取消暂存的变更:
D	123
[root@gitclient git_data]# git status
位于分支 master
您的分支基于 'origin/master',但此上游分支已经不存在。
  (使用 "git branch --unset-upstream" 来修复)

要提交的变更:
  (使用 "git reset HEAD <文件>..." 以取消暂存)

	新文件:   123

尚未暂存以备提交的变更:
  (使用 "git add/rm <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

	删除:     123

[root@gitclient git_data]# git rm 123
rm '123'
[root@gitclient git_data]# git status
位于分支 master
您的分支基于 'origin/master',但此上游分支已经不存在。
  (使用 "git branch --unset-upstream" 来修复)

无文件要提交,干净的工作区

2.6.4 重命名暂存区数据

  1. 没有添加到暂存区的数据直接mv/rename改名即可。
  2. 已经添加到暂存区数据:

操作命令

[root@gitclient git_data]# git mv README NOTICE
[root@gitclient git_data]# git status
位于分支 master
您的分支基于 'origin/master',但此上游分支已经不存在。
  (使用 "git branch --unset-upstream" 来修复)

要提交的变更:
  (使用 "git reset HEAD <文件>..." 以取消暂存)

	重命名:   README -> NOTICE

2.6.5 查看历史记录

• git log   #查看提交历史记录

• git log -2   #查看最近几条记录

• git log -p -1  #-p显示每次提交的内容差异,例如仅查看最近一次差异

• git log --stat -2 #--stat简要显示数据增改行数,这样能够看到提交中修改过的内容,对文件添加或移动的行数,并在最后列出所有增减行的概要信息

• git log --pretty=oneline #--pretty根据不同的格式展示提交的历史信息

• git log --pretty=fuller -2 #以更详细的模式输出提交的历史记录

• git log --pretty=fomat:"%h %cn"  #查看当前所有提交记录的简短SHA-1哈希字串与提交着的姓名。

使用format参数来指定具体的输出格式

格式

说明

%s

提交说明。

%cd

提交日期。

%an

作者的名字。

%cn

提交者的姓名。

%ce

提交者的电子邮件。

%H

提交对象的完整SHA-1哈希字串。

%h

提交对象的简短SHA-1哈希字串。

%T

树对象的完整SHA-1哈希字串。

%t

树对象的简短SHA-1哈希字串。

%P

父对象的完整SHA-1哈希字串。

%p

父对象的简短SHA-1哈希字串。

%ad

作者的修订时间。

操作命令

[root@gitclient git_data]# git log
commit 1c0ce702b42c6f90474782dae145bbf7ffed922b (HEAD -> master)
Author: crushlinux <crushlinux@163.com>
Date:   Thu Aug 17 19:34:22 2023 +0800

    first commit

2.6.6 还原历史数据

Git服务程序中有一个叫做HEAD的版本指针,当用户申请还原数据时,其实就是将HEAD指针指向到某个特定的提交版本,但是因为Git是分布式版本控制系统,为了避免历史记录冲突,故使用了SHA-1计算出十六进制的哈希字串来区分每个提交版本,另外默认的HEAD版本指针会指向到最近的一次提交版本记录,而上一个提交版本会叫HEAD^,上上一个版本则会叫做HEAD^^,当然一般会用HEAD~5来表示往上数第五个提交版本。

git reset --hard   hash

git reset --hard HEAD^  #还原历史提交版本上一次

git reset --hard 3de15d4 #找到历史还原点的SHA-1值后,就可以还原(值不写全,系统

会自动匹配)

操作命令

[root@gitclient git_data]# vim NOTICE
[root@gitclient git_data]# cat NOTICE
hello,git
[root@gitclient git_data]# git commit -a -m 'test'
[master d3795ad] test
 2 files changed, 1 insertion(+)
 create mode 100644 NOTICE
 delete mode 100644 README
[root@gitclient git_data]# git log
commit d3795ad703a16d2bcb57310bc06f49cb4653734d (HEAD -> master)
Author: crushlinux <crushlinux@163.com>
Date:   Thu Aug 17 19:45:17 2023 +0800

    test

commit 1c0ce702b42c6f90474782dae145bbf7ffed922b
Author: crushlinux <crushlinux@163.com>
Date:   Thu Aug 17 19:34:22 2023 +0800

    first commit
[root@gitclient git_data]# git reset --hard 1c0ce
HEAD 现在位于 1c0ce70 first commit
[root@gitclient git_data]# ls
README
[root@gitclient git_data]# cat README 
[root@gitclient git_data]# 

2.6.7 还原未来数据

什么是未来数据?就是你还原到历史数据了,但是你后悔了,想撤销更改,但是git  log已经找不到这个版本了。

git reflog #查看未来历史更新点

操作命令

[root@gitclient git_data]# git reflog
1c0ce70 (HEAD -> master) HEAD@{0}: reset: moving to 1c0ce
d3795ad HEAD@{1}: commit: test
1c0ce70 (HEAD -> master) HEAD@{2}: commit (initial): first commit
[root@gitclient git_data]# cat NOTICE
cat: NOTICE: 没有那个文件或目录
[root@gitclient git_data]# git reset --hard d3795ad
HEAD 现在位于 d3795ad test
[root@gitclient git_data]# cat NOTICE
hello,git

2.6.8 标签使用

前面回滚使用的是一串字符串,又长又难记。

  1. git tag v1.0   #当前提交内容打一个标签(方便快速回滚),每次提交都可以打个tag。
  2. git tag          #查看当前所有的标签
  3. git show v1.0   #查看当前1.0版本的详细信息
  4. git tag v1.2 -m "version 1.2 release is test"  #创建带有说明的标签,-a指定标签名字,-m指定说明文字
  5. git tag -d v1.0   #我们为同一个提交版本设置了两次标签,删除之前的v1.0

操作命令

[root@gitclient git_data]# git reset --hard d3795ad
HEAD 现在位于 d3795ad test
[root@gitclient git_data]# git tag
[root@gitclient git_data]# git tag v20230817
[root@gitclient git_data]# git tag
v20230817
[root@gitclient git_data]# git reset --hard v20230817
HEAD 现在位于 d3795ad test

2.6.9 对比数据

            git diff可以对比当前文件与仓库已保存文件的区别,知道了对NOTICE作了什么修改

后,再把它提交到仓库就放⼼多了。

[root@gitclient git_data]# echo "hello,gitserver" >> NOTICE
[root@gitclient git_data]# git diff NOTICE
diff --git a/NOTICE b/NOTICE
index 4309ccc..1459c11 100644
--- a/NOTICE
+++ b/NOTICE
@@ -1 +1,2 @@
 hello,git
+hello,gitserver

2.7 分支结构

在实际的项目开发中,尽量保证master分支稳定,仅用于发布新版本,平时不要随便直接修改master分支里面的数据文件。

那在哪干活呢?干活都在dev分支上。每个人从dev分支创建自己个人分支,开发完合并到dev分支,最后dev分支合并到master分支。所以团队的合作分支看起来会像下图那样。

 2.7.1 分支切换

[root@gitclient git_data]# git branch linux
[root@gitclient git_data]# git branch
  linux
* master
[root@gitclient git_data]# git checkout linux
M	NOTICE
切换到分支 'linux'
[root@gitclient git_data]# git branch
* linux
  master

在linux分支进行修改

[root@gitclient git_data]# cat NOTICE 
hello,git
hello,gitserver
[root@gitclient git_data]# echo "hello,github" >> NOTICE
[root@gitclient git_data]# git add
没有指定文件,也没有文件被添加。
也许您想要执行 'git add .'?
[root@gitclient git_data]# git add .
[root@gitclient git_data]# git commit -m "github"
[linux 34c678f] github
 1 file changed, 2 insertions(+)
[root@gitclient git_data]# git status
位于分支 linux
无文件要提交,干净的工作区

回到master分支

[root@gitclient git_data]# git checkout master
切换到分支 'master'
您的分支基于 'origin/master',但此上游分支已经不存在。
  (使用 "git branch --unset-upstream" 来修复)
[root@gitclient git_data]# cat NOTICE 
hello,git
[root@gitclient git_data]# git log -1
commit d3795ad703a16d2bcb57310bc06f49cb4653734d (HEAD -> master, tag: v20230817)
Author: crushlinux <crushlinux@163.com>
Date:   Thu Aug 17 19:45:17 2023 +0800

    test

合并代码

[root@gitclient git_data]# git log -1
commit d3795ad703a16d2bcb57310bc06f49cb4653734d (HEAD -> master, tag: v20230817)
Author: crushlinux <crushlinux@163.com>
Date:   Thu Aug 17 19:45:17 2023 +0800

    test
[root@gitclient git_data]# git merge linux
更新 d3795ad..34c678f
Fast-forward
 NOTICE | 2 ++
 1 file changed, 2 insertions(+)

2.7.2 合并失败解决

模拟冲突,在文件的同一行做不同修改

在master 分支进行修改

[root@gitclient git_data]# cat NOTICE 
hello,git
hello,gitserver
hello,github
[root@gitclient git_data]# echo "hello.error" >> NOTICE 
[root@gitclient git_data]# git commit -a -m "master error"
[master 7ed35fc] master error
 1 file changed, 1 insertion(+)

切换到linux分支

[root@gitclient git_data]# cat NOTICE 
hello,git
hello,gitserver
hello,github
[root@gitclient git_data]# echo "hello,linux" >> NOTICE 
[root@gitclient git_data]# git commit -a -m "linux"
[linux 03cb675] linux
 1 file changed, 1 insertion(+)

回到master分区,进行合并,出现冲突

[root@gitclient git_data]# git checkout master
切换到分支 'master'
您的分支基于 'origin/master',但此上游分支已经不存在。
  (使用 "git branch --unset-upstream" 来修复)
[root@gitclient git_data]# git merge linux
自动合并 NOTICE
冲突(内容):合并冲突于 NOTICE
自动合并失败,修正冲突然后提交修正的结果。

解决冲突

[root@git git_data]# vim NOTICE 

hello,git
hello,gitserver
hello,github
hello.error
hello,linux 

手工解决冲突

[root@gitclient git_data]# git commit -a -m "master merge"
[master eab809b] master merge

2.7.3 删除分支

因为之前已经合并了linux分支,所以现在看到它在列表中。 在这个列表中分支名字前没有 * 号的分支通常可以使用 git branch -d 删除掉;你已经将它们的工作整合到了另一个分支,所以并不会失去任何东西。

查看所有包含未合并工作的分支,可以运行 git branch --no-merged:

[root@gitclient git_data]# git branch --no-merged
[root@gitclient git_data]# git branch -d linux
已删除分支 linux(曾为 03cb675)。
[root@gitclient git_data]# git branch
* master

如果真的想要删除分支并丢掉那些工作,如同帮助信息里所指出的,可以使用 -D 选项强制删除它。

2.8 windwos上Git的使用

windows 上git软件网站 https://git-for-windows.github.io

软件下载地址:

https://github.com/git-for-windows/git/releases/download/v2.22.0.windows.1/Git-2.22.0-64-bit.exe

创建新的仓库

2.8 windwos上Git的使用

windows 上git软件网站 https://git-for-windows.github.io

软件下载地址:

https://github.com/git-for-windows/git/releases/download/v2.22.0.windows.1/Git-2.22.0-64-bit.exe

创建新的仓库

 定义仓库的路径

 添加用户信息(在 git bash中)

Crushlinux@DESKTOP-5JDO87L MINGW64 ~
$ git config  --global user.email "crushlinux@163.com"

Crushlinux@DESKTOP-5JDO87L MINGW64 ~
$ git config  --global user.name "crushlinux"

在git Gui 中添加用户信息,添加一次就可

 

 在页面中将数据配置好即可使用

 

GitHub托管服务

Github顾名思义是一个Git版本库的托管服务,是目前全球最大的软件仓库,拥有上百万的开发者用户,也是软件开发和寻找资源的最佳途径,Github不仅可以托管各种Git版本仓库,还拥有了更美观的Web界面,您的代码文件可以被任何人克隆,使得开发者为开源项贡献代码变得更加容易,当然也可以付费购买私有库,这样高性价比的私有库真的是帮助到了很多团队和企业。

注册GitHub

浏览器访问github官网 : GitHub: Let’s build from here · GitHub ,点击Sign up 进行注册

 填写个人信息,进行注册

 

 用户创建完成,可以创建新的项目

添加密钥

在github上添加一个新的ssh密钥

 

 获取Linux主机上的密钥

[root@gitserver git_data.git]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:WzmOBMvF4Sb8UN3yIF92PIfI9yl55z8zqxRfSTMvZGs root@gitserver
The key's randomart image is:
+---[RSA 2048]----+
|        o. o o . |
|     . +..+ * * .|
|      = =o * o+B.|
|     . O  ...=.+B|
|      o S +  .Eo+|
|       . = . .o.o|
|        o .  . ..|
|            .  +.|
|             ...=|
+----[SHA256]-----+
[root@gitserver git_data.git]# cat .ssh/id_rsa.pub
cat: .ssh/id_rsa.pub: 没有那个文件或目录
[root@gitserver git_data.git]# cd
[root@gitserver ~]# cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCi3qlKDvGTEu48Xyw4d78fBastQikAbQwKaf1cpOKAz9IsW2AdR8o21RPoH4J3hwl1aTX93zMpU5e7C7HLgP7dhXmLRk4pWIdZRNvvL/XL7i3AVVtIArxNCMuY1yJDHPpYBDFYd+BRzprNlpgcXoPIXXUAXZ8GQKmHrPXifTHxg7dCq2H9vpwIsnd/5vTtzn/q7ZLWTimolOxDtQJV8dHfdGmhE6WTHTcMq4bvDqIlJiZ7m37otKXmOCJukjZKB3TJt8qIHc1GIHMFLhMXWOq8Uirlvab1sKAZgrx7r3Vle/0Ko0GKZFSjZiQzP6SL7AM3jkPh82ur8vmRE/OoZTSD root@gitserver

 获得Windows主机密钥的方法

$ ssh-keygen.exe
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Crushlinux/.ssh/id_rsa):
Created directory '/c/Users/Crushlinux/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/Crushlinux/.ssh/id_rsa.
Your public key has been saved in /c/Users/Crushlinux/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:IHhPxTKtHlNZx0kqvob90V5tN8IM0VQT4hZ7yWBkznc Crushlinux@DESKTOP-5JDO87L
The key's randomart image is:
+---[RSA 3072]----+
|       o.o.o+X.+.|
|   .  o.=  o@ * o|
|  . o o=. .. B =E|
|   . ++o .  o o .|
|     ..oS  .     |
|      .o . .+  . |
|      . + . .+..+|
|       . . o ...o|
|          . .    |
+----[SHA256]-----+

Crushlinux@DESKTOP-5JDO87L MINGW64 ~
$ cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDHSP3L5h8irgkZe3snixWIDa4Q7JBQk0PzAoBQZPB1kgHuK5iZ4hY/mEqr/vegbWHdI0G5tYHRNi1PTnFrDSnjaIaFAoiuZt36aOUPmHpgmMHEV6hE3jeuoanK2LrIepVNvscwu15O8t2/dKc0An+x83miS5PRAojXj3BSQ1EsJ+LWmnl3W/UM6waVujmB7TihLYzPt8x2Mgi8jqvA6pgLwK/wdK+3pldSbTM3D3j8XLt2AXAPnkPa9C7HeUv7Tm905lbalRWmuhC/K2jc+WBXjbwc4xgjlLYtP5JjhGoecZ72CKCVVp1DN7Yz9Nb98rEzEsqTsvfvjVCrssmYDxSP2NRDWB8mkZw5XrKgnFRLuvpql2MPDAthWNYlZXH0RJ9yVHiqAN3E5PRuJhtFbSLJYRMNMmjkmptVwbjUYvpm3W9ZbAeP6z1ueJ9RGc1dwtBnYNN/PZlD/lqvJll+5t2c+V8xkStEEobQFg7aQSc+BU9ZAsdCL79veOHUtfiDh+k= Crushlinux@DESKTOP-5JDO87L

添加密钥 

 

 

创建仓库

准备工作已经完毕,右上角点击创建一个新的仓库

 

 

 在个人主机上进行推送测试

[root@gitserver ~]# mkdir crushlinux
[root@gitserver ~]# cd crushlinux
[root@gitserver crushlinux]# echo "# test" >> README.md
[root@gitserver crushlinux]# git init
已初始化空的 Git 仓库于 /root/crushlinux/.git/
[root@gitserver crushlinux]# git add README.md
[root@gitserver crushlinux]# git commit -m "first commit"
[master(根提交) e9ea086] first commit

[root@gitserver crushlinux]# git remote add origin git@github.com:sunkanglong/123.git
[root@gitserver crushlinux]#  git push -u origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 213 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: To git@github.com:sunkanglong/123.git
 * [new branch]      master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。

 

 创建新文件,进行拉取测试

 

 拉取测试文件

查看目录内容

[root@gitserver crushlinux]# pwd
/root/crushlinux
[root@gitserver crushlinux]# ls
README.md

进行拉取

[root@gitserver crushlinux]# git pull
remote: Enumerating objects: 7, done.
remote: Counting objects: 100% (7/7), done.
remote: Compressing objects: 100% (4/4), done.
Unpacking objects: 100% (6/6), done.
remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 0
来自 github.com:sunkanglong/123
   1d25061..373b771  master     -> origin/master
 * [新分支]          sunkanglong-patch-1 -> origin/sunkanglong-patch-1
更新 1d25061..373b771
Fast-forward
 test | 2 ++
 1 file changed, 2 insertions(+)
 create mode 100644 test

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/82785.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

星际争霸之小霸王之小蜜蜂(四)--事件监听-让小蜜蜂动起来

目录 前言 一、监听按键并作出判断 二、持续移动 三、左右移动 总结&#xff1a; 前言 今天开始正式操控我们的小蜜蜂了&#xff0c;之前学java的时候是有一个函数监听鼠标和键盘的操作&#xff0c;我们通过传过来不同的值进行判断&#xff0c;现在来看看python是否一样的实现…

lvs-DR

lvs-DR数据包流向分析 client向目标VIP发出请求。 DIR根据负载均衡算法一台active的RS&#xff08;RIR1&#xff09;&#xff0c;将RIP1所在的网卡的mac地址作为目标的mac地址&#xff0c;发送到局域网里。 RIRI在局域网中的收到这个帧&#xff0c;拆开后发现目标&#xff08…

【ARM】Day4 点亮LED灯

1. 思维导图 2. 自己编写代码实现三盏灯点亮 .text .global _start _start: /**********LED1&#xff0c;LED2,LED3点灯:PE10,PF10,PE8**************/ RCC_INIT:使能GPIOE组/GPIOF组控制器,通过RXCC_MP_AHB4ENSETR设置第[5:4]位写1,地址:0x50000A28[5:4]1ldr r0,0x50000A28 …

【SA8295P 源码分析】03 - SA8295P QNX Host上电开机流程分析

【SA8295P 源码分析】03 - SA8295P QNX Host上电开机流程分析 一、阶段1 固件开机自检 (SM BIST)&#xff1a;APPS PBL加载XBL后触发 INT_RESET进行Warm Reset二、阶段2 固件开机自检 (SM BIST)&#xff1a;加载TZ&#xff0c;初始Hypervisor&#xff0c;启动QNX Kernel&#x…

22年电赛B题——具有自动泊车功能的电动车——做题记录以及经验分享

前言 这道题目也是小车类电赛题目&#xff0c;十月份的电赛题&#xff0c;由于之前积累了一些经验&#xff0c;这道题目在做下来的感觉还行,但是我们看题目没有仔细审题&#xff0c;和题目要求有一些些偏差&#xff0c;但是基础大功能还是做出来辽&#xff0c;大家还是可以参考…

LeetCode283.移动零

这道题还是很简单的&#xff0c;我用的是双指针&#xff0c;左指针i从头开始遍历数组&#xff0c;右指针j是从i后面第一个数开始遍历&#xff0c;当左指针i等于0的时候&#xff0c;右指针j去寻找i右边第一个为0的数和i交换位置&#xff0c;交换完了就break内层循环&#xff0c;…

Linux网络编程:网络基础

文章目录&#xff1a; 一&#xff1a;协议 二&#xff1a;网络应用设计模式_BS模式和CS模式 三&#xff1a;网络分层模型&#xff08;OSI七层 TCP/IP四层&#xff09; 四&#xff1a;通信过程 五&#xff1a;协议格式 1.数据包封装 2.以太网帧格式和ARP数据报格式 …

【SA8295P 源码分析】06 - SA8295P XBL Loader 阶段 sbl1_main_ctl 函数代码分析

【SA8295P 源码分析】06 - SA8295P XBL Loader 阶段 sbl1_main_ctl 函数代码分析 一、XBL Loader 汇编源码分析1.1 解析 boot\QcomPkg\XBLLoader\XBLLoader.inf1.2 boot\QcomPkg\XBLDevPrg\ModuleEntryPoint.S&#xff1a;跳转 sbl1_entry 函数1.3 XBLLoaderLib\sbl1_Aarch64.s…

Communication Channels

沟通渠道 n * (n - 1) / 2 你1 相关方3 4 4 * 3 / 2 6 你1 相关方3 相关方1 5 5 * 4 / 2 10 人越多&#xff0c;沟通渠道越多&#xff0c;沟通成本理论越高

Roxy-Wi 命令执行漏洞复现

漏洞描述 Roxy-WI是开源的一款用于管理 Haproxy、Nginx 和 Keepalived 服务器的 Web 界面 Roxy-WI 6.1.1.0 之前的版本存在安全漏洞,该漏洞源于系统命令可以通过 subprocess_execute 函数远程运行,远程攻击者利用该漏洞可以执行远程代码。 免责声明 技术文章仅供参考,任…

jstack(Stack Trace for Java)Java堆栈跟踪工具

jstack&#xff08;Stack Trace for Java&#xff09;Java堆栈跟踪工具 jstack&#xff08;Stack Trace for Java&#xff09;命令用于生成虚拟机当前时刻的线程快照&#xff08;一般称为threaddump或者javacore文件&#xff09;。 线程快照就是当前虚拟机内每一条线程正在执…

使用预制体画刷在游戏场景中快速布置预制体、粒子特效等

有时候在使用tilemap的时候&#xff0c;会希望在场景中添加更复杂的对象。 在2d-extras中&#xff0c;加入了预制件笔刷&#xff08;Prefab Brush&#xff09;&#xff0c;可以将游戏物体预制体作为瓦片&#xff0c;来方便的在游戏场景中快速的绘制。可以自动适应游戏物体的位置…

GitHub 开启 2FA 双重身份验证的方法

最近收到GitHub官方发来的邮件&#xff0c;全是英文的&#xff0c;如图&#xff1a; 使用邮箱翻译插件&#xff0c;进行翻译&#xff0c;哦&#xff0c;原来是要我进行2FA注册&#xff0c;如果不注册&#xff0c;GitHub的访问将收到限制&#xff0c;所以还是得注册一下 然后怎…

【Redis基础篇】浅谈分布式系统(一)

一、浅谈分布式系统 1. 单机架构&#xff1a;只有一台服务器&#xff0c;这个服务器负责所有的工作。 如果遇到了服务器不够的场景怎么处理? 开源&#xff1a;增加更多的硬件资源节流&#xff1a;软件上的优化&#xff0c;优化代码等…一台服务器资源使用有限&#xff0c;就…

无涯教程-PHP - 常量声明

常量值不能更改。默认情况下&#xff0c;常量区分大小写。按照约定&#xff0c;常量标识符始终为大写。与变量不同&#xff0c;您不需要具有"$"的常量。 constant 函数 如名称所示&#xff0c;此函数将返回常量的值。 当您要检索常量的值但不知道其名称时&#xf…

WebGL的剪裁空间

推荐&#xff1a;使用NSDT场景编辑器助你快速搭建可二次编辑的3D应用场景 什么是WebGL的剪裁空间 WebGL的剪裁空间&#xff08;Clipping Space&#xff09;是在图形渲染过程中处理视图体积裁剪的一种特定空间。它是指定义在3D世界坐标系和屏幕窗口之间的虚拟空间&#xff0c;用…

宝塔部署Java+Vue前后端分离项目经验总结

前言 之前部署服务器都是在Linux环境下自己一点一点安装软件&#xff0c;听说用宝塔傻瓜式部署更快&#xff0c;这次浅浅尝试了一把。 确实简单&#xff01; 1、 买服务器 咋买服务器略&#xff0c;记得服务器装系统就装 Cent OS 7系列即可&#xff0c;我装的7.6。 2、创建…

css 实现svg动态图标效果

效果演示&#xff1a; 实现思路&#xff1a;主要是通过css的stroke相关属性来设置实现的。 html代码: <svgt"1692441666814"class"icon"viewBox"0 0 1024 1024"version"1.1"xmlns"http://www.w3.org/2000/svg"p-id"…

游戏msvcr120.dll丢失怎样修复?msvcr120.dll丢失常见原因

在尝试运行某些游戏时&#xff0c;我遇到了“msvcr120.dll丢失”的错误提示。经过一番调查和尝试&#xff0c;我成功地解决了这个问题。msvcr120.dll是Visual C Redistributable Package的一部分&#xff0c;它包含了许多运行Windows应用程序所需的库和函数。当游戏或其他应用程…

The internal rate of return (IRR)

内部收益率 NPV(Net Present Value)_spencer_tseng的博客-CSDN博客