赞
踩
Git是一个免费的开源的分布式版本控制系统
,可以快速高效的处理从大型到小型的各种项目
版本控制就是一种记录文件内容的变化,方便后面查询阅读之前文件修改情况。
可以记录文件修改历史记录,方便让用户可以看到历史版本,进行切换。
从个人开发到团队开发:
如果不借助版本控制,那么小蓝的开发会覆盖掉小红的开发。
1.2集中式版本控制VS分布式版本控制
集中式版本控制
,例如CVS、VSS都有一个单一的集中管理的服务器,保存所有文件的修改版本,可以通过客户端与服务器连接,来获取最新的代码。
优点:每个人都能看到,项目的其他人正在作什么。
缺点:如果中央服务器宕机。那么,所有的人都无法提交更新,也无法协同工作。
当A修改完后,提交到服务器,服务器就会有A1版本
B可以获取A1版本,进行修改,修改后提交到服务器,此时服务器就会多一个B1版本
分布式版本控制
Git工具,客户端提取的不是最新版的文件快照,而是把代码的仓库,完整的镜像到本地库 。这样所有的操作都可以在本地库完整,就算是一起协同工作的文件发生故障,我都可以通过客户端的本地库进行恢复。(每个客户端的每一次文件提取,实际上都是对整个仓库的完整备份)
优点:服务器宕机的情况下,也可以进行并发操作。(因为版本控制是在本地进行,相当于每个客户端,同样也是服务器)
每个客户端保存的都是整个完整的项目(包含历史记录)
命令名称 | 作用 |
---|---|
git config --global user.name 用户名 | 设置用户签名(为了区分是谁提交的代码) |
git config --global user.email 邮箱 | 设置用户邮箱(可以是虚拟的邮箱) |
git init | 初始化本地库 |
git status | 查看本地库状态 |
git add 文件名 | 添加到暂存区 |
git commit - m “我做了什么修改” | 提交到本地库 |
git reflog | 查看历史记录 |
git reset --hard 版本号 | 版本穿梭 |
作用:为了让git管理你本地文件,所以要初始化本地库
git init
会生成一个.git的文件(隐藏文件)
###2.2 查看本地库状态
git status
空文件:
On branch master : git默认是master分支
No commits yet : 没有提交
nothing to commit : 没有提交的文件
当创建了一个hello.txt文件后:
有未被跟踪的文件,hello.txt(只有git add.后才会被git跟踪)
红色字体代表未被跟踪
git add 文件名 或者 git add .
git rm --cached hello.txt ----------将暂存区的文件删除,但是本地文件仍然存在
git commit -m "你的信息" -----形成你的历史版本,就不能删除了
git reflog -----查看版本号
git log ------查看详细的版本号
日志:在master分支下的,目前指向第一次版本提交
文件修改,并且未被跟踪。在将文件推送到本地库,进行日志查看,此时指针指向第二次版本
git reflog (查看版本信息)
git log (查看详细的版本信息)
git reset --hard 版本号 (版本切换)
git控制版本不是赋值粘贴给你很多副本,而是在本地库的内存中记录了很多历史版本信息,通过指针来进行版本之间的切换的
什么是分支
在版本控制的过程中,同时进行多个任务,为每个任务设置一个单独分支,就算该分支任务失败了,也不会影响到主分支任务,直接删掉就可以。(也就相当于在一个副本上进行操作)
优点:
同时进行多个功能的开发,提高开发效率
各个分钟独立进行。如果一个分支开发失败,不会对其他分支有任何影响,直接删除就可以
命令名称 | 作用 |
---|---|
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 把指定的分支合并到当前分支上 |
git branch -v
git branch 分支名
git checkout hot-fix
git merge 分支名
合并分支,将该分支合并到当前分支上,例如你想将hot-fix分支合并到master分支上,你就需要首先来到master指针上。
原因:在合分支的情况下,俩个分支在同一个文件的同一个位置
有俩套完全不同的修改.Git无法代替我们决定哪一个,所以必须人为决定
新代码的内容
如果只是一个人进行修改(hot-fix),而master并没有修改,那么此时不会出现合并冲突。
修改完后,仍然需要将hello.txt放到暂存区,并且需要提交本地库,而且这次提交本地库git commit(命令时不能带文件名)
合并合并,只会修改master分支,而hot-fix分支不会改变
master、hot-fix其实都是指向具体版本的记录的指针。当前的所在的分支,其实是由HEAD决定的、所以创建分支,实际上就是多创建一个指针
HEAD如果指向master,那么我们现在就是还在master分支上。
HEAD如果指向hot-fix,那么我们现在就是在hot-fix分支上
HEAD指针是指向具体哪个分支的,而master,或者hot-fix指针是具体指向哪一个版本的。
因为平时git commit是在本地仓库进行合作,例如程序员A在自己的pc上有v1,v2,v3三个版本。程序员B在自己的pc上也有v1,v2,v3三个版本。此时我们就需要代码托管中心(远程库)。
Git版本控制,都是在本地库进行的(分布式版本控制工具)
团队内协作:
跨团队协作:
命令名称 | 作用 |
---|---|
git remove -v | 查看当前所有远程地址的别名 |
git remote add 别名 远程地址 | 起别名 |
git push 别名 分支 | 推送本地分支上的内容到远程仓库 |
git clone 远程地址 | 将远程仓库的内容克隆到本地 |
git pull 远程库地址别名、远程分支名 | 将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并 |
创建远程地址别名(链接太长了,起一个别名,以后进行拉去(pull)、克隆(clone)、推送(push)的时候就可以用别名)
git remote -v 查看当前所有远程地址的别名
git remote add 别名 远程地址
git push 别名 master (如果不用别名的话,就用链接)
当远程库修改了,我也想同步到本地库,此时用pull
git pull 别名 master (如果不用别名的话,就用链接)
此时本地库代码和远程库代码已经同步了
git clone 需要克隆的链接
克隆做了三件事:
拉取代码
初始化本地库
创建别名(默认别名是origin)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。