首页 > 代码库 > Git分布式版本控制系统

Git分布式版本控制系统

1、版本控制

是否依稀记得你的毕业论文?

毕业论文_初稿.doc毕业论文_修改1.doc毕业论文_修改2.doc毕业论文_修改3.doc毕业论文_完整版1.doc毕业论文_完整版2.doc毕业论文_完整版3.doc毕业论文_最终版1.doc毕业论文_最终版2.doc毕业论文_死也不改版.doc...

是否还记得老师让你重新自己写的项目?

blog1blog2blog3blog4...

以上是使用文件或文件夹进行版本管理,以上方式有缺点:

  • 多个文件,保留所有版本时,需要将多个文件保存在本地
  • 协同操作,多人协同操作时,需要将文件发来发去...
  • 容易丢失,被删除意味着永远失去(可以选择网盘)

为了解决上述问题,应运而生了版本管理工具:

  • VSS-- Visual Source Safe
    此工具是Microsoft提供的,是使用的相当普遍的工具之一,他可以与VS.net进行无缝集成,成为了独立开发人员和小型开发团队所适合的工具,基本上Window平台上开发的中小型企业,当规模较大后,其性能通常是无法忍受的,对分支与并行开发支持的比较有限。
  • CVS--Concurrent Versions System
    此工具是一个开源工具,与后面提到的SVN是同一个厂家:Collab.Net提供的。CVS是源于unix的版本控制工具,对于CVS的安装和使用最好对unix的系统有所了解能更容易学习,CVS的服务器管理需要进行各种命令行操作。目前,CVS的客户端有winCVS的图形化界面,服务器端也有CVSNT的版本,易用性正在提高。
  • SVN --CollabNet Subversion
    此工具是在CVS 的基础上,由CollabNet提供开发的,也是开源工具,应用比较广泛。他修正cvs的一些局限性,适用范围同cvs,目前有一些基于SVN的第三方工具,如TortoiseSVN,是其客户端程序,使用的也相当广泛。在权限管理,分支合并等方面做的很出色,他可以与Apache集成在一起进行用户认证。不过在权限管理方面目前还没有个很好用的界面化工具,SVNManger对于已经使用SVN进行配置的项目来说,基本上是无法应用的,但对于从头开始的项目是可以的,功能比较强大,但是搭建svnManger比较麻烦。是一个跨平台的软件,支持大多数常见的操作系统。作为一个开源的版本控制系统,Subversion 管理着随时间改变的数据。 这些数据放置在一个中央资料档案库中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。 这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。Subversion 是一个通用的系统, 可用来管理任何类型的文件, 其中包括了程序源码。
  • BitKeeper
    是由BitMover公司提供的,BitKeeper自称是“分布式”可扩缩SCM系统。不是采用C/S结构,而是采用P2P结构来实现的,同样支持变更任务,所有变更集的操作都是原子的,与svn,cvs一致。
  • GIT
    Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理.Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper,后者之前一直是 Linux 内核开发人员在全球使用的主要源代码工具。开放源码社区中的有些人觉得 BitKeeper 的许可证并不适合开放源码社区的工作,因此 Torvalds 决定着手研究许可证更为灵活的版本控制系统。尽管最初 Git 的开发是为了辅助 Linux 内核开发的过程,但是我们已经发现在很多其他自由软件项目中也使用了 Git。例如 最近就迁移到 Git 上来了,很多 Freedesktop 的项目也迁移到了 Git 上。

版本管理工具都一般包含客户端和服务端:

  • 客户端(用户):本地编写内容,向服务端获取或提交内容
  • 服务端(网盘):保存所有版本的文件

2. 什么是GIT

GIT
  - Git 是一个开源的分布式版本控制软件,用以有效、高速的处理从很小到非常大的项目版本管理。

GitHub等
  - GitHub、GitCafe、BitBucket和GitLab等是基于Git版本控制的远程文件托管平台。

使用场景:
  - 无远程:在本地 .git 文件夹内维护历时文件
  - 有远程:在本地 .git 文件夹内维护历时文件,同时也将历时文件托管在远程仓库

 

PS:
  - 集中式:远程服务器保存所有版本,用户客户端有某个版本
  - 分布式:远程服务器保存所有版本,用户客户端有所有版本

3. 安装Git

参见:http://git-scm.com/

参考指南:GitHub Cheat Sheet (PDF)  |  Visual Git Cheat Sheet (SVG | PNG)

下载:https://git-scm.com/downloads

PS: 注册GitHub、GitCafe、BitBucket和GitLab等账户,以便于将文件托管在远程。

4. Git使用

a. 常用命令:

