Git基础教程

Git

基本概念

所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。

基本操作

  • 创建版本库
git init

告诉你是一个空的仓库(empty Git repository),当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的

第一步:用命令git add告诉Git,把文件添加到仓库

git add readme.txt

第二步:用命令git commit告诉Git,把文件提交到仓库

git commit -m "wrote a readme file"

简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

嫌麻烦不想输入-m "xxx"行不行?确实有办法可以这么干,但是强烈不建议你这么干,因为输入说明对自己对别人阅读都很重要。实在不想输入说明的童鞋请自行Google,我不告诉你这个参数。

git commit命令执行成功后会告诉你,1 file changed:1个文件被改动(我们新添加的readme.txt文件);2 insertions:插入了两行内容(readme.txt有两行内容)。

为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:

git add file1.txt
git add file2.txt file3.txt
git commit -m "add 3 files."
  • 添加远程库
git remote add origin git@github.com:michaelliao/learngit.git

origin是远程库的名字,这是Git默认的叫法,也可以改成别的

  • 查看remote数量
git remote -v
  • 删除remote其中某一个
git remote remove <name>
git remote rm <name>
  • 把本地库的所有内容推送到远程库上
git push -u origin master
把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令

后面就可以通过如下命令:

git push origin master

从github/gitee上克隆、修改和更新项目

本地初始化

git init

将项目从github/gitee或者服务器上克隆下来

git clone url

未修改项目前,查看项目状态

git status

将文件修改提交到本地暂存区,命令:git add file,file 为修改文件名

#以新增READ.md为例
$ git add README.md

#或者全部添加来看
$ git add -A

注:每次修改后的文件,都必须添加到本地暂存区后,才能更新到项目上

提交当前工作空间的修改内容,命令:git commit -m "修改",引号里面是提交信息,自己可以填写其他内容

如果下次还要更新项目,直接git pull即可,因为本地空间和服务器或github的通道通过git clone已经建立

测试配置是否成功

ssh -T git@github.com
ssh -T git@gitee.com

生成密钥

解决同一台电脑生成两份或多份ssh密钥、公钥映射两个或多个GitHub账号

使用ssh-keygen生成2组不同邮箱的秘钥对

ssh-keygen -t rsa -C "934127550@qq.com" -f ~/.ssh/id_rsa_self

ssh-keygen -t rsa -C "wangshun_npu@163.com" -f ~/.ssh/id_rsa_work

通过ssh-add添加密钥至ssh-agent中

ssh-add ~/.ssh/id_rsa_self

ssh-add ~/.ssh/id_rsa_work

使用config方法解决一台电脑配置两个gitee账号的问题

配置多用户的 SSH Keys

参考链接

  1. 生成两组秘钥
    在.ssh中生成2组秘钥,并设置一个config文件

  2. 制作批处理文件
    在.ssh/bat中设置两个.bat批处理文件

目录结构大致是这样

.ssh
│  config
│  id_rsa_self
│  id_rsa_self.pub
│  id_rsa_work
│  id_rsa_work.pub
│  known_hosts
│
└─bat
    self.bat
    self.config
    work.bat
    work.config

self 版本

以self为例编写脚本
self.config内容如下

# 个人的gitee公钥
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
# 指定特定的ssh私钥文件
IdentityFile ~/.ssh/id_rsa_self

该文件分为多个用户配置,每个用户配置包含以下几个配置项:

  • Host:仓库网站的别名,随意取
  • HostName:仓库网站的域名(PS:IP 地址应该也可以)
  • IdentityFile:私钥的绝对路径

self.bat内容如下

copy /d %~dp0\self.config /d %~dp0..\config /Y

work 版本

# 个人的gitee公钥
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
# 指定特定的ssh私钥文件
IdentityFile ~/.ssh/id_rsa_work
copy /d %~dp0\work.config /d %~dp0..\config /Y
  1. .ssh\bat 所在这个目录加入到windows的path路径中
  2. 使用cmd命令行打开,需要工作仓库的时候,在cmd命令行内部输入"work"命令。需要切换回个人的时候,就在cmd命令行输入"self"命令就行了

配置多用户的用户名和邮箱

一般来说,安装好 git 后,我们都会配置一个全局的 config 信息,就像这样:

git config --global user.name "wangshun" // 配置全局用户名,如 Github 上注册的用户名
git config --global user.email "934127550@qq.com" // 配置全局邮箱,如 Github 上配置的邮箱

在正式配置之前,我们先得把全局配置给清除掉(如果你配置过的话),执行命令:

git config --global --unset user.name
git config --global --unset user.email

git 的配置分为三级别,System —> Global —>Local。System 即系统级别,Global 为配置的全局,Local 为仓库级别,优先级是 Local > Global > System。

因为我们并没有给仓库配置用户名,又在一开始清除了全局的用户名,因此此时你提交的话,就会使用 System 级别的用户名,也就是你的系统主机名了。

因此我们需要为每个仓库单独配置用户名信息,假设我们要配置 github 的某个仓库,进入该仓库后,执行:

git config --local user.name "wangshun"
git config --local user.email "934127550@qq.com"

执行完毕后,通过以下命令查看本仓库的所有配置信息:

git config --local --list
上一篇:运维免密码登陆ssh输入一次密码管8小时


下一篇:通过ssh管道连接内网数据库