一:什么是Git
Git是目前世界上最先进的分布式版本控制系统(没有之一)
问:何为分布式?它和集中式相比有何特点?
答:如svn,集中式版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。
那么分布式呢,就是每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。
二:Git的基本使用方法
安装后右键鼠标出现有关Git的图标 如Git Bash ,就安装成功了
打开Git Bash,输入Git –version 可以查看当前版本
但是人在江湖呢,怎么能没有名号
在用git前,要先自报家门,否则代码不能提交
建议先去GitHub申请一个账号,用这个账号为Git的账号和邮箱
git config --global user.name #表示输入名字 git config --global user.email #联系方式
1.Git客户端代码管理
工作区(working directory)和版本库(repository)
在电脑里的一个任何文件夹都可以作为工作区,选择一个文件夹作为工作区,在Git命令行(git bash)里进入(cd)到选择的文件夹里面输入git.init,会生成一个工作区。
版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index )的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
srage为暂存区,master为本地仓库
问:如何将工作区的文件添加到暂存区呢?
答:
git status # 查看本地区工作区,暂存区中文件的修改状态
从图中我们可以看到有一条红色和两条绿色得提示。
第一条绿色提示的前缀为newfile,表示为新增XXX文件。
第二条绿色提示得前缀为deleted,表示为删除了XXX文件。
红色提示得前缀为modified,表示为修改XXX文件。
橙色框框选的部分提示Changes tobe committed ,含义为:以下文件已存入暂存区,在提交到本地仓库时会将这些变更提交到本地仓库中。
红色框框选的部分提示Changesnot staged for commit , 含义为:以下文件未存入暂存区,在使用commit命令进行提交操作时,若未使用-a参数的话,则以下文件不会提交到本地仓库中。
原文链接:https://blog.csdn.net/u013374164/article/details/78831273
然后再
git add 文件名.后缀 #添加文件到git的暂存区 git add . #将所有文件添加到暂存区
确定好文件不需要修改后之后
git commit -m "" #其中""里面是打这个版本文件的注释,因为如果版本过多,可能不知道之前版本都改了些什么
就可以把暂存区的内容迁到版本库
三:GitHub
GitHub是一个面向开源及私有软件项目的托管平台,因为只支持Git作为唯一的版本库格式进行托管,故名GitHub。
有很多开源项目都可以在里面找到
在GitHub上创建好账号之后创建仓库,具体方法百度
在创建完仓库后,页面会出现以下内容:
1.在GitHub上进行团队协作
生成公私钥:在设置完账号邮箱之后,在 Git Bash上
ssh-keygen -t rsa -C "你的邮箱" #可以生成SSH密钥,注意看提示的路径,在路径下找到该文件
将公钥 ssh.public,在GitHub上添加,添加方法百度
然后将团队成员添加到项目中去即可
2:版本回退
提交文件后
git log --pretty=oneline #可以查看历史操作记录
如果我想回到其他版本:
git reset --hard ^ #^表示的是版本号,一个^是退回到上一个版本两个是两个版本,或者使用版本ID
如何恢复:
git reflog
3.分支管理
9.1分支有什么用?
在开发中,遇到这样的情况怎么办?
网站已有支付宝在线支付功能,要添加”微信支付”
修改了3个文件, wechat.php ,pay.php
刚做到一半,突然有个紧急. bug:支付宝支付后不能修改订单状态.你需要立即马上修改这个 bug,需要修改的文件是,ali.php,pay.php .
问题是:pay.php ,已经被你修改过,而且尚未完成.直接在此基础上改,肯定有问题.把 pay.php倒回去?那我之前的工作白费了.
此时你肯定会想:在做”微信支付”时,能否把仓库复制一份,在此副本上修改,不影响原仓库的内容.修改完毕后,再把副本上的修改合并过去.
好的,这时你已经有了分支的思想.
前面见过的master ,即是代码的主千分支,事实上,在实际的开发中,往往不会直接修改和提交到master分支上.而是创建一个dev分支,在dev分支上,修改测试,没问题了,再把 dev分支合并到master 上.
如果有了分支,刚才的难题就好解决了,如下图:
在做”微信支付”时,我们创建一个 wechat分支.
把 wechat 分支commit ,此时,master 分支内容不会变 因为分支不同.
当遇到紧急 bug 时,创建一个AliBug分支.
修复bug后,把 AliBug 分支合并到master 分支上.
再次从容切换到 wechat分支上,接着开发”微信支付”功能,开发完毕后,
把wechat分支合并到 master 分支上.
查看分支:
git branch #查看服务器有哪些分支 git branch 分支名 #创建分支 git checkout 分支名 #切换该分支 git checkout -b 分支名 #创建并切换到该分支 vim 文件名.后缀 #创建文件
合并分支:
git merge 分支名 #合并该分支到当前分支中
团队成员取出项目:
将远程仓库生成好的项目的SSH链接输入到Git Bash里,首先Git Bash先cd到目标路径再输入
git clone 仓库地址