【GIT】前世今生

GIT

前世今生

GIT到底是什么

Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

命名的由来(仅供参考)

The name "git" was given by Linus Torvalds when he wrote the very

first version. He described the tool as "the stupid content tracker"

and the name as (depending on your way):

链接:https://www.zhihu.com/question/54939657/answer/141820365

GIT和SVN比较

1          
GIT是分布式的,SVN不是。

这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。

l    集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的的话, 日了狗了。

l    分布式版本控制系统,根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。

在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。

2          
全局版本号、全球版本号。

l    SVN的全局版本号和CVS的每个文件都独立维护一套版本号相比,是一个非常大的进步。

l    Git的版本号则更进一步,版本号是全球唯一的。Git 对于每一次提交,通过对文件的内容或目录的结构计算出一个SHA-1 哈希值,得到一个40位的十六进制字符串,Git将此字符串作为版本号。

GIT功能特性

分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。

下图是经典的git开发过程。

从一般开发者的角度来看,git有以下功能:

  1. 从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。
  2. 在自己的机器上根据不同的开发目的,创建分支,修改代码。
  3. 在单机上自己创建的分支上提交代码。
  4. 在单机上合并分支。
  5. 把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。
  6. 生成补丁(patch),把补丁发送给主开发者。
  7. 看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。
  8. 一般开发者之间解决冲突的方法,开发者之间可以使用pull 命令解决冲突,解决完冲突之后再向主开发者提交补丁。

从主开发者的角度(假设主开发者不用开发代码)看,git有以下功能:

  1. 查看邮件或者通过其它方式查看一般开发者的提交状态。
  2. 打上补丁,解决冲突(可以自己解决,也可以要求开发者之间解决以后再重新提交,如果是开源项目,还要决定哪些补丁有用,哪些不用)。
  3. 向公共服务器提交结果,然后通知所有开发人员。

GIT优缺点

优点

适合分布式开发,强调个体。

公共服务器压力和数据量都不会太大。

速度快、灵活。

离线工作。

缺点

资料少(起码中文资料很少)。

代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息

常用命令

专用名词的译名如下:

l  Workspace:工作区

l  Index / Stage:暂存区

l  Repository:仓库区(或本地仓库)

l  Remote:远程仓库

clear

清屏

git clean

git clean –fxd

-fx 删除所有未被版本控制的文件

-d 删除所有未被版本控制的目录

git config

git config --global
--list

git config --global
user.name "userName"

git config --global
user.email "userEmail"

git status

git status

git status –s

git add

git add .

git add filename

git stash

git stash                    #
暂时将未提交的变化移除

git stash pop             # 稍后再移入

git diff

git diff

# 此命令比较的是工作目录和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容。

git diff --cached [file]

# 查看已经暂存起来的文件(staged)和上次提交时的快照之间(HEAD)的差异

git diff HEAD

# 显示工作区和HEAD的差别

git diff
[first-branch]...[second-branch]

# 显示两次提交之间的差异

git commit

git commit -m "描述信息"

git reset

git reset –mixed

# 此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息

git reset –soft

# 回退到某个版本,只回退了commit的信息,不会恢复到index
file一级。如果还要提交,直接commit即可

git reset –hard

# 彻底回退到某个版本,本地的源码也会变为上一个版本的内容

git branch

git branch branchName

git branch –r

git branch –d branchName

git branch –D branchName

git checkout

git checkout .            # 恢复暂存区的所有文件到工作区

git checkout [file]              # 恢复暂存区的指定文件到工作区

git checkout -                                        # 切换到上一个分支

git checkout branchName                 # 切换到新分支

git checkout -b
branchName            # 创建并切换到新分支

git push

git push  <远程主机名>  <本地分支名>  <远程分支名>

git push origin master:master

# 将本地的master分支推送到远程主机origin上的对应master分支, origin 是远程主机名

git push origin master

# 如果远程分支被省略,如上则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建

git push
origin :master

# 删除远程master分支

git push origin

# 如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到origin主机的对应分支

git push

# 如果当前分支只有一个远程分支,那么主机名都可以省略,形如 git
push,可以使用git
branch -r ,查看远程的分支名

git remote

git remote –v

git merge

git merge branchName            # 相当于add+commit

git fetch

git fetch

# 相当于是从远程获取最新版本到本地,不会自动merge

git pull

git pull

# 相当于是从远程获取最新版本并merge到本地,等同于git
fetch + git merge

解决冲突

  1. git pull
  2. Beyond Compare工具比对修改
  3. 添加、提交、推送

参考资料

官网:https://git-scm.com/

资料:

当然,eclipse也是可以整合GIT的,大家可以下去查阅相关资料。

时间: 2024-10-15 17:22:54

【GIT】前世今生的相关文章

Git前世今生-版本控制软件的发展

