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,一经查实,立即删除!

相关文章

我在Facebook的十点经验分享[转载]

转载自 http://blog.sina.com.cn/s/blog_70c9335b010144kc.html 我是2007年初加入Facebook, 那时大概150人; 2011年9月底离开, 当时3200多人. 经历了很多稀奇古怪但影响很大的项目, 像Application Platform, Social Ads, News Feed, Gift Shop, Facebook Credits等等. 碰到的很…

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…

JavaScript将负数转换为正数

负负得正 .vue里的写法&#xff1a; <div v-if"num < 0">{{-(num)}}<div> <div v-if"num > 0">{{num}}<div> 使用过滤器&#xff1a; <div >{{num | absNum}}<div> filters: {absNum(value) {if(a < 0)…

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

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

方法覆盖(方法重写)

package com.qingfeng;/** * * author win7 * 功能&#xff1a;方法覆盖(方法重写):子类的某个方法覆盖父类的某个方法 */public class Demo3_8 { public static void main(String[] args) { // TODO Auto-generated method stub Animal animal1 new Animal…

webpack+vue实现项目

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

oracle数据库导入和导出

主机ip&#xff08;192.168.0.1&#xff09; 192.168.0.1 (DESCRIPTION (ADDRESS_LIST (ADDRESS (PROTOCOL TCP)(HOST 192.168.0.1 )(PORT 1521)) ) (CONNECT_DATA (SERVICE_NAME TLPM) )) Oracle数据导入导出imp/exp 功能&#xff1a;Oracle数…

myysql 不能远程访问的解决办法

1.通过navicat或者命令行&#xff0c;将user表中原来hostlocalhost的改为host% 命令行方式&#xff1a; mysql> update user set host % where host localhost; 2.授权访问给root用户 mysql>grant all privileges on *.* to root% identified by password with grant op…

递归和非递归的区别

递归好处&#xff1a;代码更简洁清晰&#xff0c;可读性更好 递归可读性好这一点&#xff0c;对于初学者可能会反对。实际上递归的代码更清晰&#xff0c;但是从学习的角度要理解递归真正发生的什么&#xff0c;是如何调用的&#xff0c;调用层次和路线&#xff0c;调用堆栈中…

IOS背景半透明渐变问题

IOS背景半透明渐变问题 问题描述&#xff1a; 给一个层设置半透明的背景&#xff0c;使用 background:linear-gradient(to bottom, transparent, #ffffff)&#xff0c;其中使用transparent的时候 在安卓上显示正常&#xff08;白色半透明&#xff0c;但ios上显示透明渐变会出…

都客仿站系列教程四:javascript入门

javascript&#xff0c;和用户交互的东西。请看下面的例子&#xff1a; <script type"text/javascript">alert("ok"); </script>请参考http://wenku.baidu.com/view/7ee708c5d5bbfd0a7956732d.html 转载于:https://www.cnblogs.com/dukey/arch…

JAVA API

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

FusionCharts使用问题及解决方法(三)-FusionCharts常见问题大全

前两篇文章中&#xff0c;我们总结了FusionCharts图表的一些常见问题&#xff08;FAQ&#xff09;及解决方法&#xff0c;本文继续讨论FusionCharts使用者常见的一些复杂的报错及解决方法。 当HTML、SWF和JavaScript文件在同一个文件夹中时&#xff0c; FusionCharts工作正常&a…

图像PSNR值及MSE值的计算

% 图像峰值信噪比PSNR、均方根误差MSE % By lyqmath % Xidian University function [PSNR, MSE] psnr(X, Y) % 计算峰值信噪比PSNR、均方根误差MSE % 如果输入Y为空&#xff0c;则视为X与其本身来计算PSNR、MSEif nargin<2D X; elseif any(size(X)~size(Y))error(The inp…

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…

SpringMVC redirect中文乱码问题

在使用"redirect:xxx.do?param中文"时会出现乱码问题&#xff0c;解决方案如下&#xff1a; 使用model.addAttribute来替代直接拼接参数。如下&#xff1a; RequestMapping("t") public String t(String param, Model model) {model.addAttribute("p…

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

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

js RegExp正则表达式常见用例

js RegExp正则表达式常见用例判断输入是否为数字、字母、下划线组成判断字符串是否全部为字母判断字符串是否全部为数字判断是否带有小数判断是否中文名称组成判断手机号判断身份证判断验证码判断邮件地址是否合法判断是否是emoji表情获取字符长度&#xff0c;中文算2&#xff…