第1章:Git的起源
自由主义教皇“林纳斯·托瓦兹”
Git是由Linux之父Linus开发的,在2005年4月3号开始开发,仅四天时间Git就可以投入使用了。到同年6月份,Linux已经在使用Git管理代码了。
Linux版本管理最早是通过手工合并代码的方式进行的,不使用CVS的原因就是Linus坚决反对这种集中式的版本管理工具。而迫于其他开发者的压力,Linus最后决定使用BitKeeper一种分布式的版本管理工具。与集中式不同,使用分布式的版本管理工具每个人都可以在本地进行版本的管理,如日志提交、代码提交、创建tag和分支、合并分支等等操作。
而在2005年4月,Andrew Tridgell 为了开发一个可以与BitKeeper交互的工具,试图反编译BitKeeper。这让开发该软件的公司BitMover得知并取消了Linux社区免费试用BitKeeper的权利。这也成为了Linus开发Git的契机,促进了Git这一伟大作品的诞生。
第2章:Git的使用
1.Git的安装
Windows版的Git,从https://git-scm.com/download/win下载然后按默认选项安装即可。
安装完成后,右键打开菜单栏找到“Git”->“Git Bash Here”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!
默认git窗口背景是黑色的,字体也比较小,可以通过右键设置
安装完成后,还需要最后一步设置,在命令行输入:
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
git config user.name 查看配置的姓名
git config user.email 查看配置的邮箱
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。
git配置的文件会自动保存在:c盘----用户----asus----.gitconfig
2. Linux的几条命令
mkdir xxx 新建文件夹
vi x.txt 新建文件
输入 i 进入编辑模式
ESC + :+ wq 保存并退出
ESC + :+ q! 不保存并退出
cd xxx 进入xxx目录
cd .. 返回上一级目录
ls 列出当前文件夹中所有文件
pwd 显示当前目录
cat x.txt 显示文件内容
clear 清屏
3. 创建版本库
git init 初始化版本库
创建成功会提示 Initialized empty Git repository in c:/Users/xxx/Desktop/demogit/.git/
初始化执行git命令,会提示fatal: Not a git repository (or any of the parent directories): .git
你还会发现目录上多出一个.git的文件夹,这个文件夹是Git来跟踪管理版本库的,不要去修改和删除这个文件里的内容。
git add x.xx 添加指定文件到暂存区中
不会有任何提示,但是提交成功了
失败会提示fatal: pathspec 'x.txt' did not match any files
可能会出现警告,由于linux和window的换行符不一致导致的。
警告内容:warning: LF will be replaced by CRLF in a.txt.
解决方式:git config --global core.autocrlf false
怎么查看文件有没有添加成功呢?
git status
1. 红色表示在工作区。
2.绿色表示在暂存区。
3. 没有任何显示代表所有文件位于版本区。
git commit -m 'xxx' 提交暂存区所有文件到版本区
提交成功会提示:
[master (root-commit) 88bbb64] first commit
1 file changed, 2 insertions(+)
create mode 100644 x.txt
如果只输入git commit会出问题,这时需要ESC + :+ q! 退出就好
4. 理解工作区+版本区+暂存区
工作区(working Directory):简单的理解——你在电脑里能看到的目录。
暂存区(stage):介于工作区和版本区中间,工作区到版本区的“必经之路”
版本库(Repository):工作区有一个隐藏目录.git,准确的来说这个不算工作区,而是Git的版本库。
第一步是用git add把文件添加进暂存区。
第二步是用git commit把暂存区的所有内容提交到当前版本库。
5. 差异对比
git diff : 比较暂存区与工作区
git diff --cached : 比较版本区与暂存区
git diff master : 比较版本区与工作区
6. 日志+版本号
git log 显示从最近到最远的所有提交日志
git reflog 显示每次提交(commit)的commit id
7. 版本回退+版本穿梭+版本撤销
git reset --hard HEAD^ 版本回退(回退一次提交)
git reset --hard 版本号 回退到指定的commit id版本
git reset HEAD 用版本库中的文件去替换暂存区的全部文件。
git checkout -- x.txt 用暂存区指定文件去替换工作区的指定文件(危险)
git checkout HEAD x.txt 用版本库中的文件替换暂存区和工作区的文件(危险)
git rm --cached x.txt 从暂存区删除文件
8. 删除文件
!!!文件或者文件夹必须通过git管理(也就是提交到版本区)才能进行删除
git rm x.txt 删除文件(使用git提供的命令删除文件结果会同步到暂存区)
git rm -r xxxx 删除文件夹(不能删除空文件夹)
git交互图示如下:
9. 分支
分支常用命令
git checkout -b dev 创建dev分支,并切换到dev分支(会把原来分支的文件复制一份到新分支中)
git branch 查看当前分支
git checkout master 切换分支
git merge dev 合并dev分支到当前分支
git branch -d dev 删除指定分支
git diff branch1 branch2 显示出两个分支之间所有有差异的文件的详细差异
git diff branch1 branch2 --stat 显示出两个分支之间所有有差异的文件列表
git diff branch1 branch2 xxx 显示指定文件的详细差异
!!! 当文件夹为空时创建新分支会把原来分支覆盖掉,要创建分支必须先把当前分支的文件提交到版本库
第3章:版本控制系统的区别
1. 集中式版本控制系统
代表有SVN、CVS
集中式版本控制系统,版本库是集中存放在中央服务器的,每个开发人员电脑里只有其中一个版本。
2. 分布式版本控制系统
代表有Git、BitKeeper
每个开发人员电脑里都有一个完整的版本库。同时,它也需要一台充当“中央服务器”的电脑,来方便“交换”大家的代码修改。
3. 集中式与分布式的区别
第4章:GitHub
1. GitHub是什么?
GitHub是一个Git项目托管网站。需要注册一个github账号用来托管代码
2. GitHub能做什么?
能够分享你的代码或者其他开发人员配合一起开发。GitHub是一个基于Git的代码托管平台,Git并不像SVN那样有一个中心服务器。目前我们使 用到的Git命令都是在本地执行,你就需要将数据放到一台其他开发人员能够连接的服务器上。
3. GitHub远程仓库的使用
3.1. 本地仓库内容推送给远程仓库
本地库和远程库打交道时,要注意将本地文件交给本地库管理
(1) 新建本地仓库
git init
git add .
git commit -m “first commit”
(2) 新建远程仓库
在GitHub网站上点击New repository
(3) 本地仓库和远程仓库进行关联
git remote add origin https://github.com/xpromise/oa.git (HTTPS)
(4) 把本地仓库内容推送到远程仓库中
git push -u origin master (首次加-u)
我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送到远程新的master分支,还会把本地master分支和远程的master分支关联起来,在以后的推送时可以简化命令git push origin master。
备注:若在成功推送过一次代码后,电脑不能够自动记住github的账户和密码,执行以下命令解决:git config --global credential.helper store
3.2. 远程仓库有内容克隆到本地进行开发
克隆远程仓库到本地
git clone https://github.com/xxx.git (HTTPS)
!!! git克隆的是所有的分支,通过git branch查看不了,需要通过git checkout 分支名 直接切换到指定分支
3.3. 本地有内容,远程有内容,更新不同的内容
第一种拉取方式:git pull origin master
将远程仓库的master分支上代码版本复制/合并到本地master分支上
!!! git pull可以直接拉取远程仓库最新分支内容
第二种拉取方式:git fetch origin master:tmp
新建一个tem分支,将远程仓库的master分支上代码版本复制到tep分支上,不会自动合并
!!!这种方式不常用,但面试可能会问
4. GitHub其他功能
1. Fork
将别人的项目clone一份,但是owner变成自己,这样你就可以在遵守open source license的前提下任意修改这个项目了。
相当于你在原项目的主分支上又建立了一个分支,你可以在该分支上任意修改,如果想将你的修改合并到原项目中,可以pull request,这样原项目的作者就可以将你修改的东西合并到原项目的主分支上去,这样你就为开源项目贡献了代码,开源项目就会在大家的努力下不断地壮大和完善。
2. GitHub Pages(使用github搭建个人网站)
推送本地代码到GitHub仓库
创建本地仓库
git init
git add .
git commit -m "xxx"
创建GitHub远程仓库
本地仓库关联远程仓库
git remote add origingit@github.com:xpromise/jd.git
推送本地更新
git push -u origin master
配置GitHub Pages选项
需要注意的问题
目录第一层需要有一个index.html文件作为启动文件,命名不可更改。
部署完之后这个网址就可以访问了https://zhanchujin.github.io/zhanchujin/