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
-
生成两组秘钥
在.ssh中生成2组秘钥,并设置一个config文件 -
制作批处理文件
在.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
- 把
.ssh\bat
所在这个目录加入到windows的path路径中 - 使用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