Git

 ①大环境:Git 诞生于一个极富纷争大举创新的年代。Linux 内核开

源项目有着为数众广的参与者。绝大多数的 Linux 内核维护工作都花在了提交补丁和保存

归档的繁琐事务上(1991-2002年间)。到 2002 年,整个项目组开始启用分布式版本控制

系统 BitKeeper 来管理和维护代码。

到 2005 年的时候,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结

束,他们收回了免费使用 BitKeeper 的权力。这就迫使 Linux 开源社区(特别是 Linux

的缔造者 Linus Torvalds )不得不吸取教训,只有开发一套属于自己的版本控制系统才不

至于重蹈覆辙。他们对新的系统订了若干目标

②Git和svn的对比

svn属于集中式版本管理控制系统,系统中保存了所有文件的修订版本,而协同工作人员通过连接svn服务器,提取出最新的文件,获取提交更新

下图就是标准的集中式版本控制工具管理方式

集中管理方式在一定程度上看到其他开发人员在干什么,而管理员也可以很轻松掌握每个人的开发权限。

但是相较于其优点而言,集中式版本控制工具缺点很明显:

  • 服务器单点故障
  • 容错性差

Git原理分析

Git 和其他版本控制系统的主要差别在于,Git 只关心文件数据的整体是否发生变化,而

大多数其他系统则只关心文件内容的具体差异。这类系统(CVS,Subversion,Perforce,Bazaar

等等)每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容

Git 并不保存这些前后变化的差异数据。实际上,Git 更像是把变化的文件作快照后,记

录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件

作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git 不会再

次保存,而只对上次保存的快照作一连接。Git 的工作方式就像图 1.5 所示

这是 Git 同其他系统的重要区别。它完全颠覆了传统版本控制的套路,并对各个环节的

实现方式作了新的设计。Git 更像是个小型的文件系统,但它同时还提供了许多以此为基础

的超强工具,而不只是一个简单的 VCS。

③特点

操作的本地执行

Git 不用跑到外面的服务器上去取数据回来,而直接从本地数据库读取后展示给你看。所以任何时候你都可以马上翻阅,无需等待。

如果想要看当前版本的文件和一个月前的版本之间有何差异,Git 会取出一个月前的快照和

当前文件作一次差异运算,而不用请求远程服务器来做这件事,或是把老版本的文件拉到本

地来作比较。

也就是说,git无须联网,也可以实现离线上传

数据的完整性

在保存到 Git 之前,所有数据都要进行内容的校验和(checksum)计算,并将此结果作

为数据的唯一标识和索引。换句话说,不可能在你修改了文件或目录之后,Git 一无所知。

这项特性作为 Git 的设计哲学,建在整体架构的最底层。所以如果文件在传输时变得不完

整,或者磁盘损坏导致文件数据缺失,Git 都能立即察觉。

三种状态

对于任何一个文件,在 Git 内都只有三

种状态:已提交(committed),已修改(modified)和已暂存(staged)。

已提交表示该文件已经被安全地保存在本地数据库中了;

已修改表示修改了某个文件,但还没有提交保存;

已暂存表示把已修改的文件放在下次提交时要保存的清单中。

由此我们看到 Git 管理项目时,文件流转的三个工作区域:Git 的本地数据目录,工作目录以及暂存区域。

④下载

下载地址:https://git-scm.com/download

windows傻瓜式安装下一步即可。

linux下的安装服务端

1、安装git服务环境准备
yum -y install curl curl-devel zlib-devel openssl-devel perl cpio expat-devel gettext-devel gcc cc
2、下载git-2.5.0.tar.gz
1)解压缩
2)cd git-2.5.0
3)autoconf
4)./configure
5)make
6)make install
3、添加用户
adduser -r -s /bin/sh -c 'git version control' -d /home/git git
4、设置/home/git文件夹操作权限
mkdir /home/git
chown git:git /home/git
5、设置密码
passwd git
输入两次密码
6、切换到git用户
su git
7、创建git仓库
git --bare init /home/git/first
注意:如果不使用“--bare”参数,初始化仓库后,提交master分支时报错。这是由于git默认拒绝了push操作,需要.git/config添加如下代码:
[receive]
      denyCurrentBranch = ignore
推荐使用:git --bare init初始化仓库。

下载tortoisegit:https://tortoisegit.org/download/  相当于一个客户端。

⑤Git的工作流程

  1)初始化:需要说明的是本地开发人员commit提交,需要使用自己本地仓库,只有先提交本地仓库,然后才能提交到远程仓库。本地仓库可以说是共享仓库的备份。

  2)建立共享的版本库

在F盘建立仓库repository/git下面建立git的共享版本库,用户开发人员上传代码,更新代码等等

建立共享版本库有2种方式,一种是直接初始化,另一种是clone远程仓库

在当前目录下初始化了一个git仓库