cd 													- 进入程序目录git init											- 创建一个空的Git仓库或重新初始化一个现有的git config --global user.name "John Doe" 			- 设置用户名git config --global user.email johndoe@example.com	- 设置电子邮件地址git status											- 查看状态git add [file] 										- 将文件从《工作区》提交到《暂存区》git commit -m "提交信息" 							- 将文件从《暂存区》提交到《版本库 》git rm --cached <file>								- 将文件从《暂存区》或《版本库》删除文件工作区:ls											- 查看工作区暂存区:git ls-files -s								- 查看暂存区和版本库版本库:git ls-tree HEAD							- 查看版本库

b.场景:

技术分享
在原来代码工作区操作,开发了半个月后,临时发现线上程序有bug需要马上修复,怎么办?              答案:保留开发到一半的代码,从线上拷贝一份代码到其他路径,在原来基础上修改bug,提交;再次回到正在开发的路径继续写代码...              Git解决方法:利用分支,Git中的分支相当于拷贝一份代码,应用方法以及场景如下:               【代码已上线】                  已上线代码在master分支上(默认创建分支)               【开发新功能到一半】                  git branch dev       【创建新分支】                  git checkout dev     【切换进入dev分支】                  开发程序,仅在dev分支中修改文件,不影响其他分支....                  开发到一半时,突然出现一个bug需要紧急修复                 【将已经开发的功能先提交】                    git add .                    git commit -m 临时提交开发到一半的代码                  或【将已开发的功能先临时保存】                    git stash                     git stash list      查看都有哪些临时保存列表                    git stash apply     从临时列表中取出                    git stash drop      从临时列表中删除              【临时修复bug】                  git checkout master  【切换到master分支】                  修复bug并提交                    git add .                    git commit -m 紧急修复bug                  创建新分支,修复bug并提交,合并到master分支                    git branch bug                    git checkout bug                    修复bug...                    git add .                    git commit -m 紧急修复bug                    git checkout master                    git merge bug              【继续开发新功能】                    git checkout dev                    开发完毕,上线                    git checkout master                    git merge dev                    Auto-merging readme                    CONFLICT (content): Merge conflict in readme                    Automatic merge failed; fix conflicts and then commit the result.                    出现冲突,解决冲突                    git add .                    git commit -m 解决冲突
新功能开发,开发直播功能(预计开发一个月)
技术分享
                【创建远程仓库project】                    注册github,并在其中创建一个project,创建成功后会给当前project生成一个URL用于让本地和远程连接,如:http://47.93.4.198/wupeiqi/pondo.git                【添加远程仓库URL】                     本地执行命令,添加远程连接:git remote add origin http://47.93.4.198/wupeiqi/pondo.git                【将本地分支内容推送到远程仓库】                     git push -u origin master                     PS: 首次推送需要将本地分支同步到远程分支                         git push --set-upstream origin master                         git push --set-upstream origin dev              回家                【从远程仓库克隆到本地某个目录】                    git clone http://47.93.4.198/wupeiqi/pondo.git                    cd pondo                【clone后本地只有master分支,同步其他分支】                    git branch dev origin/dev                    git checkout dev                【在家继续开发】                    ...                【提交到远程版本库】                    git add .                    git commit -m 在家开发              第二天到公司                【从远程仓库获取最新内容】                    git pull origin dev                    或                    git fetch origin dev                    git merge origin/dev                【继续开发功能】                    ...                【提交到远程版本库】                    git add .                    git commit -m 在家开发              第二天回家:                【从远程仓库获取最新内容】                    git pull origin dev                    或                    git fetch origin dev                    git merge origin/dev                【继续开发功能】                    ...                【提交到远程版本库】                    git add .                    git commit -m 在家开发              重复进行中....              PS: 如果本地有未提交的内容,则需要                    - git stash先暂时存储                    - git pull origin dev 从远程获取最新代码                    - git stash pop       将暂时存储代码和最新代码进行合并,解决冲突                  如果在公司的代码只是commit,忘记push到远程;在家又新开发了功能;再次回到公司时,则需要:                    - git pull origin dev                     - 解决冲突                    - git add .                    - git commit -m 解决冲突                    - git push origin dev                    此次会把上次忘记push和本次解决冲突一起提交到远程
项目保存在公司电脑中,缺点:电脑硬盘损坏则代码丢失;在家里电脑无法继续开发。

 

c.冲突:

 第一种方式:stash

 第二种方式:分支 branch

d.协同开发

 

e.fork

 

 

 

 

 注意:协同开发时,在解决完冲突之后,应该跟上一个提交的人进行沟通。

 

 

 

Git分布式版本控制系统