一、简介
1.1 前言
版本控制系统 (VCS)
版本控制系统 (VCS) 是软件,帮助软件开发人员携手合作,他们的工作并保持完整的历史。
VCS的目标:
- 允许开发人员同步工作
- .不要覆盖对方的变化.
- 维护历史的每一个版本.
以下是常见的VCS:
- 集中式版本控制系统(CVCS)
- 分散式/分布式版本控制系统(DVCS)
集中式版本控制系统(CVCS)
集中式版本控制系统(Centralized Version Control Systems,简称 CVCS)采用中央服务器上存储的所有文件和实现团队协作。但是CVCS主要缺点是中央服务器的单点故障,即故障。不幸的是,如果中央服务器宕机一小时,然后在该时段没有人可以合作。即使在最坏的情况下,如果中央服务器的磁盘被损坏,并没有采取适当的备份,那么将失去整个项目的历史。
分布式版本控制系统(DVCS)
DVCS(Distributed Version Control System,简称 DVCS)客户不仅检出的最新快照目录,但他们也完全反映资源库。如果SEVER停机,然后从任何客户端库可以复制回服务器,以恢复它。每个节点是完整的版本库备份。 Git不会依赖中央服务器,这就是为什么可以执行许多操作,当处于脱机状态。可以提交修改,创建分支视图日志和执行其他操作,当处于脱机状态。只需要网络连接,发布您的更改,并采用最新变化。
Git的基本工作流程
第1步:修改文件的工作目录。
第2步:将这些文件添加到暂存区
第3步:执行commit操作。这将文件从临时区域进行推送操作后,将永久地存储更改的Git仓库。
1.2 git
- git for windows官网:https://git-for-windows.github.io/
- 综合官网:https://git-scm.com/downloads
- Git的官方文档:https://git-scm.com/book/zh/v2
- CSDN上传Windows版本:Git-2.10.1-64-bit
msysgit是 Git 版本控制系统在 Windows 下的版本。
Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
windows安装是图形化界面的,如果不是特别了解,直接下一步就可以了。
Ubuntu 下安装在终端下执行 :
apt-get install git
Centos/Redhat 安装在终端下执行:
yum install git
安装完成后,打开终端(Window下请打开安装git时一并安装的bash) 输入 git --version 应该会显示如下类似的信息:
git version 2.10.1.windows.1
使用教程参考:
- Git初体验
- 在win7系统下使用TortoiseGit(乌龟git)简单操作Git@OSC
- Xcode连接git@osc
- git@osc中team开发、fork和pull request的用法
- 如何导入外部Git仓库到中国源代码托管平台(Git@OSC)
- Https方式使用Git@OSC设置密码的方式
1.3 Git图形化界面客户端
TortoiseGit
- 官网:https://tortoisegit.org/
- CSDN上传Windows版本:TortoiseGit-2.3.0.0-64bit.msi
TortoiseGit (The coolest Interface to Git Version Control)是 TortoiseSVN 的 Git 版本,TortoiseGit 用于迁移 TortoiseSVN 到 TortoiseGit,一直以来 Git 在 Windows 平台没有好用 GUI 客户端,现在 TortoiseGit 的出现给 Windows 开发者带来福音。
使用教程参考:TortoiseGit配合msysGit在Git@OSC代码托管的傻瓜教程
SourceTree
- 官网:https://www.sourcetreeapp.com/
- CSDN上传Windows版本:SourceTree(Windows版本)
SourceTree 是 Windows 和 OS X 下免费的 Git 和 Hg 客户端。支持创建、克隆、提交、push、pull 和合并等操作。
SourceTree 界面非常美观,可以方便管理多个 Git 项目,同时还支持 Hg,就是启动速度稍微有些慢,但是总体来说还是很不错的。
1.4 Eclipse插件-egit
eclipse已经基本上集成了egit,所以我们直接使用就可以了。
使用教程参考:
- eclipse中egit插件使用--升级版
- 利用eclipse的git插件EGit与git@osc交互
- eclipse的git插件获取git.oschina
- Eclipse使用EGit管理git@OSC项目
二、常用的Git代码托管平台
- GitHub:GitHub只能新建公开的Git仓库,私有 仓库要收费,如果你做的是一个开源项目,可以首选GitHub。
- Gitlab
- 开源中国代码托管
- 开源中国团队协作平台地址
- CSDN代码托管
三、常见概念
3.1 仓库
在 Git 的概念中,仓库,就是你存在.git目录的那个文件夹内的所有文件,包括隐藏的文件,Git程序会再当前目录以及上级目录查找是否存在.git文件,如果存在,则会将.git目录存在的文件夹开始下的所有文件当成你需要管理的文件,所以,我们如果想将某个文件夹当做一个Git仓库,你可以在那个文件夹下通过终端(Window为Cmd或者PoewrShell或者Bash)来执行:
git init
这样,你所期望的那个文件夹就成为了一个Git管理的仓库了,默认是把当前文件夹生成仓库,如果在后面指定文件夹,会在当前文件夹下创建指定文件夹并将其生成为仓库。
注意:仓库中有一个.git的隐藏文件夹,所有的版本控制都会在这个目录下保存着,也就是版本库。
3.2 版本
严格来讲,Git并不存在版本的概念,但人们也硬是发展出了这么个玩意,在Git中,计数基础是提交,即我们常说的Commit,我们每做一点更改便可以产生一次提交,当提交累计起来,可以作为产品定型时,就在当前的Commit上打上一个标记,将这个标记我们称之为版本多少多少,那么就算完成了一个版本,标记本身被称之为Tag。
请注意,在Git中,版本仅仅只是某一个提交的标签,并没有其他意义,Git本身也仅有打标签的功能,并没有版本功能,版本功能是根据Tag来扩展的,Git本身并没有。
3.3 分支
这是Git中最重要的也是最常用的概念和功能之一,分支功能解决了正在开发的版本与上线版本稳定性冲突的问题。
在Git使用过程中,我们的默认分支一般是Master,当然,这是可以修改的,我们在Master完成一次开发,生成了一个稳定版本,那么当我们需要添加新功能或者做修改时,只需要新建一个分支,然后在该分支上开发,完成后合并到主分支即可。
3.4 提交
提交在Git中同样是非常重要的概念,Git对于版本的管理其实是对于提交的管理,在整个Git仓库中,代码存在的形式并不是一分一分的代码,而是一个一个的提交,Git使用四十个字节长度的16进制字符串来标识每一个提交,这基本保证了每一个提交的标识是唯一的,然后通过组织一个按照时间排序的提交列表,就组成了我们所说的分支。
请注意,分支在本质上只是一个索引,所以,我们可以任意回退,修正,即使因为某些原因丢失了,也可以重建另外。
关于Git的储存方式:Git是仅仅只储存有修改的部分,并不会储存整个文件,所以,请不要删除文件夹及整个文件夹的内容,除非你确定你不再需要他,否则请勿删除。
3.5 同步
同步,也可以称之为拉取,在Git中是非常频繁的操作,和SVN不同,Git的所有仓库之间是平等的,所以,为了保证代码一致性,尽可能的在每次操作前进行一次同步操作,具体的为在工作目录下执行如下命令:
git pull origin master
其中origin代表的是你远程的仓库,可以通过命令git remote -v 查看,master是分支名,如果你本地是其他分支,请换成其他分支的名字,另外因为远程仓库与你本地仓库可能存在冲突,故当存在冲突时,如何处理冲突,这在下面会详细叙述。
3.6 推送
推送和拉取一样,也是一个非常频繁的操作,当你代码有更新时,你需要更新到远程仓库,这个动作被称之为推送,执行的命令与拉取一样,只是将其中的pull这个单词改成push,同样,如果远程仓库存在你本地仓库没有的更新,则在推送前你需要先进行一次同步,如果你确定你不需要远程的更新,则在推送时加上 -f 选项,则可以强制推送。
注意:在协同开发中,并不建议这么做,因为这样很可能覆盖别人的代码。
推送代码示例:
git push origin master
强制推送代码示例:
git push origin master -f
3.7 冲突
在使用Git开发时,如果只是一个人使用,那么基本不会产生冲突,但是在多人合作开发的情况下,产生冲突是很正常的一件事情,关于如何处理冲突,这在下面会详细叙述。
3.8 合并
合并这个命令通常情况下是用于两个分支的合并,一般用于本地分支,远程分支多用Pull命令,该命令的功能是将待合并分支与目标分支合并在一起。
注意:这个命令只会合并当前版本之前的差异,两个分支的提交历史会根据提交时间重新组织索引,故只可能会产生一次冲突但是会生成一个提交,如果你不想生成这次提交,加上 --base参数即可。
3.9 暂存
这个既是一个概念也是一个命令,其含义就是字面上的,作用就是可以将你当前正在进行的工作暂时存起来,然后在此基础上干别的事情,等你别的事情干完后,再转回来继续。
注意:暂存只是针对你最后一次改动而言,即针对当前所在的版本的所有改动都算。
具体执行命令为:
将当前改动暂存起来:
git stash
恢复最后一次暂存的改动:
git stash pop
查看有多少暂存:
git stash list
3.10 撤销
撤销命令使用是非常频繁的,因为某些原因,我们不再需要我们的改动或者新的改动有点问题,我们需要回退到某个版本,这时就需要用到撤销命令,或者说这个应该翻译成重置更加恰当。
具体命令如下:
撤销当前的修改:
git reset --hard
注意:以上命令会完全重置你的修改,如果你想保留某些文件,请使用checkout +文件路径 命令来逐一撤销修改。
如果你想重置到某一版本,可以将 --hard 改为具体的Commit的id如:
git reset 1d7f5d89346
注意:这时你的修改仍然存在,只是你的最近一次提交的版本号变成了你要重置的版本,如果说你想完全丢弃修改,只需要加上 --hard参数就可以了。
3.11 克隆
远程操作的第一步,通常是从远程主机克隆一个版本库到本地。
注意:在把一个版本库克隆或者复制到另一个版本库的时候配置设置是不跟着转移的。
克隆操作的库创建实例。克隆操作不仅检出的工作拷贝,但它也反映了完整的信息库。用户可以执行许多操作,这个本地仓库。网络介入是唯一的一次,当正在同步资料库实例。(不完整-----------------------------》)
3.12 URL
URL代表的Git仓库的位置,Git 的URL存储在配置文件.git/config中,一般情况下都是隐藏的。
代码托管平台的URL,这里以GitHub为例:
下面是我克隆到本地中,配置文件的信息:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[remote "origin"]
url = https://github.com/fxb577328725/FIRPRO.git
fetch = +refs/heads/*:refs/remotes/origin/*
[gui]
wmstate = normal
geometry = 835x475+415+149 185 214
四、详细操作
一般工作流程是这样的:
- 克隆Git仓库作为工作副本。
- 可以添加/编辑文件,修改工作副本。
- 如果有必要,你还服用其他开发人员的变化,更新工作副本。
- 审查前提交。
- 提交修改。如果一切都很好,然后推到存储库的更改。
- 提交之后,如果知道是什么错误,那么纠正最后一次提交,并推送修改到版本库。
以下是工作流程的图形表示:
五、命令
5.1 配置自己的用户名和邮箱
git config --global user.name "你的名字或昵称"
git config --global user.email "你的邮箱"
注意:通过global不难看出这是一个全局设置。
5.2 颜色高亮
git config --global color.ui true
git config --global color.status auto
git config --global color.branch auto
5.3 查看Git全局设置信息
git config -l
全称使用:
git config --list
运行结果如图:
5.4 避免PULLING提交合并
暂时不理解:————————————————————————》
git config --global branch.autosetuprebase always
参考资料: