git的使用
Git工作原理和SVN的区别,我们使用的工作流,使用可视化工具SourceTree和命令行进行代码合并,上传,冲突解决
1. Git简介与优势;
2.如何安装Git到MAC OS X与局域网Github服务器(简称gitLab服务器)搭建;
3.如何使用Git;
4.Git基础命令的含义;
5.使用命令创建仓库;
6.Git常用命令示例;
7.Branch简述;
8.Git Stash命令;
9.让Git忽略烦人不想追踪的文件;
10. GitLab创建新项目(web);
11.可视化工具SourceTree的优缺点;
12.下载远端仓库到本地;
13.使用SourceTree创建研发分支和子分支;
14.SourceTree创建的四层主分支结构(经典工作流);
15.使用SourceTree删除分支;
16.通过SourceTree提交代码的标准化流程;
17.SourceTree暂存功能的使用;
18. SourceTree的Diff设置;
19.使用SourceTree进行代码可视化冲突解决;
20.在GitLab页面发现提交的冲突;
21.在GitLab页面发现提交的冲突并关闭该提交;
22.SourceTree解决因为提交有冲突,被关闭的提交;
23.使用命令行解决冲突方案;
24.Git push 常见用法。
1. Git简介与优势;
2.如何安装Git到MAC OS X与局域网Github服务器(简称gitLab服务器)搭建;
3.如何使用Git;
4.Git基础命令的含义;
5.使用命令创建仓库;
6.Git常用命令示例;
7.Branch简述;
8.Git Stash命令;
9.让Git忽略烦人不想追踪的文件;
10. GitLab创建新项目(web);
11.可视化工具SourceTree的优缺点;
12.下载远端仓库到本地;
13.使用SourceTree创建研发分支和子分支;
14.SourceTree创建的四层主分支结构(经典工作流);
15.使用SourceTree删除分支;
16.通过SourceTree提交代码的标准化流程;
17.SourceTree暂存功能的使用;
18. SourceTree的Diff设置;
19.使用SourceTree进行代码可视化冲突解决;
20.在GitLab页面发现提交的冲突;
21.在GitLab页面发现提交的冲突并关闭该提交;
22.SourceTree解决因为提交有冲突,被关闭的提交;
23.使用命令行解决冲突方案;
24.Git push 常见用法。
Git简介与优缺点
Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git的读音为/gɪt/。
Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper,后者之前一直是 Linux 内核开发人员在全球使用的主要源代码工具。开放源码社区中的有些人觉得BitKeeper 的许可证并不适合开放源码社区的工作,因此 Torvalds 决定着手研究许可证更为灵活的版本控制系统。尽管最初 Git 的开发是为了辅助 Linux 内核开发的过程,但是我们已经发现在很多其他*软件项目中也使用了 Git。例如 很多 Freedesktop 的项目迁移到了 Git 上。
特点编辑
分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。
下图是经典的git开发过程。
Git的功能特性:
从一般开发者的角度来看,git有以下功能:
1、从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。
2、在自己的机器上根据不同的开发目的,创建分支,修改代码。
3、在单机上自己创建的分支上提交代码。
4、在单机上合并分支。
5、把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。
6、生成补丁(patch),把补丁发送给主开发者。
7、看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。
8、一般开发者之间解决冲突的方法,开发者之间可以使用pull 命令解决冲突,解决完冲突之后再向主开发者提交补丁。
从主开发者的角度(假设主开发者不用开发代码)看,git有以下功能:
1、查看邮件或者通过其它方式查看一般开发者的提交状态。
2、打上补丁,解决冲突(可以自己解决,也可以要求开发者之间解决以后再重新提交,如果是开源项目,还要决定哪些补丁有用,哪些不用)。
3、向公共服务器提交结果,然后通知所有开发人员。
优点:
适合分布式开发,强调个体。
公共服务器压力和数据量都不会太大。
速度快、灵活。
任意两个开发者之间可以很容易的解决冲突。
离线工作。
缺点:
资料少(起码中文资料很少)。
学习周期相对而言比较长。
不符合常规思维。
代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息
介绍编辑
Git — The stupid content tracker, 傻瓜内容跟踪器。Linus Torvalds 是这样给我们介绍 Git 的。
Git 是用于 Linux内核开发的版本控制工具。与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持(wingeddevil注:这得分是用什么样的服务端,使用http协议或者git协议等不太一样。并且在push和pull的时候和服务器端还是有交互的。),使源代码的发布和交流极其方便。 Git 的速度很快,这对于诸如 Linux kernel 这样的大项目来说自然很重要。 Git 最为出色的是它的合并跟踪(merge tracing)能力。
实际上内核开发团队决定开始开发和使用 Git 来作为内核开发的版本控制系统的时候,世界开源社群的反对声音不少,最大的理由是 Git 太艰涩难懂,从 Git 的内部工作机制来说,的确是这样。但是随着开发的深入,Git 的正常使用都由一些友好的脚本命令来执行,使 Git 变得非常好用,即使是用来管理我们自己的开发项目,Git 都是一个友好,有力的工具。现在,越来越多的著名项目采用 Git 来管理项目开发.
作为开源*原教旨主义项目,Git 没有对版本库的浏览和修改做任何的权限限制。
目前GIT已经可以在windows下使用,主要方法有二:msysgit和Cygwin。Cygwin和Linux使用方法类似,Windows版本的GIT提供了友好的GUI(图形界面),安装后很快可以上手。
在mac环境下的sourceTree.
说到版本管理工具,大家会想到svn,git和svn还是有差别的。svn是集中化的版本控制系统, 只有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。git是分布式的版本控制系统, 每一个终端都是一个仓库,客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。每一次的提取操作,实际上都是一次对代码仓库的完整备份。
分支代码只有一份!
使用过svn的童鞋想必都知道,当我们要开发一个新功能或者增加一个新版本或者修改一个复杂bug的时候,通常需要copy整份代码到本地一个目录,然后添加到svn服务器上进行代码管理。
而Git不同,Git可以创建许多branches,每个branch都是独立的,当我们需要修改代码的时候,commit也只是对本地仓库的修改。如果使用SourceTree,我们会发现在工具栏的Git Flow功能,已经很好的为此做了准备。
log在本地!
svn的log都是存储在服务器上的,当我们要查阅修改记录的时候,必须要能够连接上远程服务器,并且具有权限。而Git不同,Git对于本地仓库的修改记录都是在本地上的,方便查阅。
合并代码更加方便!
因为Git支持本地无限Branches,当我们个体在本地创建多个branches用于不同目的的时候(修改,新增,探索),合并一份代码显然要比svn合并一堆工程copy更加简单。
更加安全!
Git的commit命令不同于SVN,commit只是对本地仓库代码的一次更新。当需要提交到master远程仓库,或者其他远程分支仓库的时候,需要使用push功能。虽然增加了一个过程,却可以防止随意修改导致后期合并出现大问题的风险。
目录更加简洁!
在Git本地仓库根目录,只有一个.git文件,它包含了所有的管理信息。而SVN想必大家都知道,每个子目录下都有噁心的.svn。这个当需要修改文件冲突等问题时,就需要考虑了。肯定是一个文件简单。
GitLab 是一个用于仓库管理系统的开源项目。使用Git作为代码管理工具,并在此基础上搭建起来的web服务。
首先,每个开发可以有属于自己的整个工程的本地拷贝。隔离的环境让各个开发者的工作和项目的其他部分修改独立开来 ——
即*地提交到自己的本地仓库,先完全忽略上游的开发,直到方便的时候再把修改反馈上去。
其次,Git提供了强壮的分支和合并模型。不像SVN,Git的分支设计成可以做为一种用来在仓库之间集成代码和分享修改的『失败安全』的机制。
如何安装Git到MAC OS X与局域网Github服务器(简称gitLab服务器)搭建
这里介绍两种方式;
一,使用Git command-line
二,使用GUI工具SourceTree,功能很强大,很方便
在进行安装前,要说一下,Git和SVN一样,都需要创建一个服务器的,他们都可以创建自己的版本管理服务器。对于个人和小团队来说,使用托管服务器可能更合适,
常见的有Github 和 Bitbucket。Github没有个人免费仓库使用,代码放上去就是开源的。gitlab则是类似于github的一个工具。gitlab有很多依赖,而bitnami制作了一键安装的包,下载链接:https://bitnami.com/redirect/to/37478/bitnami-gitlab-7.0.0-0-linux-installer.run ,使得安装如此简洁。安装的过程中,会设置一个管理员账户,这个可以用来登陆,并且,gitlab的成员不能自己随便申请,需要管理员进行邀请;
1. 服务器怎么关闭和启动gitlab服务器,并设为开机启动项:
在安装的目录下有个文件:ctlscript.sh,通过./ctlscript.sh start可以启动,具体在README文件中。
更改文件权限:chown git:git ctlscript.sh
添加对应命令到启动文件:/etc/rc.local中:./opt/gitlab-7.0.0-0/ctlscript.sh start
2. 修改git@domain_name中的domain_name
在安装时,需要设定domain_name, 我这里设置成我的公网的ip,如果没有设置好的话,可以参考帖子:点击打开链接 ,修改文件:
[plain] view plain copy 在CODE上查看代码片派生到我的代码片
/home/git/gitlab/apps/gitlab/htdocs/config/gitlab.yml
将两处的host,修改成外网ip即可。
如何使用Git
这里也介绍两种方式
一,使用command(sudo apt-get install git)
二,使用SourceTree
先介绍第一种;Command line
使用终端的命令行时,首先我们要有一定的linux命令行知识。实际使用中经常用到的比较少,这里只介绍一些必要的。
参考链接;http://www.renfei.org/blog/mac-os-x-terminal-101.html
linux基础命令;
sudo -s 获取绝对用户权限
cd xxx 进入xxx目录
ls (-a/-A) 显示当前路径下所有文件(隐藏的)
pwd 显示当前绝对路径
mkdir xxx 创建文件夹xxx
man xxx 查看xxx命令手册
Git基础命令的含义
clone 克隆远程仓库
init 初始化仓库
remote 连接远程仓库
pull 从远程仓库下拉获取新数据
push 将本地仓库新增或修改文件上传到远程仓库
add 添加文件或者修改文件,commit以及push之前使用
log 当前仓库提交过的日志信息
status 当前仓库版本状态
commit 提交到当前仓库中
branch 分支命令,相关增删查操作
checkout 使用远程仓库最后一个版本完全覆盖当前仓库内容/选择分支branch
diff 对比版本内容
merge 合并版本内容
详细参见链接;https://confluence.atlassian.com/display/BITBUCKET/Bitbucket+Documentation+Home
使用命令创建仓库
使用Git,我们当然要有一个远程仓库,这里假设我们已经创建好了GitLab账号(创建远程仓库repository使用)。
创建远程仓库的方法这里也介绍两种方式。
一,使用Git 命令创建
二,在gitLab服务器上创建
第一种,使用Git 命令行
初始化
git init
———>
从gitLab服务器上复制仓库地址
———>
添加别名为origin的源到远程仓库地址
git remote add origin https://myAccountName@bitbucket.org/myAccountName/myRepositoryName.git
第二种,gitLab服务器上创建远程仓库
注册之后按照提示创建即可,非常简单。。。不再复述。
详见参考;https://confluence.atlassian.com/display/BITBUCKET/Bitbucket+Documentation+Home中的Bitbucket 101文档
Git常用命令示例
有了远程仓库Repostiory,我们该添加代码或者其他文件什么的了
这里还是介绍两种;
一, 使用command-line
二, 使用SourceTree
第一种, 使用command-line
在本地目录链接了远程仓库后(clone命令),使用如下方法操作文件。
git add xxx 添加或要修改的xxx文件
——————>
git commit -m “adding repo instructions” 提交xxx文件到本地仓库版本中 ;-m “XXXX” ;提交log
——————>
git push -u origin master 提交xxx和log,到远程仓库origin(刚才创建的远程仓库Repository的别名)的master分支下
第二种, 使用SourceTree
和svn类似,具体流程为;
add—-添加文件到索引—–>commit——提交到本地仓库——>push——–上传到远程仓库———>
之后就是对仓库中文件的增加修改删除操作了
Ps:记得如果不是单独另需创建的branch,每次对本地仓库操作的时候都要使用 git pull命令,更新远程仓库到本地中,防止冲突。这点和SVN的update类似
先介绍到这里,其实操作起来基本和SVN的命令行工具还有gui工具类似。
实际使用中主要区别还是分布式的开发模式不同。
Branch简述
Branch就是分支,Git相比SVN,最大的优点是完善的分布式管理。每一个本地的Repository,也就是仓库,都相当于一个本地版本服务器,在此基础上我们可以进行许多Branches,进行不同
类型的开发。Branch的目录统一性使得它的管理,包括merge非常简单方便。
一, 先介绍下SourceTree下的Branch,
这里提供个比较详细的博客链接,供大家参考,图文并茂,已经解释的比较详细了,不再复述。
参考地址: http://www.takobear.tw/12/post/2014/02/bear-git-flow-sourcetreegit-flow.html
二, 使用command-line创建branch分支
Git Stash命令
说到branches,使用Git开发较复杂的项目我想本地肯定会有多个。假如我们有一个临时紧急的重要任务,需要切换到其它branch,那么我们需要commit当前的内容。
但是,假如我修改的内容比较乱,或者其它什么原因不想提交到仓库中呢,这时候我们就可以使用Stash命令了。
$vim ~/.gitignore_global
然后在.gitignore_global文件里面设置我们想要忽略的文件。比如添加如下
Mac OS X
*.DS_Store
Xcode
*.pbxuser
*.mode1v3
*.mode2v3
*.perspectivev3
*.xcuserstate
project.xcworkspace/
xcuserdata/
#Git
.gitingore
.gitingore.swp
之后保存就可以了。如果输入git status仍然提示有不期望的被追踪的文件。需要清理下
添加如上规则的名字
保存之后,退出,就可以了。
关于忽略文件的命名规则,请参考链接:
http://bdxnote.blog.163.com/blog/static/844423520124153051409/
GitLab创建新项目(web)
可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序(Wall)进行交流。它还提供一个代码片段收集功能可以轻松实现代码复用。
第二创建项目:登录gitlab网址成功后,点击右侧导航条上的 “+” 就可以进入创建项目的页面。
我的这个文章有100页,还是分成几篇写吧!不然又臭又长了。
由于文章太长,没有时间上传文章,若想看全部的可以从我的这个地址下载文件吧(http://download.csdn.net/download/jia12216/10133035)!后期再慢慢发表后续的文章。