一、Github---代码托管平台
GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名GitHub。
简单来说,Github是一个代码托管的平台,公有库是免费的,所以海量的代码都是开源的,别人都在修改它,但是会给你记录操作日志,大多数公司的大型项目都是在上面运行操作的,因为他支持多用户在上面对一份代码进行版本的更新等;
二、git--分布式版本控制系统
1.概念
Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。
2.暂存区和工作区
工作区(Working Directory):就是你在电脑里能看到的目录,比如我的"local_git"t文件夹就是一个工作区。
版本库(Repository):工作区有一个隐藏目录“.git”,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。对于任何一个文件,在 Git 内都只有三种状态:
- 已提交(committed)已提交表示该文件已经被安全地保存在本地数据库中了;
- 已修改(modified)已修改表示修改了某个文件,但还没有提交保存;
- 已暂存(staged)。已暂存表示把已修改的文件放在下次提交时要保存。
三、linux下git的本地操作
1.安装git
安装git的操作,大家可以网上下载一个linux版本的git,一般安装linux系统的时候都会自带git映射文件,只需找到安装即可(网上查找安装的命令,在这里就不详说了)。
主要注意一个问题,因为git是分布式版本控制系统,所以首次安装的时候都会让机器自报家门,(邮箱+名字)这里的邮箱和名字需要你在github官网(www.github.com)上注册你账号信息,为什么要这样做呢?因为你的代码是要联机上传到github代码托管平台上去的,联机操作下文会详说。(当然,如果你不打算联机操作,那么这个邮箱+名字,你可以随意)。
config --global user.name "yourname" //设置你的名字
config --global user.email “your email” //设置你的邮箱
2.初始化仓库(创建版本库)
第一步,创建工作区,为了方便你可以创一个空的文件夹,作为它的工作区;
第二步:(进入该文件夹,ls你会发现什么都没有),调用git init初始化,此时会在此目录下创建一个隐藏的.git文件,即版本库,(可以用ls -a命令查看)
3.添加文件到暂存区、提交到版本库
git add 文件 //添加文件到暂存区
git commit -m ‘版本信息(一般填写进行了什么操作)’ //将暂存区间的文件提交到版本库
4.查看工作区的状态
git status //查看工作区的状态,(如果你工作区的文件有改动,调用此命令会给你操作提示;)
这里我做了更新版本的操作,至此我们就有两个版本了;
5.查看历史修改情况(修改时间,修改人),日志的使用
git log // 显示最近到最远的提交
git reflog // 显示比较简单的信息的所有提交
6.查看修改内容,版本差异
例如一名长程序员旅行一周回来,忘记自己曾经修改了工作区文件的哪些东西,这时查看一下修改内容也是很不错的。
git diff 文件名 //查看工作区修改内容
7.从暂存区撤离将要提交的文件
给定一个这样的场景,你讲一个文件修改完毕后,将它添加到暂存区,以便将来提交,但是你突然觉得还有东西没有改好,那只能把文件从暂存区撤回。
git reset HEAD 文件名 //将暂存区的文件撤回
8.撤销修改
在第4点的时候,我们修改了工作区文件,查看状态,git会提示我们添加到暂存区或者撤回操作;
git checkout 文件名 //撤销修改,回到前一次保存的状态
9.版本回退
版本回即就是改变HEAD的指向;
git reset --hard HEAD //查看当前版本
git reset --hard HEAD^ //查看上一个版本,^代表上一个的意思,HEAD^^代表上两个;HEAD~100代表上100个版本,
git reset --hard +版本标示 // 可以用git reflog 查看版本的标识,选择要切换的版本;
10.删除文件
如果直接rm删除文件,只是删除工作区的文件,只是与版本库不一样了,git status 会提示你。
恢复工作区文件:git checkout -- 文件名
如果你真要删除版本库的文件,那么就 git rm 文件名 ---->git commit
(额,这个就不演示了哈,真删了的话我没法接着演示了 哈哈,就给你们看看书上的算了。)
四、git远程仓库
1.在Github上添加ssh key,使自己的电脑和Github建立连接、
注册一个GitHub账号,就可以免费获得Git远程仓库。
为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。 由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以需要设置;
第1步:创建SSHKey。在用户主目录下,看看有没有ssh目录,如果有,再看看这个目录下有没有id_ rsa和
id_ rsa.pub这两个文件,如果已经有了,可直接跳到下一步。 如果没有,打开Shell (Windows 下打开Git Bash),创建SSH Key :$ ssh-keygen -t rsa -C "youremail@example. com"
你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。如果一切顺利的话,可以在用户主目录里找到ssh目录,里面有id _rsa和id_ rsa.pub两个文件,这两个就是SSH Key的秘钥对,id. rsa是私钥,不能泄露出去,id_ rsa.pub是公钥,可以放心地告诉任何人。
第2步:登陆GitHub,打开"Account settings","SSH Keys"页面:
然后,点"Add SSH Key",填上任意Title,在Key文本框里粘贴id_ rsa.pub文件的内容第3步:测试本地仓库与远程仓库的联通;
测试 ssh -T git@github.com //不言而喻,从这里一下的步骤都需要联网了
2.添加Github上的远程库
找到创建按钮,创建远程仓库;
创建成功,系统会提示你:可以将你的本地仓库与远程仓库关联,即上传到远程仓库;
git remote add origin git@github.com:用户名/远程仓库
//把本地仓库上传到远程仓库,记住要用ssh,不要用https
git push -u origin master
//由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会 把本地的master分支内容推送到远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
3.从远程库克隆
git clone git@github.com:用户名/远程仓库名.git
//克隆远程仓库;在你本地仓库没有的情况下
//https也可以克隆,但是不好,一是速度慢,而是需要证书、口令;少只开放http端口公司才有
4.从远程仓库拉文件
git fetch remote-name or git pull remote-name
命令从远程仓库抓取数据到本地。两者不同:
- git pull,相当于git fetch+git merge。
- git fetch命令会到远程仓库中拉取所有你本地仓库中还没有的数据。
运行完成后,你就可以在本地访问该远程仓库中的所有分支,将其中某个分支合并到本地,或者只是取出某个分支,一探究竟。有一点很重要,需要记住,fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手工合并。git pull命令自动抓取数据下来,然后将远端分支自动合并到本地仓库中当前分支。
git pull origin master
//从远程仓库拉文件,为的是给自己的修改拿一份最新的基础
5.从本地仓库推文件去远程仓库
git push origin master
//从本地推文件到远程仓库
6.分支管理
先给出几组图,理解什么是分支;
- 查看分支:git branch //分支前面带*号的为当前使用分支
- 创建分支:git branch name
- 切换分支:git checkout name
- 创建+切换分支:git checkout -b name
- 合并某分支到当前分支:git merge name //要在主分支下合并其他分支
- 删除分支:git branch -d name
7.解决冲突
我们对于创建分支,只是将head指向创建的分支,master还是指向原先主线上,但是假设你的分支在没有合并之前,master分支就超前了一个提交,也就是master指向移动了,当你的分支提交之后,试图合并的时候就可能会出现冲突。(可能的意思是你在代码的同一个位置修改了不同的东西)。