Git理论、原理、操作

Git理论、原理、操作

  • Git简介:
    一个开源的分布式版本控制系统。用于处理任何大大小小的项目,是一个开放源码的版本控制软件。
  • Git与SVG的区别:
    1、git是分布式的
    2、git把内容按元数据方式存储,svg按文件
    3、git分支和svg分支不同。svg中就只是版本库的另外一个目录
    4、git没有全局的版本号,svg有
    5、git的内容完整性要优于svg
  • Git安装:
    1、Linux:
    2、Window:
    安装包下载地址:https://gitforwindows.org/
    3、Mac
    下载地址为:http://sourceforge.net/projects/git-osx-installer/
  • Git使用前常用配置:
    1、 配置个人的用户名称和电子邮件地址:
$ git config --global user.name "runoob"
$ git config --global user.email test@runoob.com

2、文本编辑器:

git config --global core.editor emacs

3、差异分析工具:

$ git config --global merge.tool vimdiff

4、查看配置信息: git config --list

$ git config --list也可以直接查阅某个环境变量的设定,只要把特定的名字跟在后面即可
$ git config user.name
name
  • Git工作流程:
    一般工作流程如下:
    1、克隆 Git 资源作为工作目录。
    2、在克隆的资源上添加或修改文件。
    3、如果其他人修改了,你可以更新资源。
    4、在提交前查看修改。
    5、提交修改。
    6、在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。
  • Git工作区、暂存区、版本库:
    概念:
    工作区:个人电脑里的项目目录
    暂存区index:又叫索引,一般存放在“.git目录下”
    版本库master:工作区有一个隐藏目录.git
    三者间关系:
    在这里插入图片描述
  • Git创建仓库:
    1、git init
git init //使用当前目录作为Git仓库, 执行完后会在当前目录生成一个 .git 目录。
git init newrepo // 初始化后,会在 newrepo 目录下会出现一个名为 .git 的目录$ git add *.c
$ git add README
$ git commit -m '初始化项目版本'
以上命令将目录下以 .c 结尾及 README 文件提交到仓库中

2、git clone:从现有 Git 仓库中拷贝项目

git clone 时,可以所用不同的协议,包括 ssh, git, https 等,其中最常用的是 ssh,因为速度较快,还可以配置公钥免输入密码。各种写法如下:
git clone git@github.com:fsliurujie/test.git         --SSH协议
git clone git://github.com/fsliurujie/test.git          --GIT协议
git clone https://github.com/fsliurujie/test.git      --HTTPS协议
  • Git基本操作:
