【使用教程】【git和github的使用杂记】【环境虚拟机ubuntu18.04.6】
0 前言
- 每次都想着下次有时间学习一下git的使用方法,明日复明日,明日何其多,这次就开始接触一下git的使用方法
- 环境配置: 虚拟机18.04.6
- github
- 自己的Githun账号
- github官网
1 安装配置git
1.1 检查是否安装了git
git version
如果出现了:
bupo@bupo-vpc:~$ git version
git version 2.17.1
说明已经安装
1.2 如果未安装,那么就进行安装
sudo apt-get update //更新软件源列表
sudo apt install git
2 Git命令的使用(配置+上传+下载)
2.1 配置
2.1.1 Github账户配置
- 也就是配置Github账户的用户名和邮箱以用于之后的提交。
- 在电脑终端输入:
git config --global user.name "(这里填写你github上注册的名字,如xxx)xxx"
git config --global user.email "(这里填写你注册邮箱号,如aa@qq.com)aa@qq.com"
//之后:
git config --list
//回车就会显示你的注册名字和注册邮箱
输出:
bupo@bupo-vpc:~$ git config --list
user.name=xxx
user.email=aa@qq.com
2.1.2 SSH key的生成
- 你的PC如果要与GitHub进行通信,必须先生成一对SSH key,并且保证GitHub上存有你的公钥.
2.1.2.1 检查SSH
- 因为GitHub会用到SSH,因此需要在shell里检查是否可以连接到GitHub:
ssh -T git@github.com
我的出现了:
bupo@bupo-vpc:~$ ssh -T git@github.com
The authenticity of host 'github.com (20.205.243.166)' can't be established.
ECDSA key fingerprint is SHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM.
Are you sure you want to continue connecting (yes/no)? yes
输入yes,如果看到:
Warning: Permanently added 'github.com,20.205.243.166' (ECDSA) to the list of known hosts.
git@github.com: Permission denied (publickey).
说明可以连接
2.1.2.2 安装SSH keys
- 一定要在~/.ssh目录下操作
- 第一步:检查是否已井具有ssh keys,如果已经具有,则进行第二步,否则,进行第三步
cd ~/.ssh
ls
运行结果如下:
bupo@bupo-vpc:~$ cd ~/.ssh
bupo@bupo-vpc:~/.ssh$ ls
known_hosts
- 查看该目录下是否已经具有ssh keys,发现并没有
id_rsa
(私钥)和id_rsa.pub
(公钥)这两个文件,有的话就执行第二步 known_hosts
文件是 2.1.2.1 检查SSH刚才输入yse那一步骤生成的
- 第二步:备份并移除已经存在的ssh keys
mkdir key_backup
cp id_rsa* key_backup
rm id_rsa*
- 即将已经存在的
id_rsa
,id_rsa.pub
文件备份到key_backup
文件夹
- 第三步:执行如下命令(不具有ssh keys时)进行远程登录:
- 注意:""是需要的;在ssh目录下进行,可以无脑回车,默认是id_rsa
ssh-keygen -t rsa -C "你自己的github对应的邮箱地址,如aa@qq.com"
//之后连续按三次回车就行了。其中第一次需要输入文件名id_rsa
- 运行的时候会先让你输入输入文件名,输入
id_rsa
就可以 - 接着又会提示你输入两次密码(该密码是你push文件的时候要输入的密码,而不是github管理者的密码)。
- 也可以不输入密码,直接按回车。那么push的时候就不需要输入密码,直接提交到github上了
- 如下:
bupo@bupo-vpc:~/.ssh$ ssh-keygen -t rsa -C "aa@qq.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/bupo/.ssh/id_rsa): id_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_rsa.
Your public key has been saved in id_rsa.pub.
The key fingerprint is:
SHA256:uil+1NMjx5DhmhJ8VJSIjotz6JKUXK6/K30bVdQ8+2M aa@qq.com
The key's randomart image is:
+---[RSA 2048]----+
| . +ooo |
| . o + + |
| + . . + o |
| ..+ . = . |
|.o+. o =S+ . |
|++o.. =.+ = E |
|o+o +. + .. . |
|o+ ...oo |
|. o==++ |
+----[SHA256]-----+
- 完成后你的主目录下就会生成一个
/home/bupo/.ssh/
文件夹,其中包含着3个文件id_rsa
,id_rsa.pub
,known_hosts
,其中id_rsa
是私钥文件id_rsa.pub
就是公钥文件.
- 生成密匙代码(公匙文件)
- 在终端下,输入:
cat ~/.ssh/id_rsa.pub
- 你会发现出现了我们不认识的代码(公钥文件),把显示出来的代码(自己的,别展示)全都复制下来,之后登录github。
2.1.3 公匙文件的上传
- 下面的步骤就是在github下操作的,登陆自己的账号
- 在GitHub主页上点击头像,然后点击弹出菜单的“
settings
“项,并在“settings
“界面左侧菜单栏选择“SSH and GPG keys
“,然后点击“New SSH key
”
- 把从终端的复制的代码(公钥文件),粘贴在key表单中。title表单中,任意填写一个英文名字,之后,点击下方绿色选项。
注意:包括ssh-rsa
- 回到终端,输入如下命令,验证是否连接成功:
ssh -T git@github.com
如果询问yse/no,就输入yes,前面遇到过就不会遇到了
输出:
bupo@bupo-vpc:~/.ssh$ ssh -T git@github.com
Hi tapowanliwuyun! You've successfully authenticated, but GitHub does not provide shell access.
- 表示连接成功了。这就完成了使GitHub和本地PC可以实现通信的信任配置。
2.2 上传
2.2.1 在Github上创建一个仓库
- 在github中的配置同样可以参考
- 如何在github创建第一个项目也可以参考,这里我创建的项目名称为czy_reposotory
- 登录GIthub网站,在界面右上角点击”+”号创建新的仓库,注意这个仓库的名字要跟本地仓库一样,比如在这里,名字就是”czy_repository”,将相关信息都填好之后,Github上的仓库就创建好了。
- 点击
New respository
创建一个新的仓库
-
Private
:私有的仓库时需要钱的 -
Description
:是对仓库的描述 -
下面是初始化信息,用于对仓库进行更详细的描述
-
建议将Initialize this repository with的第一项勾选上创建后结果如下:
-
下面按步骤说说如何建立本地仓库和github上的存储库的联系
2.2.1 创建本地仓库
(1)在虚拟机上随便目录下创建一个文件夹存放要提交的文件,这个文件夹就叫做仓库(repository),我们假设将文件夹命名为”my_github"
这两个文件是之后模拟的要上传的文件,在这里也创建了
(2)进入这个文件夹,然后初始化
- 在想要git的项目文件夹中,输入以下指令:
cd my_github
git init
运行完后,会发现该目录下多了一个 .git 隐藏文件夹
如果你的没用,可以使用命令ctrl+h
查看隐藏文件
(3)配置git
- 设置用户名:
your name:是你的github用户名,就是id
git config --global user.name "your name"
- 设置用户邮箱
your email:你的注册邮箱
git config --global user.email "your email"
(4)添加要关联Github远程仓库
git remote add origin "git@github.com: ... ..."
引号内为个人仓库的地址,具体要看你想将文件夹中文件关联到哪个仓库中,地址如下图所示:
(5)添加.gitignore:.gitignore可以忽略你不想上传的文件,比如doc,temp_data,data_base等。
参考:(超实用)Ubuntu下配置和使用GitHub
(6)添加提交文件:在提交之前最好先拉取一下,查看第(9)步
- 每次更改文件也从这里执行
git add .
这是添加目录下所有文件,如果只是添加某个文件,就将文件名字列出。
托管完成后可以通过查看git本地仓库的状态,来查看所要上传的文件:
git status
(7)提交项目
git commit -m "描述信息"
-m参数后面跟着本次提交的描述信息,可以是修改了哪些代码,新增了哪些功能等等。
(8)上传项目
- 每次更新云端都必须执行6、7、8步,将本地文件上传到存储库
git push -u origin master
如果报错就强制上传,一般不用:
git push -u origin +master
- 如果是在新的电脑上上传更新,要提前进行拉取,否则报错
error: 无法推送一些引用到 'git@github.com:tapowanliwuyun/czy_repository.git'
提示:更新被拒绝,因为远程仓库包含您本地尚不存在的提交。这通常是因为另外
提示:一个仓库已向该引用进行了推送。再次推送前,您可能需要先整合远程变更
提示:(如 'git pull ...')。
提示:详见 'git push --help' 中的 'Note about fast-forwards' 小节。
解决方案看第九步
(9)拉取Github远程仓库master分支代码同步到本地
git pull origin master
- 这是新的电脑上上传更新,要提前进行拉取的,使用普通拉取会报错:
fatal: 拒绝合并无关的历史
,解决参考git pull “fatal: 拒绝合并无关的历史”:
git pull origin master --allow-unrelated-histories
默认情况下,git合并命令拒绝合并没有共同祖先的历史。当两个项目的历史独立地开始时,这个选项可以被用来覆盖这个安全。由于这是一个非常少见的情况,因此没有默认存在的配置变量,也不会添加。
(10)每次本地仓库更新都要执行:
git add .
git status
git commit -m "更新"
git push -u origin master
(11)取消git status的暂存文件
git reset HEAD
3 用git命令从分支拉取代码到本地
3.1 首先创建一个文件夹并初始化本地仓库
mkdir my_github
cd my_github
git init
- cap2是自己创建的文件夹,用于存放拉取的文件
- 实际操作如下
3.2 关联本地仓库和远程仓库
git remote add origin git@github.com:tapowanliwuyun/czy_repository.git
- origin表示远程库的名字,可以随意,一般默认为origin;
- origin后面表示远程仓库的真实地址,如下图所示。我这里使用的是SSH地址,当然也可以使用HTTPS地址,复制过来就行。
3.3 拉取分支代码
git fetch origin master
#可以使用git fetch origin 拉取全部
- master为我的分支名字,根据自己的分支决定。
- 有的同学可能会用git pull,git pull = git fetch + git merge,因为pull拉取会合并本地文件,可能会导致冲突。
- 拉取后的结果为:
3.4 创建本地分支,并切换到本地分支
- 经过上一步,在本地还看不到拉取的代码,需要手动创建一下:
- 不要使用git checkout -b develop,如果没有关联远程,会出问题!!!
git checkout -b master origin/master
git checkout
表示切换分支或恢复工作树文件。-b
表示进入git checkout之前执行git branch 创建分支操作。- 综合起来考虑,这一步的操作相当于执行checkout命令检出远程拉取分支,并进入该分支。
- 使用
ls
命令可以看到下拉的文件,并且使用git branch
命令可以看到当前停留的分支。
3.5 更新分支代码
- 如果远程分支上有更新,可以使用pull命令对本地进行更新,如果没有,则可以跳过此步骤。
git pull origin master
3.6 git 下载指定tag版本
3.6.1 方式一:直接进git网站手动下载安装包
直接看参考教程里面的
3.6.2 方式二:git clone
- 标准使用方法
git clone --branch [tags标签] [git地址]
- 例如:
git clone --branch 3.0 https://github.com/Little-Potato-1990/localization_in_auto_driving.git
3.7 本小节参考
如何使用git命令从分支拉取代码到本地,修改后提取代码到该分支,看这一篇就够了!
4 .gitignore的使用
- 参考:
4.1 使用说明
4.1.1 创建.gitignore文件
touch .gitignore
4.2 使用案例
4.2.1 cmakelists.txt的工程使用
# this is .gitignore file.
# 以下是忽略的文件
# 仅忽略当前路径下的build文件夹及其内所有的文件
build/
# 忽略当前这个.gitignore文件
# .gitignore
# 只删除第二级目录下的文件,如czy文件夹
*/czy/
4.3 所遇见的问题
4.3.1 Git配置.gitignore不生效解决方案
.gitignore
文件只会在第一次提交项目的时候写入缓存,也就是说如果你第一次提交项目时候忘记写.gitignore
文件,后来再补上是没有用的,.gitignore
文件是不生效的。因为在缓存中已经标记该项目不存在ignore文件了- 如果本地仓库文件已被跟踪,那么即使在 .gitignore 中设置了忽略,也不起作用,意思就是,如果想把已经在git仓库中的文件忽略掉,直接在.gitignore中添加是不可以的,需要运行先删除仓库的记录,之后在.gitignore配置即可生效
- 但是,这里修改缓存,提交之后,就相当于git仓库里面的文件全部删除,然后按照当地仓库重新提交,所以一定要考虑好
4.3.1.1 解决方案
- 方法一:清除全部缓存文件
- 这种方法会把所有的缓存都清掉!根目录下执行完后,所有文件都需要add一次才行:
git rm -r --cached .
git add .
git commit -m ".gitignore重写缓存成功"
git push -u origin master
- 方法二:清楚指定缓存文件
- 先删除仓库的记录,想让哪个生效,删哪个缓存就好:
git rm -r --cached 路径/文件名
- 参考:
5 常用指令
#1、克隆仓库代码到本地:
git clone "仓库地址"
#2、查看本地代码与远程代码有哪些不同
git diff
#3、//从远程拿到最新版本代码
#(提交代码时,忌讳直接提交。每次提交代码之前,
# 一定要保证本地的代码是最新的,即先执行git pull)
git pull
#4、查看本地代码属于仓库的哪个分支
git branch
#5、查看仓库都有哪些分支
git branch -a
#6、切换分支(注:不建议使用,最好给一个分支单独建立一个文件夹)
git checkout "分支名"
#7、克隆指定分支的仓库代码到本地
git clone -b "分支名" "仓库地址"
#8、上传本地文件到github的相应分支
git push -u origin 分支名(分支名通常为master)
#9、查看本地 git的状态,和本地 git中包含的文件
git status
#10、连接远程主机:
git remote add origin 远程仓库地址
6 参考文献
Ubuntu下安装Git以及面向Github的简单教程
(超实用)Ubuntu下配置和使用GitHub
github使用(建立环境,基本命令,历史版本回滚)