初始化后,在当前目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都

存放在这个目录中。不过目前,仅仅是按照既有的结构框架初始化好了里边所有的文件和目

,但我们还没有开始跟踪管理项目中的任何一个文件。

如果当前目录下有几个文件想要纳入版本控制,需要先用 git add 命令告诉 Git 开始对

这些文件进行跟踪,然后提交


建立用户本地仓库

本地仓库其实就是用户的工作空间,在git中本地仓库和工作空间项目如影随行,工作空间即是git本地仓库。因此本地仓库需要从共享仓库中检出文件。

我们可以先初始化一个仓库,然后从共享仓库中pull下载文件,也可以直接clone共享版本库中文件

使用的是 clone 而不是 checkout。这是个非常重要的差别,Git 收取的是项目历史的所有

数据(每一个文件的每一个版本),服务器上有的数据克隆之后本地也都有了。实际上,即

便服务器的磁盘发生故障,用任何一个克隆出来的客户端都可以重建服务器上的仓库,回到

当初克隆时的状态

克隆当前创建code仓库:前面初始化了一个,这里相当于复制,

命令:git clone /f/repository/git/.git/

克隆并重命名:git clone /f/repository/git/.git/ thegit


检查当前文件的状态

要确定哪些文件当前处于什么状态,可以用 git status 命令。如果在克隆仓库之后立即

执行此命令,会看到类似这样的输出:

$ git status

# On branch master

nothing to commit (working directory clean)

这说明你现在的工作目录相当干净。换句话说,当前没有任何跟踪着的文件,也没有任何

文件在上次提交后更改过。此外,上面的信息还表明,当前目录下没有出现任何处于未跟踪

的新文件,否则 Git 会在这里列出来。最后,该命令还显示了当前所在的分支是 master,

这是默认的分支名称,实际是可以修改的,现在不必多虑。

现在让我们用 vim 编辑一个新文件 README,保存退出后运行 git status 会看到该文件

出现在未跟踪文件列表中:

$ vim README    文件编辑参考linux命令即可。

$ git status

# On branch master

# Untracked files:

# (use "git add <file>..." to include in what will be committed)

#

# README

nothing added to commit but untracked files present (use "git add" to track)

就是在“Untracked files”这行下面。Git 不会自动将之纳入跟踪范围,除非你明明白

白地告诉它这么做,因而不用担心把临时文件什么的也归入版本管理。不过现在我们确实想

要跟踪管理 README 这个文件。


设置个人信息

首先要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要每次 Git 提

交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录

$ git config --global user.name "John Doe"

$ git config --global user.email johndoe@example.com

如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你

所有的项目都会默认使用这里配置的用户信息。如果要在某个特定的项目中使用其他名字或

者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config文件里。

git config user.name "user1"
git config user.email "user1@163.com"

设置配置文件在.git目录下config文件,文件内容如下:

$ cat config
[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true
[remote "origin"]
        url = F:/repository/git/.git/
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master
[user]
        name = user1
        email = user1@163.com

  • 添加

在user1用户中创建一个文件。

命令:touch a.java

创建成功后,此文件并没有纳入版本控制,因此不能提交。提交之前需要先纳入版本控制:

命令:git add a.java

Git通过命令add把文件纳入git版本控制中


  • 提交

此时user1用户就可以提交:

使用如下命令提交在暂存区文件到仓库中,提交时必须添加注释信息,-m就表示添加注释信息。

git commit -m "the first" a.java

提交文件后,需要把文件提交共享版本库中:origin记录clone来源地

git push origin master


  • 更新

git pull

直接从共享版本库中下拉项目文件即可


Eclipse集成egit:问度娘吧

用户信息

添加用户信息,提交代码会携带提交者身份信息

 

 

将工程添加到本地仓库


添加暂存区


提交

注意:提交时必须编写提交信息,不能添加空格。


共享版本库

本地用户提交先提交到本地版本库,如果需要提交到共享版本库,那么就需要push到远程共享版本库

这里如果填写码云的地址,就可以将代码直接上传到网上


克隆:类似svn中的checkout但是功能更加强大

选择git视图,创建共享版本库:

指定共享版本库位置,连接共享版本库。更新代码到本地仓库

创建新的本地仓库:

本地仓库创建完毕:

此操作是把远程仓库克隆到本地仓库。

接下来需要把本地仓库项目导入到本地eclipse中进行开发

直接导入项目:


更新


解决冲突

使用合并工具merge tool解决冲突

合并有冲突代码

添加排除文件(提交之前需要将不需要的文件剔除)


添加项目暂存区


提交本地仓库


Push远程仓库

Git服务器commit是提交到本地仓库,如果需要提交到远程服务共享版本库,需要push

远程仓库地址


聚合工程提交

聚合工程提交需要排除的文件较多,注意排除文件语法的写法

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值