// 初始化
$ mkdir runoob // 新建文件夹
$ cd runoob/  // 转到新文件夹目录下
$ git init // 初始化
$ ls -a // 查看文件夹目录
.    ..    .git
$ cat  hello.vue //查看 文件内容$ git clone [url] 
// 克隆项目。默认情况下,Git 会按照你提供的 URL 所指示的项目的名称创建你的本地项目目录。 通常就是该 URL 最后一个 / 之后的项目名称。如果你想要一个不一样的名字, 你可以在该命令后加上你想要的名称。
$ cd 项目名称 // 切换到i项目目录下
$ ls // 查看项目目录$ git branch //列出本地分支
$ git branch (branchname) // 创建分支
$ git branch -d (branchname) // 删除分支
$ git checkout (branchname) // 切换分支,当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容
$ git checkout -b (branchname)  // 创建新分支并立即切换到该分支下$ git status // 查看在你上次提交之后是否有修改
$ git status -s // 获得简短的结果输出将添加或修改提交到缓存:
$ git add README hello.php  // 添加多个指定的文件
$ git add . // 添加当前项目的所有文件git diff 有两个主要场景:
查看执行 git status 的结果的详细信息;
显示已写入缓存与已修改但尚未写入缓存的改动的区别。
$ git diff // 查看尚未缓存的改动
$ git diff --cached // 查看已缓存的改动
$ git diff HEAD  // 查看已缓存的与未缓存的所有改动
$ git diff --stat  // 显示摘要而非整个 diffgit commit将缓存区的内容添加到仓库
git为了记录用户的每一次提交,所以第一步会确认需要配置用户名和邮箱地址
$ git config --global user.name 'runoob' // 配置用户名
$ git config --global user.email test@runoob.com // 配置邮箱地址git reset HEAD 命令用于取消已缓存的内容,即之前 git add 添加,但是工作区不受影响
$ git reset HEAD hello.php  // 取消其中一个文件的缓存
$ git commit -m '说明' // 再执行 git commit,只会将 剩余的缓存文件的改动提交git rm 删除文件
git rm <file>
git rm -f <file> //删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f
git rm --cached <file> //直接从暂存区删除文件,工作区则不做出改变$ git checkout .
$ git checkout -- <file> // 会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。
$ git checkout HEAD .
$ git checkout HEAD <file> 
会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。$ git merge   (branchname)  // 合并分支$ git push origin [branch]  // 推送到远程仓库$ git log // 查看提交历史
$ git log --oneline // 查看历史记录的简洁的版本
$ git log --graph // 查看历史中什么时候出现了分支、合并
$ git log --reverse // 逆向显示所有日志
$ git log --author //只查找指定用户的提交日志$ git tag -a v1.0   // 打标签。比如说,我们想为我们的 runoob 项目发布一个"1.0"版本。 我们可以用 git tag -a v1.0 命令给最新一次提交打上(HEAD)"v1.0"的标签。
-a 选项意为"创建一个带注解的标签"。 不用 -a 选项也可以执行的,但它不会记录这标签是啥时候打的,谁打的,也不会让你添加个标签的注解。$ git remote //查看当前配置有哪些远程仓库
$ git remote -v  // 加上 -v 参数,你还可以看到每个别名的实际链接地址。
$ git remote rm [别名] // 删除远程仓库$ git remote add origin2 git@github.com:tianqixin/runoob-git-test.git //添加仓库 origin2
$ git remote rm origin2 //# 删除仓库 origin2提取远程仓库
$ git fetch  origin // 1、从远程仓库下载新分支与数据
$ git merge origin/master // 2、从远端仓库提取数据并尝试合并到当前分支
  • 远程仓库:
$ git remote add [shortname] [url] // 添加一个新的远程仓库本例以 Github 为例作为远程仓库,由于你的本地 Git 仓库和 GitHub 仓库之间的传输是通过SSH加密的,所以我们需要配置验证信息:
使用以下命令生成 SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"
之后会要求确认路径和输入密码回到 github 上,进入 Account => Settings(账户配置)=> 左边选择 SSH and GPG keys,然后点击 New SSH key 按钮,title 设置标题,可以随便填,粘贴在你电脑上生成的 key验证是否成功,输入以下命令:
$ ssh -T git@github.com
Hi tianqixin! You've successfully authenticated, but GitHub does not provide shell access.
  • Git 服务器搭建:
    2019 年开始 Github 私有存储库也可以无限制使用。
    这当然我们也可以自己搭建一台 Git 服务器作为私有仓库使用。

1、安装Git

$ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel
$ yum install git

2、创建证书登录
收集所有需要登录的用户的公钥,公钥位于id_rsa.pub文件中,把我们的公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
如果没有该文件创建它:

$ cd /home/git/
$ mkdir .ssh
$ chmod 755 .ssh
$ touch .ssh/authorized_keys
$ chmod 644 .ssh/authorized_keys

3、初始化Git仓库
首先我们选定一个目录作为Git仓库,假定是/home/gitrepo/runoob.git,在/home/gitrepo目录下输入命令:

$ cd /home
$ mkdir gitrepo
$ chown git:git gitrepo/
$ cd gitrepo$ git init --bare runoob.git
Initialized empty Git repository in /home/gitrepo/runoob.git/
以上命令Git创建一个空仓库,服务器上的Git仓库通常都以.git结尾。然后,把仓库所属用户改为git:
$ chown -R git:git runoob.git

