git和github基础
一、shell和vi
1、什么是shell
(1)在计算机科学中,Shell俗称壳,用来区别于Kernel(核),是指“提供使用者使用界面”的软件(命令解析器),它能接收用户命令,然后调用相应的应用程序。。它类似于DOS下的command和后来的cmd.exe。
(2)Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
2、shell分类
(1)图形界面shell
通过提供友好的可视化界面,调用相应应用程序。
如windows系列操作系统,Linux系统上的图形化应用程序GNOME、KDE等。
(2)命令行shell
通过键盘输入特定命令的方式,调用相应的应用程序。
如windows系统的cmd.exe、Windows PowerShell,Linux系统的Bourne shell ( sh)、Bourne Again shell ( bash)等。
3、认识bash这个shell
在window系统下使用bash,需要一个软件(比如Git Bash),这个软件模拟集成了bash大部分命令。
各个 shell 的功能都差不多, Linux 默认使用 bash ,所以我们主要学习bash的使用。
(1)bash命令格式
命令 [-options] [参数]
如:ls -l test
,表示以列表的形式查看当前目录下面的test文件夹的内容
(2)bash常见命令
输入目录名称的时候,具有智能提示功能:
比如输入目录的首字母,
- 如果当前路径下面只有一个目录的首字母匹配将会自动补全
- 如果当前目录下面有多个目录的首字母跟它匹配,那么无法自动匹配,会显示能匹配的多个目录。要想匹配,需要多输入几个字母进行精确一些的匹配
例子:
想输入test:先输入t然后tab;如果有重复的就再次输入e再次tab
1、help:查看帮助
2、pwd:查看当前目录(路径全名称)
3、cd 切换目录
. 当前目录
.. 当前目录的上一级
cd ..:切换到当前目录的上一级目录
cd 直接子目录的名称:切换到当前目录的直接子目录
4、ls 获取当前目录下面的内容(子项,包含文件和文件夹)
ls -l:以列表的形式展示子项的详细信息
ls -list:相当于:ls -l
ls -a:在ls的基础上增加2个信息(./ ../)
ls -al:相当于-a和-l的合集
ls 也可以查看其它文件夹中的内容,只需要ls 文件夹的路径
ls案例:想以列表的形式查看当前目录下面的1文件夹的内容,实现的4种方法:
ls -l 1
ls -l ./1
ls -list 1
ls -list ./1
5、创建文件夹(目录):mkdir(make directory的缩写)
mkdir 文件夹的名称
6、删除文件夹(目录):rmdir
rmdir 文件夹的名称
只能删除空文件夹
7、创建文件:touch
touch 文件名称(注意携带文件的后缀)
创建多个文件:touch 文件1 文件2 文件3
8、删除文件:rm
删除文件:rm 文件名
删除多个文件:rm 文件1 文件2 文件3
如果输入了不存在的文件名,会报错
如果不想报错:
rm -f 文件名
9、删除整个文件夹中的内容(无论是空还是非空文件夹)
rm -r 文件夹的路径及文件夹名称
这种删除要谨慎,是不会放在回收站的,是完全删除
上面如果删除的文件的不存在,会报错
如果不想报错:
rm -rf 文件夹的路径及文件夹名称
10、移动文件:mv
只实现移动:
mv 原来的目录/旧名称 移动到的目录
实现移动+重命名的效果:
mv 原来的目录/旧名称 移动到的目录/新名称
只实现重命名的效果:
mv 原来的目录/旧名称 原来的目录/新名称
11、复制文件:cp
只复制:
cp 原来的目录/旧名称 新地址 -->在新地址产生一个原文件的拷贝
复制+重命名:
cp 原来的目录/旧名称 新路径/新名称
12、cat 查看文件内容
cat 文件夹目录/文件名
如 cat index.html
13、重定向:将输入结果写到指定文件内
原来输入的时候,比如打印当前目录下面的子项,会将子项直接输出在控制台中
如果希望将显示结果显示在指定的txt中,就可以使用重定向来实现
> 覆盖原文件的内容,写入要输出的结果
>> 在原文件的末尾追加要输出的结果
4、vi编辑器命令
1、在bash中进入vi编辑器
vi命令即可
2、退出vi编辑器:
:q
3、在vi编辑器中有输入内容再想退出:
:wq 保存并退出
4、打开指定文件用vi编辑器编辑:
vi 文件名称
5、默认打开vi编辑器的时候会自动进入命令行模式
从命令行模式进入输入模式:i或者a
从命令行模式进入底行模式:shift+:
6、输入模式:就像在windows中操作记事本一样直接进行各种编辑
退出输入模式:按下esc键
7、保存
退出vi编辑器: :q
保存文件::w
文件另存为::w 文件名称
保存并退出: :wq
:q如果有未保存的文件会提示是否需要保存
不保存直接强制退出::q!
二、版本控制系统
1、版本控制系统功能及优势
功能:管理代码
优势:
- 对于个人开发来说:
代码优化、代码更新时,没有版本控制软件的话,修改了哪些代码可能自己都不清楚,有了版本控制软件之后,可以将某个文件的新内容与旧内容进行对比,对比之后就知道这两段代码有何区别 - 对于团队开发来说:
(1)若干个开发人员项目合并时不用来回拷贝
(2)不同的人员开发的不同代码可能会发生冲突,通过版本控制软件可以查看
2、版本控制系统的分类
(1)本地版本控制系统:
可以完成个人开发的目的,但是功能比较单一,而且无法进行团队开发,所以现在几乎很少使用
(2)集中式版本控制系统:
集中式版本控制系统就是所有代码库都只保存在一个中心服务器并且为核心代码库,开发者使用的全部是它的离线拷贝,所有提交最终都要汇总到中心服务器,并且可以影响接下来的全部离线拷贝。
适用于个人开发,也适用于团队开发
优缺点:
优点:很好解决了多人协同开发的问题
缺点:
(1)如果集中管理的服务器出现故障,将会导致数据(版本)丢失的风险
(2)协同开发者从集中服务器中更新数据时,严重依赖网络,如果网络不佳,也给开发带来诸多不便。
代表:SVN(后端常用)
(3)分布式版本控制系统
分布式版本控制系统就是所有代码都可以随意从一个开发者电脑分发到其他开发者电脑,并且各自平行、互不干扰,本地提交只影响本地代码库,只有推送到指定的中心服务器(意义上的,和SVN的实质性的不同,仅仅是用来方便“交换”大家的修改),并且其他开发者更新下来后才会受影响。
适用于个人开发,也适用于团队开发
代表:Git(前端和node常用)
三、Git前期准备
1、git本地工作原理:
image.png(1)在工作目录中修改文件
(2)先将代码从工作区移到暂存区
(3)再将代码从暂存区移到主仓库中
注意:Git本地仓库指的是开发者计算机中的仓库。
2、Git安装
(1)Window安装
http://git-scm.com/download/win下载Git客户端软件,和普通软件安装方式一样。
(2)Linux安装
CentOS发行版:sudo yum install git
Ubuntu发行版:sudo apt-get install git
(3)Mac安装
打开Terminal直接输入git命令,会自动提示,按提示引导安装即可。
四、Git基础
这里全是git本地操作
1、配置用户
配置用户的意义在于记录开发者信息,以便在版本控制记录开发者的操作行为
配置当前仓库
git config user.name "自已的名字"
git config user.email "自已的邮箱地址"
配置本机所有仓库
git config --global user.name "自已的名字"
git config --global user.email "自已的邮箱地址"
image.png
其中--global
的作用是配置当前用户所有仓库,这样的情况下配置1次,它会全局共享,之后在其他仓库使用时不需要在配置了。
如果想要更改名字和邮箱,再次设置即可
2、初始化仓库
想要利用git进行版本控制,需要将现有项目初始化为一个仓库,或者将一个已有的使用git进行版本控制的仓库克隆到本地。
git init
会在当前项目目录中创建一个名为.git的隐藏目录,这个目录包含了暂存区和仓库两个区域,有了这个隐藏目录就可以使用git来管理项目了,通过ls -al
可以查看。
git init
image.png
3、查看文件状态
初始化仓库后便可以进行开发了,进入到刚刚创建好并初始为仓库的目录,添加我们开发需要的文件
通过git status
可以检测当前仓库文件的状态,
注意:
会忽略掉空目录
如果当前目录下面的指定文件夹下面也有一些未追踪的文件,也会提示该文件夹有相关内容
Untracked files:以下都是未追踪的文件
Changes to be committed:以下都是位于暂存区的文件
modified:表示这是一个已修改的文件
Git中文件的几种状态:
(1)未标记(未追踪)
image.png在git管理的目录中,创建文件、修改文件、删除文件这些操作都不会被记录,要想文件被记录必须通过某个命令
Untracked files:里面都是未追踪的文件
(2)已提交
该文件已经被git管理起来,接下来对该文件进行相关操作就可以实现版本控制的效果
(3)已修改
某个文件已经被提交到暂存区过了,如果对文件进行修改,该文件的状态就是已修改
image.png
modified:表示这是一个已修改的文件
(4)已暂存
某个文件已经被提交到暂存区了,并且没有修改,修改了就是已修改状态
4、设置文件不让git管理
(1)在.git所在目录(和.git平级,而不是在.git里面)添加一个文件,叫 .gitignore
image.png无法在文件夹中直接添加,会报错
image.png需要用git命令添加
(2)打开.gitignore进行编辑,一行一行的添加不需要git管理的文件
比如不想让git管理文件1.txt
image.png
修改前:
image.png
在.gitignore添加1.txt后:
image.png
因为.gitignore是为了1.txt不让git管理而添加的,也不想让git管理.gitignore,所以要加上.gitignore
在.gitignore添加.gitignore后:
image.png
在.gitignore添加如下内容:
image.png
git不会管理1.txt、.gitignore、css文件夹下的2.txt
5、添加文件到暂存区
把已开发的部分暂存起来等待提交
git add 文件路径/文件名
git add *
git add -A
“*”或-A代表提交本工作区内的全部内容
可以将一个未追踪的文件放入暂存区,也可以将一个已修改的文件放入暂存区
image.png
注意:
(1)可以表示添加文件
(2)可以表示修改文件
(3)可以表示删除文件
综上:git add
表示把工作区内的变化添加到暂存区
6、撤销已经添加到暂存区的文件
(1)一个文件已经放入暂存区,从暂存区恢复到修改前的状态
工作区里已经是修改的文件,希望从暂存区恢复该文件到修改前的状态
git checkout -- 文件路径/文件名
注意:-- 文件路径/文件名 中间有个空格
image.png
注意:将文件从暂存区取出,并替换工作区文件
(2)一个文件已经添加到暂存区,并且该文件没有被修改过,可以从暂存区取出
git reset HEAD 文件路径/文件名
image.png
注意:只是将文件从暂存区中取出,但是并不用
7、将暂存区的内容放入本地主仓库(提交文件)
将暂存区被标记成绿色的文件,全部提交到本地仓库存储
每一次提交到本地仓库都必须输入备注信息
(1)git commit -m 备注的信息
git commit -m 备注的信息
image.png
(2)git commit+vi编辑器
如果不输入备注信息会提示一个vi编辑器,在vi编辑器中提示输入备注信息
git commit
会自动跳转到vi编辑器:
输入备注信息:如“第2次修改”
image.png
按esc退出输入状态,输入:w保存,输入:q退出vi编辑器,得到:
image.png
8、删除本地仓库中保存的文件
(1)第一种方法:
git rm xxx
git commit -m
(2)第二种方法:
rm xxx
git add xxx
git commit -m
9、查看日志记录
(1)查看提交日志详细信息
git log
image.png
(2)查看提交日志简略显示
git log --oneline
image.png
(3)查看历史记录
这些历史记录包括:每一次提交的信息;以及每一次版本回滚的操作
git reflog
image.png
10、版本回退(时光倒流)
通过查看提交历史中的某个版本的commit 的唯一标记值可以回到之前某一次的提交
将文件从本地主仓库中恢复,取出来的文件替换工作区的文件
(1)回到以前的“第2次修改#”版本
git reset --hard 提交的版本号(可以只写前几位)
image.png
操作前:
image.png
操作后:
image.png
(2)再次回到“第4次更新”版本
先通过查看日志记录git reflog
,找到“第4次更新”版本的唯一标记号
注意:此时通过git log
找不到“第4次更新”版本的唯一标记号
再通过git reset --hard 提交的版本号
回到“第4次更新”版本
11、比较文件差异
(1) git diff
先比较工作目录和暂存区的代码比较
如果暂存区没有文件,则将工作区和最近一次提交的代码进行对比
(2) git diff --cached
将暂存区的文件和工作区的文件进行对比
github是一个基于git的代码托管平台(免费用户只能建公共仓库)
五、Github入门
1、注册登录
image.png注意:注册时username和email address都可以当作账号,username不可更改
2、创建共享仓库
(1)
image.png
(2)填写仓库资料
image.png
(3)
没有勾选创建README
建完之后
勾选创建README
建完之后
3、配置SSH连接自己的github
SSH知识在下面
(1)在本地生成秘钥(ssh key)
如果有,在:c/用户/你的用户名/.ssh
如果没有:
image.png先在 git bash中输入
$ ssh-keygen -t rsa -C 你在github上注册的邮箱
,一路回车跳过
完成后,在c/用户/你的用户名/.ssh的文件夹中,id_rsa.pub为公钥
(2)找到秘钥生成的目录,将公钥放到Github中
image.pnga、github点击右上角人物头像
b、选择settings菜单
c、选择`SSH and GPG keys`
d、点击`New SSH key`
e、输入ssh的名称,将公钥(c/用户/你的用户名/.ssh里的id_rsa.pub的内容)放入其中,保存即可
(3)在本地测试看看是否成功
为了验证是否成功,在git bash下输入:$ ssh -T git@github.com
如果是第一次的,会提示是否continue,输入yes看到:
You've successfully authenticated, but GitHub does not provide shell access 。这就表示已成功连上github。
4、此时可以检出仓库(即下载项目)
将github上某个仓库的内容下载到本地
(1)存放到当前目录
会自动在当前目录创建一个名为github仓库名的文件夹,里面是项目内容
git clone 远程仓库地址
(2)存放到本地指定文件夹
会把项目内容直接放在这个文件夹中
git clone 远程仓库地址 本地文件夹路径/文件名
比如:
桌面文件git001为当前工作区,下面语句会将项目下载到桌面的1文件夹(可以下在当前工作区外)
git clone https://github.com/CrazyGuolin/test001.git ../1
5、将本地仓库的代码提交到github中
注意:第一次提交到github的时候会提示你输入github的用户名和密码
git push 远程服务器仓库的地址 master
或
git remote add origin 远程服务器仓库的地址
git push origin master
注意:如果在提交代码的时候github中已经含有内容,最好先更新代码,使用:
git pull --rebase origin master
6、git远程操作
Git有很多优势,其中之一就是远程操作非常简便。
Git远程操作的5个命令补充
详情参考:阮一峰日志
http://www.ruanyifeng.com/blog/2014/06/git_remote.html
(1)git clone
远程操作的第一步,通常是从远程主机克隆一个版本库
(2)git remote
为了便于管理,Git要求每个远程主机都必须指定一个主机名。git remote命令就用于管理主机名。
(3)git fetch
一旦远程主机的版本库有了更新(Git术语叫做commit),需要将这些更新取回本地,这时就要用到
git fetch
命令
(4)git pull
git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。它的完整格式稍稍有点复杂
(5)git push
git push命令用于将本地分支的更新,推送到远程主机。
六、分支
参考:菜鸟教程
http://www.runoob.com/git/git-branch.html
七、几个关键词:shell、bash、git 、git bash、git shell
(1)shell
Shell 是linux、unix系统的外壳,是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
shell分为命令行shell和图形界面shell。
(2)bash
是命令行shell的一种,最常用的shell之一。
(3)git
Git 是为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件
分布式版本控制系统的代表
支持该工具的网站有Github、BitBucket、Gitorious、国内的osChina仓库、csdn仓库等等。
(4)git bash
方便在windows下使用git命令的模拟终端(windows自带的cmd功能太弱),linux、unix可以直接使用git。
Linux 默认使用 bash;在window系统下使用bash,需要一个软件,git bash可以看作这个软件
(5)git shell
它是安装了git的shell,bash是一种shell。