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 3月 12 19:44 ./
drwxr-xr-x 1 zhangshixing 197121 0 3月 12 19:44 ../
drwxr-xr-x 1 zhangshixing 197121 0 3月 12 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)