4、克隆仓库

$ git clone git@192.168.45.4:/home/gitrepo/runoob.git
Cloning into 'runoob'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.
192.168.45.4 为 Git 所在服务器 ip ,你需要将其修改为你自己的 Git 服务 ip。
这样我们的 Git 服务器安装就完成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android中让Service被关闭后再重新启动

2019独角兽企业重金招聘Python工程师标准>>> --------------------------------------------------------------------------- 转载&#xff1a;http://blog.csdn.net/arui319 --------------------------------------------------------------------------- 如何做…

CloudStack学习-3

此次试验主要是CloudStack结合openvswitch 背景介绍 之所以引入openswitch&#xff0c;是因为如果按照之前的方式&#xff0c;一个网桥占用一个vlan&#xff0c;假如一个zone有20个vlan&#xff0c;那么岂不是每个vlan都要创建一个桥&#xff0c;维护很麻烦 openvswitch是由Nic…

EIGRP中非等价负载均衡的实现

Eigrp为思科私有协议&#xff0c;其协议号为88&#xff0c;采用组播&#xff08;224.0.0.10&#xff09;和单播的方式发送路由更新&#xff0c;并且支持等价和非等价负载均衡。首先来看下Eigrp选择路由的过程&#xff1a;Eigrp中有三张表&#xff0c;分别为Eigrp邻居表、Eigrp拓…

webpack+vue实现项目

webpackvue实现TODO慕课网课程笔记 课程目的&#xff1a; 前端工程&#xff1a;讲明一些前端基础的概念&#xff1b;如何搭建一个工程&#xff0c;一个工程解决了哪些问题 webpack&#xff1a;预计未来前端开发必备的基础 vue&#xff1a;相对于react使用比较简单方便&#xf…

JAVA API

----API概念&#xff1a; API&#xff08;Application Programming Interface&#xff09;应用程序接口。 在Java中的API就是JDK中提供的各种功能。如CreateWindow就是一个API函数&#xff0c;在应用程序中如果要调用这个函数那么操作系统就会按该函数提供的参数信息产生一个相…

Javascript基础(二)

Javascript基础&#xff08;二&#xff09;事件&#xff1a;条件语句类型转换正则表达式regexp错误抛出void事件&#xff1a; 是发生在HTML元素上的行为&#xff0c;可以是浏览器行为&#xff0c;可以是用户行为 a) html 元素添加事件属性&#xff1a; <p οnclick alert…

网页字体设置你了解吗?

以前做项目的时候就依葫芦画瓢的设置 { font-family:arial,”microsoft yahei”,simsun,sans-self; } 等类似的字体&#xff0c;然而当更多的设备和系统出现后&#xff0c;以前这样的设置已不能满足网页在各设备上的显示需求。 就拿最简单的宋体(simsun)来说吧&#xff0c;在Wi…

设计模式笔记(7)---适配器模式(结构型)

Gof定义 将一个类的接口转换成客户所希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 动机 在软件系统中&#xff0c;由于应用环境的变化&#xff0c;常常要将“一些现存的对象”放在心的环境中应用&#xff0c;但是新环境要求的接口…

软件设计模式之适配器模式(JAVA)

什么是适配器模式&#xff1f; 在计算机编程中&#xff0c;适配器模式&#xff08;有时候也称包装样式或者包装&#xff09;将一个类的接口适配成用户所期待的。适配器能将因为接口不兼容而不能在一起工作的类工作在一起&#xff0c;做法是将类自己的接口包裹在一个已存在的类中…

Javascript 调试技巧

Javascript 调试技巧 在代码中寻找错误 1&#xff09;alert 方法&#xff1a; 弹框提示 2&#xff09;console 方法 在调试窗口上打印 JavaScript 值 3&#xff09;断点调试 在浏览器开发者工具中为JS代码添加断点&#xff0c;让JS执行到某一特定位置停住&#xff0c;方便…

