您现在的位置是:首页 >技术杂谈 >Git基本知识网站首页技术杂谈

Git基本知识

zsx_yiyiyi 2024-09-23 12:01:06
简介Git基本知识

Git基本知识

1、Git 资料参考

Git 官网:https://book.git-scm.com/

Git 完整命令手册地址:http://git-scm.com/docs

Git 中文文档:https://git-scm.com/book/zh/v2

2、Git安装

Git 各平台安装包下载地址为:

http://git-scm.com/downloads

2.1 Windows下的安装

安装包下载地址:

https://github.com/git-for-windows/git/releases/

https://gitforwindows.org/

官网慢,可以用国内的镜像:

https://npm.taobao.org/mirrors/git-for-windows/

这里选择 Git-2.34.0-64-bit

安装像普通软件安装一样,点击下一步即可。

安装完成之后启动 cmd 查看安装情况:

$ git --version
git version 2.34.0.windows.1

完成安装之后,就可以使用命令行的 git 工具(已经自带了 ssh 客户端)了,另外还有一个图形界面的 Git 项目管

理工具。在开始菜单里找到Git -> Git Bash,会弹出 Git 命令窗口,你可以在该窗口进行 Git 操作。

git bash 是命令行工具,git gui 是图形化工具。

2.2 Centos下的安装

2.2.1 命令安装

$ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
$ yum -y install git-core
$ git version
git version 1.8.3.1

2.2.2 源码安装

1、git源码下载地址

https://mirrors.edge.kernel.org/pub/software/scm/git/

https://github.com/git/git/releases

https://www.kernel.org/pub/software/scm/git/

下载源码包,这里选择 git-2.34.0.tar.gz

2、移除旧版本git

centos自带Git,7.x版本自带 git 1.8.3.1, 安装新版本之前需要使用 yum remove git卸载(安装后卸载也可

以)。

# 查看自带的版本
$ git --version
git version 1.8.3.1

# 移除原来的版本
$ yum remove git

3、安装所需软件包

$ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel 
$ yum install gcc-c++ perl-ExtUtils-MakeMaker 
$ yum -y install autoconf

4、下载&安装

$ cd /home/zhangshixing
$ wget https://www.kernel.org/pub/software/scm/git/git-2.34.0.tar.gz

或者下载以后上传到服务器。

5、解压

$ tar xf git-2.34.0.tar.gz

6、配置编译安装

$ cd git-2.34.0
$ make configure
# 配置目录
$ ./configure --prefix=/usr/git
$ make profix=/usr/git
$ make install

7、加入环境变量

$ echo "export PATH=$PATH:/usr/git/bin" >> /etc/profile
$ source /etc/profile

8、检查版本

$ git --version 
git version 2.34.0

3、Git 文件的状态

在这里插入图片描述

  • UnTracked:未跟踪,此文件在文件夹中,但并没有加入到 git 库,不参与版本控制,通过 git add 状态变为

    Staged

  • UnModify:文件已经入库,未修改, 即版本库中的文件快照内容与文件夹中完全一致。这种类型的文件有两

    种去处,如果它被修改,而变为 Modified。如果使用 git rm 移出版本库,则成为 UnTracked 文件。

  • Modified:文件已修改,仅仅是修改,并没有进行其他的操作。这个文件也有两个去处,通过 git add

    进入暂存 staged 状态,使用 git checkout 则丢弃修改过,返回到 unmodify 状态,这个git checkout

    即从库中取出文件,覆盖当前修改。

  • Staged:暂存状态,执行 git commit 则将修改同步到库中,这时库中的文件和本地文件又变为一致,文件

    UnModify状态。执行 git reset 取消暂存,文件状态为 Modified

4、添加公钥至github

使用以下命令生成 SSH Key:

$ ssh-keygen -t rsa -C "youremail@example.com"
# 例如
$ ssh-keygen -t rsa -C "2420309401@qq.com"

后面的 your_email@youremail.com 改为你注册的邮箱,之后会要求确认路径和输入密码,我们这使用默认的一

路回车就行。

成功的话会在 ~/ 下生成 .ssh 文件夹,进去打开 id_rsa.pub,复制里面的 key

回到 github 上,进入 Account => Settings (账户配置)。

左边选择 SSH and GPG keys,然后点击 New SSH key 按钮,title 设置标题,可以随便填,粘贴在你电脑上生

成的 key,选择Authentication Keys,然后点击 Add SSH key

为了验证是否成功,输入以下命令:

$ ssh -T git@github.com
Hi zsx242030! You've successfully authenticated, but            GitHub does not provide shell access.

以上命令说明我们已成功连上 Github。

如果 ssh 访问 GitHub 出错:

$ ssh -T git@github.com
The authenticity of host 'github.com (140.82.118.4)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? 
Host key verification failed.

解决办法:将 GitHub 添加到信任主机列表后,可以成功访问。

$ ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
# github.com:22 SSH-2.0-babeld-d45c1532

$ ssh -T git@github.com
Warning: Permanently added the RSA host key for IP address '140.82.118.4' to the list of known hosts.
Hi earthnorth! You've successfully authenticated, but GitHub does not provide shell access.

添加至 gitee 的方法也一样。

5、同时关联Github和Gitee

使用多个远程库时,我们要注意,git 给远程库起的默认名称是 origin,如果有多个远程库,我们需要用不同的名