版本控制软件发展至今已有40多年的历史. 最早的版本控制软件是1972年由Marc J. Rochkind开发的SCCS (Source Code Control System),通过将不同版本下的文件单独保存的形式完成,将同一版本的所有文件打包保存.SCCS使用了长达10年的时间,直到1982年RCS的问世. 1982年,Walter F.Tichy 发布了RCS (Revision Control System),提供了较SCCS更多的功能,并作为GNU项目的一部分. 1986年创建的CVS

还在使用pdf、word简历?简单五步实现github托管个人逼格简历

写在前面: 什么是git.github? git 版本控制工具 github 通过git工具做的版本控制的项目托管平台 项目开发肯定不止一个程序猿,多个程序猿针对同一个文件进行代码读写操作时,是先保存程序猿a还是程序猿b呢?这就很容易冲突,所以就有了git这种版本控制工具解决项目更新.慢慢的随着开源精神的发展以及在线的需求就有了github项目托管平台,对于git本地服务来说,github就是一个远程的仓库. 逼格在哪里? Github已经取代Sourceforge,成为最活跃的代码交流社区,一

Git分支的前世今生

导读 几乎所有的版本控制系统都以某种形式支持分支. 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线. 在很多版本控制系统中,这是一个略微低效的过程--常常需要完全创建一个源代码目录的副本.对于大项目来说,这样的过程会耗费很多时间. 1.1 Git 分支 - 分支简介 有人把 Git 的分支模型称为它的"必杀技特性",也正因为这一特性,使得 Git 从众多版本控制系统中脱颖而出. 为何 Git 的分支模型如此出众呢? Git 处理分支的方式可谓是难以置信的轻量,创建

Git上手初体验

一.Git的前世今生 Git是一个分布式版本控制/软件配置管理软件,原是Linux内核开发者林纳斯·托瓦兹(Linus Torvalds)为更好地管理Linux内核开发而设计. 二.Git的环境配置 1.当Git安装完成后首先要做的就是设置用户名称和e-mail地址.因为每次Git提交都需验证此信息.  $ git config --global user.name "Jack Doe" $ git config --global user.email [email protected

Git自学之路(一)-认识了解Git

转载请注明来源: http://blog.csdn.net/kjunchen/article/details/51981302 认识了解Git 在代码管理版本控制中,Git 是目前超级流行的工具.接下来就具体了解下 Git 的前世今生. 孙子曰:"知己知彼,百战不殆".因此, 对 Git 越了解应用也就越好. 关于版本控制 版本控制是一种记录一个或若干个文件内容变化,以便将来查阅特定版本修订情况的系统. 对于我们软件工程师而言,我们对保存着软件源代码的文件作版本控制,但实际上,你可以对

Windows Git+TortoiseGit简易使用教程

转载自 http://blog.csdn.net/jarelzhou/article/details/8256139 官方教程:http://tortoisegit.org/docs/tortoisegit/(英文版) 为什么选择Git 效率 很多人有一种习惯吧,什么软件都要最新的,最好的.其实吧,软件就是工具,生产力工具,为的是提高我们的生产力.如果现有的工具已经可以满足生产力要求了,就没有必要换了.生产效率高低应当是选择工具的第一位. 历史 开源世界的版本控制系统,经历了这么几代: 第一代,

git 把本地创建的项目放到github上

很早之前就注册了Github,但对其使用一直懵懵懂懂,很不熟练.直到昨天做完百度前端技术学院的task,想把代码托管到Github上的时候发现自己对于Git的操作是如此之愚钝,所以今天决定把Git好好学习一遍,好让自己以后能更好地使用Github,主要还是通过Git教程 - 廖雪峰的官方网站来学习.简要步骤可以直接看最后的总结. Git的安装就不说了. 第一步:我们需要先创建一个本地的版本库(其实也就是一个文件夹). 你可以直接右击新建文件夹,也可以右击打开Git bash命令行窗口通过命令来创

git基本操作

一.分支操作 git init 初始化仓库 git status 查看仓库变化 git add 从工作树提交到暂存区 git commit 从暂存区提交到本地仓库 git commit --amend 修改上条记录的备注 git commit -am 'comment' 提交到暂存区和本地仓库 git diff 工作树和暂存区插播 git diff HEAD 工作树和最本地仓库的差别 git checkout -- filename 撤销工作需修改(修改.删除) git log [filenam

《个人-GIT使用方法》

本文章转载于:http://blog.csdn.net/gemmem/article/details/7290125 1. Git概念 1.1. Git库中由三部分组成 Git 仓库就是那个.git 目录,其中存放的是我们所提交的文档索引内容,Git 可基于文档索引内容对其所管理的文档进行内容追踪,从而实现文档的版本控制..git目录位于工作目录内. 1) 工作目录:用户本地的目录: 2) Index(索引):将工作目录下所有文件(包含子目录)生成快照,存放到一个临时的存储区域,Git 称该区域