WPF程序将DLL嵌入到EXE的两种方法

2019独角兽企业重金招聘Python工程师标准>>> WPF程序将DLL嵌入到EXE的两种方法 这一篇可以看作是《Visual Studio 版本转换工具WPF版开源了》的续&#xff0c;关于《Visual Studio 版本转换工具WPF版开源了》可以参看地下地址&#xff08;两篇是一样的&#xff09;&…

华中地区高校第七届ACM程序设计大赛——之字形矩阵【2012年5月27日】

题意&#xff1a;输入a b Right 或 a b Down ,根据输入输出之字形路径的矩阵。 1 #include <stdio.h>2 int xx[4]{0,1,-1,1},yy[4]{1,0,1,-1};3 int map[100][100],col,row,x,y,dir,steps,idx;4 char sel[10];5 void nextdir()6 {7 switch(dir)8 {9 case 0: …

oracle文件

1、控制文件和日志文件 控制文件&#xff08;Control File&#xff09;是一个很小的二进制文件&#xff0c;用于描述和维护数据库的物理结构。在Oracle数据库中&#xff0c;控制文件相当重要&#xff0c;它存放有数据库中数据文件和日志文件的信息。Oracle数据库在启动时需要访…

常用命令-tar 加密

2019独角兽企业重金招聘Python工程师标准>>> 在当前目录下有一个pma目录的文件夹: 1、使用tar对文件压缩加密&#xff1a; # tar -zcvf - pma|openssl des3 -salt -k password | dd ofpma.des3 完成将得到一个pma.des3的打包文件&#xff0c;用你设置的密码替换pas…

ORM SQLAlchemy 简介

对象关系映射&#xff08;Object Relational Mapping&#xff0c;简称ORM使用DB-API访问数据库&#xff0c;需要懂 SQL 语言&#xff0c;能够写 SQL 语句&#xff0c;如果不想懂 SQL&#xff0c;又想使用关系型数据库&#xff0c;可以使用 ORM,一个 ORM , 它的一端连着 Databas…

转:OAUTH协议简介

OAUTH协议简介 原文链接 摘要&#xff1a;OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第 三方触及到用户的帐号信息&#xff08;如用户名与密码&#xff09;&#xff0c;即第三方无需使用用户的用户名与密…

java集合框架05——ArrayList和LinkedList的区别

前面已经学习完了List部分的源码&#xff0c;主要是ArrayList和LinkedList两部分内容&#xff0c;这一节主要总结下List部分的内容。 List概括 先来回顾一下List在Collection中的的框架图&#xff1a; 从图中我们可以看出&#xff1a; 1. List是一个接口&#xff0c;它继承与Co…

Javascript 函数详解

Javascript 函数详解 1&#xff09;函数声明&#xff1a; 通过关键字function定义&#xff0c;把函数作为变量来声明 函数声明后不会立即执行&#xff0c;会在我们需要的时候调用到。 <script>function myFunction(a, b) {return a * b;}// js对大小写敏感&#xff0c;…

ln链接使用

首先说明下Linux下删除、移动、复制的意义。删除:是将inode表放回空闲区由1变为0&#xff0c;还可以找回文件移动:是将inode表不变&#xff0c;将文件转移至对应条目&#xff0c;删除原条录。同分区上操作速度快&#xff0c;不同分区相当于创建、删除原文件复制:是重建inode表&…

Javascript 对象一(对象详解)

JS创建对象的几种方法1. Object 构造函数 创建 2. 对象字面量表示法 创建 3. 使用工厂模式创建对象 在 Car 函数中&#xff0c;返回的是一个对象。那么我们就无法判断返回的对象究竟是一个什么样的类型。于是就出现了第四种创建对象的模式 4. 使用构造函数创建对象 构造函数…