称来标识不同的远程库。

以 gitdemo 本地库为例,首先我们先删除已关联的名为 origin 的远程库:

# 本地文件
$ ls
README.md

$ cat README.md
# Git测试
$ git remote rm origin

然后,先关联 GitHub 的远程库:

$ git remote add github git@github.com:zsx242030/gitdemo.git

注意,远程库的名称叫 github,不叫 origin 了。

接着,再关联 Gitee 的远程库:

$ git remote add gitee git@gitee.com:zsx242030/gitdemo.git

同样注意,远程库的名称叫 gitee,不叫 origin。

现在,我们用 git remote -v 查看远程库信息,可以看到两个远程库:

$ git remote -v
gitee   git@gitee.com:zsx242030/gitdemo.git (fetch)
gitee   git@gitee.com:zsx242030/gitdemo.git (push)
github  git@github.com:zsx242030/gitdemo.git (fetch)
github  git@github.com:zsx242030/gitdemo.git (push)

如果要推送到 GitHub,使用命令:

$ git fetch github
From github.com:zsx242030/gitdemo
 * [new branch]      master     -> github/master

$ git merge github/master --allow-unrelated-histories
Already up-to-date.

$ git add .

$ git commit -m "github仓库提交文件"
On branch master
nothing to commit, working tree clean

$ git push github master
Everything up-to-date

如果要推送到 Gitee,使用命令:

$ git fetch gitee

$ git merge gitee/master --allow-unrelated-histories
merge: gitee/master - not something we can merge

$ git add .

$ git commit -m "gitee仓库提交文件"
On branch master
nothing to commit, working tree clean

$ git push gitee master
Counting objects: 9, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (9/9), 1.14 KiB | 166.00 KiB/s, done.
Total 9 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.4]
To gitee.com:zsx242030/gitdemo.git
 * [new branch]      master -> master

这样一来,我们的本地库就可以同时与多个远程库互相同步。

6、Git服务器搭建

我们可以自己搭建一台 Git 服务器作为私有仓库使用。

接下来我们将以 Centos 为例搭建 Git 服务器。

6.1 安装Git

请参考上面的安装,查看版本:

$ git --version
git version 2.34.0

接下来我们创建一个 git 用户组和用户,用来运行 git 服务:

$ groupadd git
$ useradd git -g git

6.2 创建证书登录

收集所有需要登录的用户(进行git clone的用户)的公钥,公钥位于id_rsa.pub文件中,把我们的公钥导入到

/home/git/.ssh/authorized_keys文件里,一行一个。

如果没有该文件创建它:

$ cd /home/git/
$ mkdir .ssh
$ chmod 755 .ssh
$ touch .ssh/authorized_keys
$ chmod 644 .ssh/authorized_keys
$ vim .ssh/authorized_keys
# 输入公钥,和Github中Gitee中生成的一样

6.3 初始化Git仓库

首先我们选定一个目录作为 Git 仓库,假定是/home/gitrepo/zsxtest.git,在/home/gitrepo目录下输入命

令:

$ cd /home
$ mkdir gitrepo
$ chown git:git gitrepo/
$ cd gitrepo
$ git init --bare zsxtest.git

以上命令 Git 创建一个空仓库,服务器上的 Git 仓库通常都以 .git 结尾。然后,把仓库所属用户改为git:

$ chown -R git:git zsxtest.git

6.4 克隆仓库

$ mkdir zsxtest

$ cd zsxtest/

$ git clone git@192.168.58.195:/home/gitrepo/zsxtest.git
Cloning into 'zsxtest'...
warning: You appear to have cloned an empty repository.

$ cd zsxtest/

$ ls -alh
total 4.0K
drwxr-xr-x 1 zhangshixing 197121 0 312 19:44 ./
drwxr-xr-x 1 zhangshixing 197121 0 312 19:44 ../
drwxr-xr-x 1 zhangshixing 197121 0 312 19:44 .git/

$ git config user.name "zsx242030"

$ git config user.email "2420309401@qq.com"

$ echo hello > hello.txt

$ git add hello.txt
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working directory.

$ git commit -m "add hello.txt"
[master (root-commit) 576a7d5] add hello.txt
 1 file changed, 1 insertion(+)
 create mode 100644 hello.txt

$ git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 216 bytes | 216.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To 192.168.58.195:/home/gitrepo/zsxtest.git
 * [new branch]      master -> master
 
$ git log
commit 576a7d597804251445d5a92c24f053312c0f89f0 (HEAD -> master, origin/master)
Author: zsx242030 <2420309401@qq.com>
Date:   Sun Mar 12 19:46:40 2023 +0800

    add hello.txt

192.168.58.195 为 Git 所在服务器 ip ,你需要将其修改为你自己的 Git 服务 ip。

这样我们的 Git 服务器安装就完成。

7、Git常用标志的意义

git 中 A C D M R T U X 分别解释:

A:你本地新增的文件,服务器上没有

C:文件的一个新拷贝

D:你本地删除的文件,服务器上还在

M:文件的内容或者mode被修改了

R:文件名被修改了

T:文件的类型被修改了

U:文件没有被合并(你需要完成合并才能进行提交)

X:未知状态(很可能是遇到git的bug了,你可以向git提交bug report)

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。