背景
一直用的svn,这段时间换了之后才发现git的强大功能。缺点就是可能上手比较难一点。
接下来就带你Git入门
Git是什么?
Git是目前世界上最先进的分布式版本控制系统
Git有什么特点?好用,好用
那什么是版本控制系统?版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理
安装
可以到官网Git查看相关信息
或者可以在GitHub上查看
官网有很详细的安装教程
二进制安装
二进制最新版下载地址
或者在GitHub下载
#开始安装
$ tar -zxf git-2.0.0.tar.gz
$ cd git-2.0.0
$ make configure
$ ./configure --prefix=/usr
$ make all doc info
$ sudo make install install-doc install-html install-info
#当你安装完后,可以使用git命令来测试
$ git clone git://git.kernel.org/pub/scm/git/git.git
yum安装
$ yum install git -y
yum安装的配置文件 ~/.gitconfig
针对当前用户
设定Git
安装好Git后,我们就可以进行初始化环境了
设定好的预设环境(Git账号地址)
Git附带有一个git config 的工具,我们可以随时随意修改预设配置
-
/etc/gitconfig
文件: 包含系统上每一个用户及他们仓库的通用配置。 如果使用带有--system
选项的git config
时,它会从此文件读写配置变量。 -
~/.gitconfig
或~/.config/git/config
文件:只针对当前用户。 可以传递--global
选项让 Git 读写此文件。 -
当前使用仓库的 Git 目录中的
config
文件(就是.git/config
):针对该仓库。
每一个级别覆盖上一级别的配置,所以 .git/config
的配置变量会覆盖 /etc/gitconfig
中的配置变量。
config help
[root@Git ~]# git --help
用法:git [--version] [--help] [-c name=value]
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p|--paginate|--no-pager] [--no-replace-objects] [--bare]
[--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
<command> [<args>]
最常用的 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 对象
命令 'git help -a' 和 'git help -g' 显示可用的子命令和一些指南。参见
'git help <命令>' 或 'git help <指南>' 来查看给定的子命令帮助或指南。
用户信息
当安装完 Git 应该做的第一件事就是设置你的用户名称与邮件地址。 这样做很重要,因为每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改:
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
再次强调,如果使用了 --global
选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git 都会使用那些信息。 当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 --global
选项的命令来配置。
文本编辑器
既然用户信息已经设置完毕,你可以配置默认文本编辑器了,当 Git 需要你输入信息时会调用它。 如果未配置,Git 会使用操作系统默认的文本编辑器,通常是 Vim。 如果你想使用不同的文本编辑器,例如 Emacs,可以这样做:
$ git config --global core.editor emacs
Warning |
Vim 和 Emacs 是像 Linux 与 Mac 等基于 Unix 的系统上开发者经常使用的流行的文本编辑器。 如果你对这些编辑器都不是很了解或者你使用的是 Windows 系统,那么可能需要搜索如何在 Git 中配置你最常用的编辑器。 如果你不设置编辑器并且不知道 Vim 或 Emacs 是什么,当它们运行起来后你可能会被弄糊涂、不知所措。 |
检查配置信息
如果想要检查你的配置,可以使用 git config --list
命令来列出所有 Git 当时能找到的配置。
$ git config --list
user.name=John Doe
user.email=johndoe@example.com
color.status=auto
color.branch=auto
color.interactive=auto
color.diff=auto
...
你可能会看到重复的变量名,因为 Git 会从不同的文件中读取同一个配置(例如:/etc/gitconfig
与 ~/.gitconfig
)。 这种情况下,Git 会使用它找到的每一个变量的最后一个配置。
你可以通过输入 git config <key>
: 来检查 Git 的某一项配置
$ git config user.name
John Doe
--取自Git-前的配置
预设后就可以使用功能Git了,但是还有个很烦的问题
每次push,pull都需要输入用户名密码,简直就是浪费生命
Git免密登录
- 使用全局命令定义密码保存
- 手动生成密码文件(也可以使用push或pull再次输入密码会自动生成在~/.git-credentials
#使用全局命令
[root@Git ~]# git config --global credential.helper store
#生成账户密码保存文件
[root@Git ~]# echo "https://username:password@email" > ~/.git-credentials
#查看gitconfig
[root@Git ~]# cat .gitconfig
[user]
name = username
email = email
[credential]
helper = store
在使用可以看到~/.gitconfig文件,会多了一项:
[credential]
helper = store
再次使用push或pull已经不需要密码了
但是也可以看到这个密码文件明文的哦,不安全
目测密文拿走了还是不安全。因为对称加密里面没有随机数。
如果真想安全可以考虑使用使用ssh的方式进行认证,然后用RSA非对称加密
使用ssh认证方式连接GitHub
GitHub默认使用https
当然也提供了ssh认证方式
查看当前使用模式
[root@Git ~]# git remote -v
origin https://github.com/Nedved-liao/kubernetes.1.30_CN (fetch)
origin https://github.com/Nedved-liao/kubernetes.1.30_CN (push)
命令移除HTTPS的方式
git remote rm origin
[root@Git ~]#git remote rm origin
添加SSH认证方式
git remote add origin Git地址
[root@Git ~]#git remote add origin git@github.com:Nedved-liao/kubernetes.1.30_CN.git
查看结果
[root@Git ~]#git remote -v
origin git@github.com:Nedved-liao/kubernetes.1.30_CN.git (fetch)
origin git@github.com:Nedved-liao/kubernetes.1.30_CN.git (push)
尝试push一下,
Please make sure you have the correct access rights
and the repository exists.
[root@Git ~]# git push origin master
Warning: Permanently added 'github.com,13.250.177.223' (RSA) to the list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
使用 ssh-keygen -t rsa -C "GitHubusername"
命令生成公钥,
公钥保存路径可以自定义(默认/root/.ssh/id_rsa)
Enter file in which to save the key (/root/.ssh/id_rsa): //在这填写的自定义路径
Enter passphrase //输入你自定义密码
Enter same passphrase again: //再次输入
[root@Git ~]# ssh-keygen -t rsa -C "Nedved-liao"
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/.git_rsa.
Your public key has been saved in /root/.git_rsa.pub.
The key fingerprint is:
SHA256:Xy2URzaPQceBAFZ8j7MvGARI3KH4ZvtSiRZdwd7J4d8 Nedved-liao
The key's randomart image is:
+---[RSA 2048]----+
| o.o+*+o.Boo|
| .ooo + B *.|
| . .. + B B .|
| .. . + X . |
| +S o o = .|
| oo.+ o o .E|
| ... . o . |
| .. . . . |
| .. . |
+----[SHA256]-----+
进入GitHub页面
setting-SSH AND GPG KEY
获取刚才生成的公钥信息先
[root@Git ~]# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAwezaC1yc2EAAAADAQABAAABAQDSorEvBERVenonyrxYWJP2iX2WXRvjssxFZh54RFYYVHMEg0MYuVDaITrOhCHcVPl04Ve5bDQCkVgzzixh12wriaoCPRuEsihz429sgxCyWZgw9284czkd2pNN1WsZ3lx14c+cdHmN2aoIAAuwubTUrBM2MKcTc+JG6YbY8Fd/fDAohwejMkxJ46AULsj1e8J8xdo8OyMniX9A4aHlwewg1dwerLB9n12JsyIZOqkFjQdbHt2qKTQBfIYx712bExBDPbv9zwerJL31pVsQpGCcUGwwYj5EtizjruJFEBD6kkH8+6ezLbDKPWXlgdWmHdjYrfItYjFZ9r7ez2Krwwqun Nedved-liao?
点击New ssh key 填写信息,把刚才cat 出来的信息全部复制粘贴到Key栏
点击add ssh key
再次使用git 拉取GitHub代码就不需要密码啦