广告
返回顶部
首页 > 资讯 > 数据库 >git 学习笔记
  • 404
分享到

git 学习笔记

2024-04-02 19:04:59 404人浏览 八月长安
摘要

  git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,为了帮助管理 linux 内核开发而开发的一个开放源码的版本控制软件。     

  git是一款免费、开源分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,为了帮助管理 linux 内核开发而开发的一个开放源码的版本控制软件。

       GitHub网站为开源项目免费提供Git存储。

       GitLab 是一个用于仓库管理系统的开源项目。使用 Git作为代码管理工具,并在此基础上搭建起来的WEB服务。

       Git 和其他版本控制系统的主要差别在于,Git 只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异。这类系统(CVS,Subversion,Perforce,Bazaar 等等)每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容,Git 是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一链接。Git 的工作方式如下图。

 

git 学习笔记

Git的优点:

  1. 处理速度快

    操作都只需要访问本地文件和资源,不用连网

  2. 时刻保持数据完整性

    在保存到 Git 之前,所有数据都要进行内容的校验和(checksum)计算,并将此结果作为数据的唯一标识和索引。如果文件在传输时变得不完整,或者磁盘损坏导致文件数据缺失,Git 都能立即察觉。 实际上,所有保存在 Git 数据库中的东西都是用此哈希值来作索引的,而不是靠文件名。 

  3. 多数操作仅添加数据

    常用的 Git 操作大多仅仅是把数据添加到数据库。因为任何一种不可逆的操作,比如删除数据,都会使回退或重现历史版本变得困难重重,在 Git 里,一旦提交快照之后就完全不用担心丢失数据,特别是养成定期推送到其他仓库的习惯。 

Git文件的三种状态:

       对于任何一个文件,在 Git 内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged)。已提交表示该文件已经被安全地保存在本地数据库中了;已修改表示修改了某个文件,但还没有提交保存;已暂存表示把已修改的文件放在下次提交时要保存的清单中。 由此我们看到 Git 管理项目时,文件流转的三个工作区域:Git 的工作目录,暂存区域,以及本地仓库。我们可以从文件所处的位置来判断状态:如果是 Git 目录中保存着的特定版本文件,就属于已提交状态;如果作了修改并已放入暂存区域,就属于已暂存状态;如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。

      

  1. 每个项目都有一个 Git 目录(如果 git clone 出来的话,就是其中 .git 的目录;如果 git clone --bare 的话,新建的目录本身就是 Git 目录。),它是 Git 用来保存元数据和对象数据库的地方。该目录非常重要,每次克隆镜像仓库的时候,实际拷贝的就是这个目录里面的数据。 

  2. 从项目中取出某个版本的所有文件和目录,用以开始后续工作的叫做工作目录。这些文件实际上都是从 Git 目录中的压缩对象数据库中提取出来的,接下来就可以在工作目录中对这些文件进行编辑。 

  3. 所谓的暂存区域只不过是个简单的文件,一般都放在 Git 目录中。有时候人们会把这个文件叫做索引文件,不过标准说法还是叫暂存区域。 

基本的 Git 工作流程如下: 

  1. 在工作目录中修改某些文件。 

  2. 对修改后的文件进行快照,然后保存到暂存区域。 

  3. 提交更新,将保存在暂存区域的文件快照永久转储到 Git 目录中。

