一、git基础概念
git是用C开发的。下面简要介绍下git代码管理的最基本的几个命令:
首先将github上已有的项目,选择Clone with HTTPS
git clone https://github.com/linzhirui1992/Crowd-Counting.git
# 如果觉得仓库太大,可以在 git clone 中加入参数 --depth=1,只拉取最近的一个 revision
git clone --depth=1 https://github.com/linzhirui1992/Crowd-Counting.git
在电脑里能看到的目录就是工作区(Working Directory,如Crowd-Counting文件夹),工作区有一个隐藏目录.git
,这个不算工作区,而是Git的版本库(Repository)。Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master
,以及指向master
的一个指针叫HEAD
。
在将新的文件复制到对应子目录下后,用命令git add
告诉Git,把文件添加到仓库,实际上就是把文件修改添加到暂存区。执行下面的命令,没有任何显示,这就对了,Unix的哲学是“没有消息就是好消息”,说明添加成功。
git add A_testdemo.prototxt
git add A2_iter_32000.solverstate A2_iter_32000.caffemodel
用命令git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支,将暂存区内容添加到本地仓库。-m
后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。可以多次add
不同的文件后,commit
一次提交很多文件。创建Git版本库时,Git自动为我们创建了唯一一个master
分支,所以,现在,git commit
就是往master
分支上提交更改。
git commit -m "add file"
git push origin master将本地版本库推送到远程服务器,origin是远程主机,master表示是远程服务器上的master分支,分支名是可以修改的。
git push origin master
查询当前远程的版本:
git remote -v
直接拉取并合并最新代码:
#示例1:拉取远端origin/master分支并合并到当前分支
git pull origin master
#示例2:拉取远端origin/dev分支并合并到当前分支
git pull origin dev
二、使用git进行项目版本管理
为规范源代码版本管理,现将各分支表述如下:[3]
1.master分支
存放的应该是随时可供在生产环境中部署的代码
当开发活动告一段落,产生了一份新的可供部署的代码时,master分支上的代码会被更新。同时,每一次更新,都有对应的版本号标签(TAG)。
分支命名:master
该分支,由管理员负责维护,其它人只有拉取权限。来自于release分支的合并,供发版使用
生命周期:伴随着整个项目的生命周期,项目结束时结束。
2.develop分支
develop分支是每次迭代版本的共有开发分支,从最新的master分支派生(管理员操作)
当develop分支上的代码已实现了软件需求说明书中所有的功能,派生出release分支(管理员操作)
分支命名:dev-版本号
该分支,由开发人员在各自的feature分支开发完成后,合并至该分支。
生命周期:一个阶段功能开发开始到本阶段结束
3.release分支
从develop分支派生(管理员操作)
测试环境中出现的bug,统一在该分支下进行修改,并推送至远程分支。修改内容必须合并回develop分支和master分支。
分支命名惯例:release-版本号
生命周期:一个阶段功能开发结束开始,完成阶段功能测试并修复所有发现bug,合并会develop分支结束。
4.feature分支
在开发一项新的软件功能的时候使用,这个分支上的代码变更最终合并回develop分支
分支命名惯例:feature-姓名全拼-分支说明-日期 / feature-分支说明-日期
例:接到一个开发关于cc视频点播替换的任务,你需要从develop分支拉出一个分支,并命名为:release-yuruixin-ccVideo-20171117。然后在该分支下进行开发,开发结束,将该分支合并至develop分支(此时的代码必须为可运行的,不能影响到他人),合并完成删掉该特性分支。
开发人员的每一个新功能开发都应该在该类分支下进行。
生命周期:开发一个新功能开始,完成新功能开发并合并回develop分支结束。
5.hotfixes分支
在master分支发现bug时,在master的分支上派生出一个hotfixes分支,修改完成后,合并至master分支以及develop分支,合并完成,删除该hotfixes分支。
分支命名惯例:hotfixes-姓名全拼-分支说明-日期
示例:hotfixes-yuruixin-cclivebug-20171117
生命周期:发现master分支bug开始,完成master分支bug结束。
综上,开发人员需要操作的分支为:
- feature分支 (开发使用)
- release分支 (测试中出现的bug修改)
- hotfixes分支 (master中出现的bug修改)
整个流程可以下图所示
三、git 合并分支
查看远程分支
git branch -a
查看本地分支
git branch
切换分支
git checkout master
# 创建并切换到新分支
git checkout -b develop
合并分支
git merge develop
# 合并之后提交
git commit -m "update file"
# 然后push到远程仓库master
git push origin master
若git pull文件时与本地文件冲突,提示如下信息:
error: Your local changes to 'c/environ.c' would be overwritten by merge. Aborting.
Please, commit your changes or stash them before you can merge.
这个意思是说更新下来的内容和本地修改的内容有冲突,先提交你的改变或者先将本地修改暂时存储起来。
处理的方式非常简单,主要是使用git stash命令进行处理。
先将本地修改存储起来
git stash
pull内容
git pull
四、打标签(版本号)
发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。
创建标签
在Git中打标签非常简单,首先,切换到需要打标签的分支上:
$ git branch
* dev
master
$ git checkout master
Switched to branch 'master'
然后,敲命令git tag <name>
就可以打一个新标签:
git tag v1.0
可以用命令git tag
查看所有标签:
$ git tag
v1.0
还可以创建带有说明的标签,用-a
指定标签名,-m
指定说明文字:
git tag -a v0.1 -m "version 0.1 released" 1094adb
操作标签
如果标签打错了,也可以删除:
$ git tag -d v0.1
Deleted tag 'v0.1' (was f15b0dd)
因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。
如果要推送某个标签到远程,使用命令git push origin <tagname>
:
$ git push origin v1.0
Total 0 (delta 0), reused 0 (delta 0)
To github.com:michaelliao/learngit.git
* [new tag] v1.0 -> v1.0
或者,一次性推送全部尚未推送到远程的本地标签:
$ git push origin --tags
Total 0 (delta 0), reused 0 (delta 0)
To github.com:michaelliao/learngit.git
* [new tag] v0.9 -> v0.9
如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:
$ git tag -d v0.9
Deleted tag 'v0.9' (was f52c633)
然后,从远程删除。删除命令也是push,但是格式如下:
$ git push origin :refs/tags/v0.9
To github.com:michaelliao/learngit.git
- [deleted] v0.9
附:
windows 修改现存git账户密码
控制面板 -> 用户账户 -> 凭据管理 -> 点击要修改的git账户修改确认保存即可
【参考资料】
[1] 廖雪峰的git教程可以好好看下 https://www.liaoxuefeng.com/wiki/896043488029600
[2] 一些常用命令可以看下 Git常用命令使用大全
[3] https://blog.csdn.net/yuruixin_china/article/details/79061999
[4] git命令行操作指南 https://git-scm.com/book/zh/v1/