Git——基础篇
Git——基础篇
Git简而言之就是个版本控制工具,用于跟踪和管理代码的工具。
版本控制
本地版本控制
就是我们自己本地对文档进行保存文件的每一个修改版本的记录。
集中式版本控制——SVN
有一个远程服务器对文档进行维护版本,历史版本存放在远程服务器中,所有人对该版本进行同步更新或提交修改,多对一的关系。
缺点时如果远程服务器宕机了那么就会有单点故障问题,导致不可用,且无法查看历史版本。
分布式版本控制
每个用户或者说使用者的电脑上都拥有一个版本控制仓库,因此所有人都可以在本地查看版本的历史记录,可以离线在本地提交,当需要提交到远程服务器上时只需执行push即可。当然push前要先拉去到远程服务器上最新的文档,本质上说和集中式版本控制差不多,最终都是以远程服务器上的文档为主,不同的是版本的迭代历史记录从远程服务器上只有一份变成了所有的人都维护保存一份所有的版本记录,理论上只要有一个用户的设备没有问题就能恢复所有的数据,但相对的增加了每个用户本地的存储空间的占用。
优点是不会因为远程服务器的宕机等故障而导致版本丢失无法工作的问题,但只是尽可能地减少了问题导致的故障,提高了容错性,因为最终还是要以远程服务器上的版本为主,只是因为每个用户都维护了一份版本记录使得容错性大大提高,可以快速地使用本地版本数据恢复正常。
Git和SVN的区别
- GIT是分布式版本控制,SVN是集中式版本控制。
- GIT把内容按元数据方式存储(简单说就是Git在本地就是一个 克隆版的版本库 ),而SVN是按文件。
- GIT分支和SVN的分支不同, SVN的分支就是版本库中的另外的一个目录,而Git的分支因为我们本地有个版本库而切换和使用非常简洁方便。
- GIT没有一个全局的版本号,而SVN有。SVN的版本号实际是任何一个相应时间的源代码快照,而Git是所有人都有一份版本库,不需要像SVN这样处理。
- GIT的内容完整性要优于SVN。 GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
前提准备
linux基本命令
Git的命令窗
#删除linux下全部文件,/斜杠表示从根目录开始递归迭代删除,千万不要乱使用
rm -rf /
Git配置
#查看git配置
git config -l
#查看git的系统级别的配置
git config --system --list
#git的本地或者说全局配置
git config --global --list
#设置全局用户名和邮箱,用于向git标识自己的身份id,git每次提交都会使用到该信息
#全局配置用户名
git config --global user.name "wayne"
#全局配置邮箱
git config --global user.email "eamil@qq.com"
Git配置文件地址
Git基本工作原理
Git项目搭建
#在当前目录下新建一个git本地仓库
git init
#克隆远程仓库到本地
git clone [url]
git clone https://github.com/roylai47/git-test.git
创建远程项目
#克隆远程仓库到本地 直接在idea的terminal窗口中执行git命令
git clone [url]
git clone https://github.com/roylai47/git-test.git
Git基本操作
基本操作
#查看文件状态
git status [filename]
#查看所有文件状态
git status
#正常一次提交流程
#先从远程服务器上拉取
git pull origin master
#添加所有文件到暂存区
git add .
#提交暂存区中的内容到本地仓库 -m 提交信息
git commit -m "提交描述"
#推送本地提交到远程服务器上
git push origin master
忽略文件
# 表示忽略这个文件夹里的文件
/target/
常用.gitignore文件
文件1:
### gradle ###
.gradle
/build/
!gradle/wrapper/gradle-wrapper.jar
### STS ###
.settings/
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
### IntelliJ IDEA ###
/.idea/
/private/
/storage/
/litemall.iml
.checkstyle
.idea
*.iws
*.iml
*.ipr
rebel.xml
### maven ###
target/
*.war
*.ear
*.zip
*.tar
*.tar.gz
### logs ####
/logs/
*.log
### temp ignore ###
*.cache
*.diff
*.patch
*.tmp
*.java~
*.properties~
*.xml~
### system ignore ###
.DS_Store
Thumbs.db
Servers
.metadata
upload
gen_code
文件2:
# Eclipse project files
.project
.classpath
.settings
# IntelliJ IDEA project files and directories
*.iml
*.ipr
*.iws
.idea/
# Geany project file
.geany
# KDevelop project file and directory
.kdev4/
*.kdev4
# Build targets
/target
*/target
# Report directories
/reports
*/reports
# Mac-specific directory that no other operating system needs.
.DS_Store
# JVM crash logs
hs_err_pid*.log
# SVN
.svn
# test log
logs/
#db
db/
配置SSH公钥——用于ssh地址
#生成ssh公钥
ssh-keygen
#增加后缀是可以指定公钥的加密方式为rsa
ssh-keygen -t rsa
#注意连续3次空格生成
地址C:\Users\castamere\.ssh
IDEA操作Git
实用操作
基于索引值的版本前进后退
#基于索引值的版本前进后退,获取当前索引值
git reflog
#回退到索引值所在的版本 2cb2e6c
git reset --hard 2cb2e6c
#回退到某个分支
git rest --hard origin/master
#基于HEAD指针回退一步
git reset --hard HEAD^
#基于HEAD指针回退3步,就加3个^
git reset --hard HEAD^^^
#基于HEAD指针回退3步,就加~3
git reset --hard HEAD~
Git合并冲突
#当前分支dev,执行git merge master是把master分支合并到当前分支上
git merge master
Git执行merge合并操作时,如果有冲突,会描述出冲突,并在冲突的位置加入冲突部分,需要我们人工介入处理。
删除下图中显示冲突的标示行,再把冲突的代码调整到我们想要的结果即可。
最后再提交push请求到远程服务器上就好了。
Git保证数据的完整性
Git通过加密比较加密结果
版本数据管理机制
SVN是增量版本数据管理机制,只保留变化的部分。
Git是快照流。
Gitlab服务器搭建
ce与ee的区别是ce是社区版(Community Edition),ee是企业版(Enterprise Edition)。
把上面的安装过程中的命令放在一个安装脚本中install.sh
。
然后再更改脚本执行权限为可执行文件
chmod 755 install.sh
#执行安装脚本
./install.sh
#安装完成后需要重启服务器
reboot
#执行gitlab初始化配置
gitlab-ctl reconfigure
#启动gitlab
gitlab-ctl start
#停止gitlab
gitlab-ctl stop
#关闭防火墙,避免访问不了,生产上不要粗暴关闭防火墙,而是开放gitlab的端口号
service firewalld stop
注意:执行前先保存快照用于安装出现问题时回滚。
gitlab包含了很多中间件比如redis、Nginx等。
扩展
- Git是Linus开发出来的,目前最优秀的版本控制工具。
- 所有下载慢的【需要连接外网或者访问资源服务器在国外的网站】软件或工具都可以通过镜像去下载,比如淘宝、阿里等的镜像。
- linux系统中,一切皆文件。
- 所有的配置文件,在本地都会保存一份。
- 配置环境变量只是为了能全局使用,并不影响软件的使用。如果想在任何位置都可以使用就需要配置环境变量。
- 暂存区本质上只是个文件Index.可以查看.git文件夹看到。
- idea的terminal窗口中执行git命令。
- git大全
- git历史记录的操作前进后退其实是操作HEAD指针的移动。
- Git中被删除的文件只要有提交记录就永远都可以从历史版本中拿到,只需要恢复到历史版本总拿到该文件,再回到最新的文件中添加即可。或者只是查看历史版本,然后复制出来即可。
- docker无法在centOS7以下搭建,不要选择安装centOS7以下的版本。
问题
重要:创建一个新项目,如何把新项目添加到gitlab或者github中?
步骤:
首先要现在github上创建一个项目名对于的远程仓库,比如说git-test。
然后把该项目拉去到本地来。执行pull命令
接着在idea中创建一个新项目,项目的路径就选择刚刚从github上拉去下来的git-test文件夹所在的路径。不用担心无法创建成功或者有冲突。
再把创建的项目初始化好,配置好.gitignore文件,把
/target/ .idea
等这些文件排除掉。最后再提交代码并推送到远程服务器上,这样其他人就可以拉取到新项目的代码协同工作了。
#暂存所有文件 .表示所有的,如果有指定的文件则在add 后输入指定的文件名
git add .
#提交到本地参考
git commit -m "gitinit"
#推送到远程服务器
git push origin master
参考
尚硅谷Git :较全面
狂神Git :太过简单只能做到满足初学者日常提交使用仅此而已。
Git——基础篇的更多相关文章
- Git基础篇
对于Git的一些基础了解,安装,里面的一些名词,这里就不做介绍了.主要记录怎么使用GIt. 本篇介绍: 配置个人信息 生成本地仓库并与远程库相连 添加SSH秘钥 ...
- 【Git - 基础篇】如何快速有效的管理你的代码 - 安装和配置
[本文仅凭个人经验进行整理,如有错误,欢迎指正,互相学习^^] -------------------------------------------------------------------- ...
- 关于Eclipse使用Git基础篇
一:Git的下载与安装与基本使用 1.打开eclipse->help->Eclipse Markplace->search->fiind输入Egit 你会看到如下截图(我的为已 ...
- Git基础篇【转】
转自:https://i.cnblogs.com/EditPosts.aspx?opt=1 1.设置名字与邮箱 $ Git config –global user.name “YourName” $ ...
- GIT基础篇,配置账号及命令查看以及帮助命令
提交用户名和邮件地址 1 安装完Git首先要设置你的用户名称与邮件地址.每一个Git的提交都会使用这些信息,并且它会写入到你的每一次提交中. 2 git config --global user. ...
- Git命令汇总(基础篇)
自己用Git有一段时间了,随着项目越来越多,功能分支也随之增加,从简单的基础命令到随心所欲,需要自己不断地去尝试总结,下面来分享一下我的Git使用总结. 本章基础篇主要讲解一些Git代码提交流程和Gi ...
- g4e基础篇#2 Git分布式版本控制系统的优势
g4e 是 Git for Enterprise Developer的简写,这个系列文章会统一使用g4e作为标识,便于大家查看和搜索. 章节目录 前言 1. 基础篇: 为什么要使用版本控制系统 Git ...
- g4e基础篇#3 Git安装与配置
g4e 是 Git for Enterprise Developer的简写,这个系列文章会统一使用g4e作为标识,便于大家查看和搜索. 章节目录 前言 1. 基础篇: 为什么要使用版本控制系统 Git ...
- g4e基础篇#6 了解Git历史记录
章节目录 前言 1. 基础篇: 为什么要使用版本控制系统 Git 分布式版本控制系统的优势 Git 安装和设置 了解Git存储库(Repo) 起步 1 – 创建分支和保存代码 起步 2 – 了解Git ...
随机推荐
- :整数 跳转到该行 Vim中常用的命令
:set nu 显示行号 :set nonu 不显示行号 :命令 执行该命令 :整数 跳转到该行 :s/one/two 将当前光标所在行的第一个one替换成two :s/one/two/g 将当前光标 ...
- nvm、nrm、npm 安装和使用详解
一.nvm的安装和使用 nvm全称Node Version Manager是 Nodejs 版本管理器,它让我们能方便的对 Nodejs 的版 本进行切换. nvm 的官方版本只支持 Linux ...
- IDEA Git 操作常见错误处理
使用 IDEA 的 git 进行操作时报错 更新报错 Git Pull Failed: refusing to merge unrelated histories 提交报错 Push rejected ...
- 1.5linux用户权限相关命令
用户权限相关命令 目标 用户 和 权限 的基本概念 用户管理 终端命令 组管理 终端命令 修改权限 终端命令 01. 用户 和 权限 的基本概念 1.1 基本概念 用户 是 Linux 系统工作中重要 ...
- WPF 2D图形 Shape入门(一)--Shape
本文是篇WPF Shape的入门文章 Shape 首先看看shape的继承链关系: 一个Shape具有哪些重要属性: 属性 说明 DefiningGeometry 默认的几何形状 RenderedGe ...
- Go语言的函数02---参数
package main import "fmt" /* 常量,变量,函数---源代码的成员 给成员命名的字符称之为[标识符] 合法的标识符有:大小写字母,数字,下划线 命名时不能 ...
- NVIDIA Tensor Cores解析
NVIDIA Tensor Cores解析 高性能计算机和人工智能前所未有的加速 Tensor Cores支持混合精度计算,动态调整计算以加快吞吐量,同时保持精度.最新一代将这些加速功能扩展到各种工作 ...
- Ucore lab1实验报告
练习一 Makefile 1.1 OS镜像文件ucore.img 是如何一步步生成的? + cc kern/init/init.c + cc kern/libs/readline.c + cc ker ...
- vulhub-struts2-s2-007
0x00 漏洞原理 当配置了验证规则 <ActionName>-validation.xml 时,若类型验证转换出错,后端默认会将用户提交的表单值通过字符串拼接,然后执行一次 OGNL ...
- P1045 [NOIP2003 普及组] 麦森数
题目描述 形如2^P−1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2^P−1不一定也是素数. 到1998年底,人们已找到了37个麦森数.最大的一个是P=3021377, ...