Git的安装过程(Centos

1.检查Git的版本号,CentOS默认安装的是git 1.7.X版本,可将其更新到2.0.5

# git --version

2.安装所需的软件包

# yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel

# yum -y install  GCc perl-ExtUtils-MakeMaker

3.删除现有的git(yum remove 命令尽可能不要使用)

# yum -y remove git

4.使用软件包安装

# wget httos://www.kerenl.org/pub/software/scm/git/git-2.0.5.tar.gz

# tar zxf git-2.0.5.tar.gz -C /usr/src

# cd /usr/src/git-2.0.5/

# make prefix=/usr/local/git all

# make prefix=/usr/local/git install

# echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/exprofile

# source /etc/exprofile

5.再检查Git的版本号

# git --version

版本库的创建及使用

版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

# mkdir /data/git               //仓库路径

# git init                   //通过git init命令把这个目录变成Git可以管理的仓库

初始化空的 Git 版本库于 /data/git/.git/

# ll -ah                    //可看到隐藏的.get目录,用来跟踪管理版本库

总用量 12K

drwxr-xr-x. 3 root root 4.0K 3月  18 15:53 .

drwxr-xr-x. 3 root root 4.0K 3月  18 15:53 ..

drwxr-xr-x. 7 root root 4.0K 3月  18 15:53 .git

因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。

配置设置:

# git config --global user.name "pansy"            //设置名字

# git config  user.email "pansy@example.com"        //Email地址

注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

把文件放到Git仓库

# cd /data/git              //文件要放到仓库目录下或子目录下

# cat a.txt

this is a txt

# git add a.txt              //把文件添加到仓库

# git add a.txt b.txt          //也可以添加多个文件

# git commit -m "add 2 files"     //提交文件,-m后面输入的是本次提交的说明

[master(根提交) e450576] add 2 files

 2 files changed, 2 insertions(+)

 create mode 100644 a.txt

 create mode 100644 b.txt

我们已经成功地添加并提交了一个a.txt文件,如修改a.txt文件

# cat a.txt

this is one txt

# git status            //git status时刻掌握仓库当前的状态,它告诉我们

位于分支 master           a.txt被修改过了,但还没有准备提交的修改,但不能看修改的内容

尚未暂存以备提交的变更:

  (使用 "git add <file>..." 更新要提交的内容)

  (使用 "git checkout -- <file>..." 丢弃工作区的改动)


修改:     a.txt


修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

# git diff a.txt             //可以查看修改的内容

diff --git a/a.txt b/a.txt

index 7f38737..3cc29a4 100644

--- a/a.txt

+++ b/a.txt

@@ -1 +1 @@

-this is a txt

+this is one txt

版本回退

# git log                //查看历史记录,提交日志

commit bb52f061bae3978b2a72244d23D5133d38e37efe          //commit id 

Author: pansy <pansy@example.com>

Date:   Sat Mar 18 17:08:53 2017 +0800


    修改


commit e450576a118e88aea0953e384b19f3a1abd1ed9f

Author: pansy <pansy@example.com>

Date:   Sat Mar 18 16:50:01 2017 +0800


    add 2 files

现在把a.txt回退到上一个版本,也就是“add 2 files”的那个版本

Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交id,上一个版本就是HEAD^,上上一个版本就是HEAD^^,往上100个版本写100个^数不过来时,可写成HEAD~100。

# git reset --hard HEAD^             //回退到上个版本

# git log                      //查看日志

commit e450576a118e88aea0953e384b19f3a1abd1ed9f

Author: pansy <pansy@example.com>

Date:   Sat Mar 18 16:50:01 2017 +0800


    add 2 files

# git reset --hard HEAD^ a.txt          //回退到上一个版本,把版本库、暂存区和工作区都

# git log                          回退到HEAD的前一个版本。

commit e450576a118e88aea0953e384b19f3a1abd1ed9f

Author: pansy <pansy@example.com>

Date:   Sat Mar 18 16:50:01 2017 +0800


    add 2 files

此时如果想恢复那个版本,可用 git reset --hard id     

# git reset --hard bb52f061bae           //id不用写全,会自动查找              

HEAD 现在位于 bb52f06 修改

# git log

commit bb52f061bae3978b2a72244d23d5133d38e37efe

Author: pansy <pansy@example.com>

Date:   Sat Mar 18 17:08:53 2017 +0800


    修改


commit e450576a118e88aea0953e384b19f3a1abd1ed9f

Author: pansy <pansy@example.com>

Date:   Sat Mar 18 16:50:01 2017 +0800


    add 2 files

如果找不到commit id,git reflog记录了你的每一次命令

# git reflog                   //可以查看到commit id

e450576 HEAD@{0}: reset: moving to HEAD^

bb52f06 HEAD@{1}: reset: moving to bb52f061bae

e450576 HEAD@{2}: reset: moving to HEAD^

bb52f06 HEAD@{3}: commit: 修改

e450576 HEAD@{4}: commit (initial): add 2 files

当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout  file。

当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,第二步用git checkout --file。

当你已经提交了不合适的修改到版本库时,想要撤销本次提交,前提是没有推送到远程库时用上面的版本回退。

删除文件

1.完全删除文件(需要提交)

# cat b.txt 

this is another txt

# git rm b.txt

rm 'b.txt'

# git status

位于分支 master

要提交的变更:

  (使用 "git reset HEAD <file>..." 撤出暂存区)


删除:     b.txt


# git commit -m "删除b.txt"

[master e380c9f] 删除b.txt

 1 file changed, 1 deletion(-)

 delete mode 100644 b.txt

# cat b.txt

cat: b.txt: 没有那个文件或目录

2.误删除文件

# git rm b.txt

rm 'b.txt'

# git reset 

重置后撤出暂存区的变更:

Db.txt

# ls

a.txt

# git checkout b.txt

# ls

a.txt  b.txt

远程仓库

1.使用提供Git仓库托管服务的网站(GitHub)

GitHub网址:https://github.com/

(1)注册(密码至少7位数,且至少有一个为小写字母)

(2)选择付费或是免费(此处选免费)

(3)使用

  a.ssh免密码

    # ssh-keygen -t rsa -C "pansy@example.com"

    Generating public/private rsa key pair.

    Enter file in which to save the key (/root/.ssh/id_rsa): 

    Enter passphrase (empty for no passphrase): 

    Enter same passphrase again: 

    Your identification has been saved in /root/.ssh/id_rsa.

    Your public key has been saved in /root/.ssh/id_rsa.pub.

  b.将ssh公钥传到GitHub

   # cd ~/.ssh       //用户的家目录下

   # cat id_rsa.pub 

 ssh-rsa        AAAAB3NzaC1yc2EAAAABIwAAAQEA0y8b25WTVzcZccZCTD8b/4RGAPq6BqbJh0Qe4/o1/IJZqAywusH8FdAL/n0qWE6jhKxHj2g8qgL0GJudyAyyV9Fnbs0XAyjaLeJZ9Y0xS/lVCYcA669gVbZefrsjwxQhpeK4zcuZGkcUJcq8RVA7rRGoIlO+juhGE/B8UqkNrOdCFnoaWTn7CvcGhCeEnXKf4VJoiH6HpYiRl0D2s3qIo2CGtsg/lPd3nsnP73bmf/OsfsUva2CZEMLELWQR193oN8J6VbUkVAqdxRJTi8DlsU/rVxCFfYpxCVqXAh5gvukuGluaZhymV30bw3o+vrQ85gS2XZMQ6a02EjxgE97FZw== pansy@example.com

   登陆网站 (将id_rsa.pub上传到Key上,添加即可) git 学习笔记添加好的样子

git 学习笔记  c.在网站上添加远程库(需要打开邮件同意)

  git 学习笔记

  注:远程库是公开的,私有的需要交钱~~~~

d.在本地仓库目录下,上传到gitHub远程库

 # cd /data/git

 # git remote add origin git@github.com:pansypansy/pansy.repo.git  

 # git push -u origin master             //将本地库上传的命令  -u第一次时要输入

 查看

 Https://github.com/用户名/远程库名

 git 学习笔记

 e.从远程库上克隆到本地

  git 学习笔记

   # git clone git@github.com:pansypansy/two.repo.git          //远程库克隆

   正克隆到 'two.repo'...

   remote: Counting objects: 3, done.

   remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0

   接收对象中: 100% (3/3), 完成.

   检查连接... 完成。

   # cd two.repo/

  # ls

    README.md

2.本地的git服务器

 GitHub就是一个免费托管开源代码的远程仓库。但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给GitHub交保护费,那就只能自己搭建一台Git服务器作为私有仓库使用。

 (1)安装git

   # yum -y install git 或 用源码装

 (2)创建用户

   # useradd git

 (3)创建证书登录

   收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入 到/home/git/.ssh/authorized_keys文件里,一行一个。   

 (4)初始化Git仓库

   先选定一个目录作为Git仓库,假定是/data/sample.git,在/data目录下输入命令:

   # cd /data

   # git init --bare sample.git

   # chown -R git:git /data/sample.git/

 (5)禁用shell登录

    出于安全考虑,git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成

    git:x:500:500::/home/git:/bin/bash

    改为:

     git:x:500:500::/home/git:/usr/bin/git-shell

 (6)克隆远程仓库

    git clone git@server:/data/sample.git

您可能感兴趣的文档:

--结束END--

本文标题: git 学习笔记

本文链接: https://www.lsjlt.com/news/43736.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • git 学习笔记
      Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。     ...
    99+
    2022-10-18
  • 学习笔记-TP5框架学习笔记\(路由\)
    TP5框架简单理解 (PS:只做粗略、关键知识的记录,TP程序的开始。详情请阅读官方手册) 1. 架构总览 TP程序的开始 PHP >=5.3.0, PHP7 ThinkPHP5.0应用基于MVC(模型-视图-控制器)的方...
    99+
    2023-10-25
    学习 php 开发语言
  • 学习笔记3
    一文件查找和压缩1文件查找locate 搜索依赖于数据库,非实时搜索,搜索新建文件需手动更新,适于搜索稳定不频繁修改文件 find 实时搜索,精确搜索,默认当前目录递归搜索 find用法 -maxdepth...
    99+
    2023-01-31
    学习笔记
  • python3学习笔记
    好久不用python,努力捡起来ing python3语法 字符串 repr()把其他类型变量转换为字符串 ord()把单个字符转换为相应的ascii码 int()把其他进制的“字符串”转换为十进制 int(str,n...
    99+
    2023-01-31
    学习笔记
  • Android学习笔记
    LinearLayoutCompat 线性布局 android:orientation=“vertical” 指定布局内控件排列方式为 垂直排...
    99+
    2022-06-06
    android学习 Android
  • 20200619 学习笔记
    主键和唯一的区别 主键:唯一、不为空、只能有一个、可以组合但不推荐 唯一:唯一、可为空、可以多个、可以组合但不推荐 外键 要求在从表设置外键关系 从表的外键列的类型和主表的关联列的类型要求一致或兼容 主...
    99+
    2019-12-15
    20200619 学习笔记
  • 20200618_MySQL学习笔记
    加号 + Mysql中加号只能做运算符 select 100+90  ==> 190  select "100"+90 ==> 190  如果有一个是字符串,那么尝试转换成数值型,转换成功 select "ja...
    99+
    2014-11-26
    20200618_MySQL学习笔记
  • 20200617学习笔记
    基数  一个索引上不同的值的个数,我们称之为“基数”(cardinality)。也就是说,这个基数越大,索引的区分度越好 我们可以使用 show index 方法,看到一个索引的基数 MySQL 是怎样得到索引的基数的呢? 采样...
    99+
    2022-02-22
    20200617学习笔记
  • 20200616学习笔记
    count(*) 的实现方式 在不同的 MySQL 引擎中,count(*) 有不同的实现方式 MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个数,效率很高 而 InnoDB ...
    99+
    2018-10-19
    20200616学习笔记
  • MySQL学习笔记
    作者: Grey 原文地址:MySQL学习笔记 说明 注:本文中的SQL语句如果用到了特定方言,都是基于MySQL数据库。 关于DDL DDL 的英文全称是 Data Definition Language,中文是数据定义语言。它定义了...
    99+
    2015-01-17
    MySQL学习笔记
  • Mycat 学习笔记
    概述 1. Mycat 是什么? Mycat 是数据库中间件,连接 Java 应用程序和数据库,它的作用如下: 读写分离 数据分片:垂直拆分(分库)、水平拆分(分表)、垂直+水平拆分(分库分表) 多数据源整合 2....
    99+
    2019-10-05
    Mycat 学习笔记
  • postgres学习笔记
    将一个标识符变得受限同时也使它变成大小写敏感的,反之非受限名称总是被转换成小写形 式。例如,标识符FOO、foo和"foo"在PostgreSQL中被认为是相同的,而"Foo"和"FOO"则互 不相同且也不同于前面三个标识符(Postgr...
    99+
    2018-01-09
    postgres学习笔记
  • sqlite3 学习笔记
    #!/usr/bin/env python3 # -*- coding: utf-8 -*- # @descrip : operate SqLite intrface # @Time : 2020/04/22 21:57 # @Au...
    99+
    2017-12-28
    sqlite3 学习笔记 数据库入门 数据库基础教程
  • xtrabackup学习笔记
    wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.7/binary/tarball/percona-xtrab...
    99+
    2022-10-18
  • AIDE 学习笔记
    参考:http://www.iamle.com/archives/1664.htmlAIDE的用法和tripwire类似。都是通过生成一份文件指纹的数据库,然后对比。所以,我们最好在刚安装完系统后,就安装这...
    99+
    2022-10-18
  • oracle学习笔记
    oracle安装1.         安装virtualbox:# yum install gcc kernel-devel ...
    99+
    2022-10-18
  • Python学习笔记
    Python介绍 Python是一种解释型、面向对象的语言。 官网:www.python.org Python环境 解释器:www.python.org/downloads 运行方式: 交互模式。在IDLE中运行。 脚本模式。文件的后缀...
    99+
    2023-01-30
    学习笔记 Python
  • tornado学习笔记
    一.UIMOTHODS: 1.在项目目录创建uimothods.py文件(名称可以任意)内容: def test2(self): return ('hello uimothods')2.tornado项目文件中导入并注册: #导入f...
    99+
    2023-01-30
    学习笔记 tornado
  • H3CNE学习笔记
      H3CNE五日“游” ——之第一天 废话少说 直接进入真题!!!!(哈哈 ) H3CNE   H3C认证初级网络工程师 第    一   节 路由器、交换机及其操作系统介绍 路由器 1、 路由器的作用 连接具有不同介质的链路 连接网络或...
    99+
    2023-01-31
    学习笔记 H3CNE
  • Python 学习笔记
    rs=Person.objects.all() all返回的是QuerySet对象,程序并没有真的在数据库中执行SQL语句查询数据,但支持迭代,使用for循环可以获取数据。 print rs.query 会打印出原生sql语句 rs=Pe...
    99+
    2023-01-31
    学习笔记 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作