首页 > 其他分享 >Git分布式版本控制工具

Git分布式版本控制工具

时间:2024-06-10 18:54:33浏览次数:16  
标签:文件 Git 版本控制 仓库 暂存区 git 版本 分布式

了解Git基本概念

git是一个免费开源的分布式版本控制系统,它使用一个叫做仓库的数据库来记录文件的变化,仓库中的每个文件都有一个完整的版本历史记录。可以看到谁在什么时间修改了哪些文件的哪些内容。

现在最流行的版本控制系统有两种,一种是集中式版本控制系统:SVN、CVS等等;另一种是分布式版本控制系统:Git、Mercurial等等。

集中式版本控制系统中所有的文件都保存在中央服务器上,每个人的电脑上只保存了一个副本。
修改文件过程:中央服务器下载最新的版本->添加修改内容->上传回中央服务器
优点:是使用起来非常简单;缺点:中央服务器的单点故障问题,如果中央服务器出现故障或者网络连接出现问题,那么所有人都无法工作了,只能等待中央服务器或者网络恢复正常。
而分布式版本控制系统就没有这个问题,每个人的电脑上都有一个完整的版本库,所以我们可以在本地进行修改,不需要考虑网络问题。
当需要将我们的修改内容分享给其他人的时候,只需要将仓库互相同步一下就可以了。

安装完成之后可以在终端中输入Git-v命令,如果能够看到版本信息,那么就说明已经安装成功了
终端的打开方式:右键->Git Bash Here

Git的使用方式主要有三种:命令行、图形化界面、IDE插件/扩展。
命令行:在终端中输入Git命令的方式来使用Git
图形化界面也叫GUI:通过一些专用的图形化工具软件来使用Git
ID插件:在IDE或者VSCode中,通过插件或者扩展的方式来使用Git

为了区分Linux操作系统中的命令,Git的所有命令都以Git开头,后面跟着具体的命令,比如Git init就是初始化的一个仓库
设置颜色:
Mac:iTerm2+Zsh+oh-my-zsh+Agnoster
Windows:posh-Git

使用Git Config命令:配置一下用户名和邮箱

Global参数:全局配置,对所有仓库都有效
System参数:系统配置,对所有用户都有效

global credential.helper store
这个命令来保存用户名和密码,这样就不用每次都输入了

global --list
这个命令来查看Git的配置信息

新建一个版本库来对本地的代码进行管理
版本库又叫仓库,英文名叫Repository,简称Repo,大家可以把仓库理解成一个目录,这个目录里面所有的文件都可以被Git管理起来,每个文件的修改、删除、添加等操作,Git都能够跟踪到。以便任何时候都可以追踪历史或者还原到之前的某一个版本
创建一个仓库非常的简单,只需要把一个目录变成Git可以管理的仓库就可以了

两种方式:一种是在自己电脑本地直接创建一个仓库;另一种是从远程服务器上克隆一个已经存在的仓库
首先需要找到一个合适的位置来创建一个空目录:mkdir learn-git->cd learn-git->git init
ls -a查看.git隐藏目录
git init后面还可以指定目录的名称,如果指定了,就会在当前目录下面创建一个新的目录作为Git仓库
就是使用git clone命令来从GitHub或者Gitty这种远程服务器来克隆一个Git仓库
提前在GitHub上建好了一个远程仓库->git clone +仓库地址

 

 

  版本控制器的方式:

a.集中式版本控制工具:版本库是集中存放在中央服务器的, team里每个人work时从中央服务器下载代码,是必须联网才能工作,局域网或互联网。个人修改后然后提交到中央版本库。
    举例:SVN和CVS

b.分布式版本控制工具:没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样工作的时候,无需要联网了,因为版本库就在你自己的电脑上。多人协作只需要各自的修改推送给对方,就能互相看到对方的修改了。
    举例:Git

 

git工作流程:

1.clone(克隆):从远程仓库中克隆代码到本地仓库

2.checkout(检出):从本地仓库中检出一个仓库分支然后进行修订

3.add(添加):在提交前先将代码提交到暂存区

4.commit(提交):提交到本地仓库。本地仓库中保存修改的各个历史版本

5.ftch(抓取):从远程库,抓取到本地仓库,不进行任何的合并动作,一般操作比较少。

6.pull(拉取):从远程库拉到本地库,自动进行合并(merge),然后放到到工作区,相当于fetch+merge

7.push(推送):修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库

 

Git的工作区域和文件的状态:
Git的本地数据管理分为三个区域:工作区、暂存区、本地仓库
工作区就是我们实际操作的目录,在资源管理器里面能够看到的文件夹就是工作区
暂存区就是一个中间区域,用于临时存放即将提交的修改内容
本地仓库就是Git存储代码和版本信息的主要位置,通过Git init命令创建的那个仓库

但是如果我们每次修改文件之后都需要进行一次提交操作的话会比较麻烦,所以Git给我们提供了一种方式,也就是可以将修改的文件先添加到暂存区中,然后再把所有暂存区中的文件统一执行一下提交操作

相应的,Git中的文件也存在几种状态:分别是"未跟踪","未修改","已暂存"和"已提交"
"未跟踪"就是我们新创建的还没有被Git管理起来的文件
"未修改"就是我们已经被Git管理起来,但是文件的内容没有变化,还没有被修改过
"已修改"就是我们已经修改了的文件,但是还没有添加到暂存区里面
"已暂存"就是我们修改之后并且已经添加到暂存区内的文件

能够使用Git常用命令:   

●ls/ll:查看当前目录

●cat:查看文件内容

●touch:创建文件

●vi:vi编辑器(使用vi编辑器是为了方便展示效果,学员可以记事本、editPlus、notPad++等其它编辑器)

 

环境配置:

在 Linux 上安装

以 Fedora 为例,如果你在使用它(或与之紧密相关的基于 RPM 的发行版,如 RHEL 或 CentOS),你可以使用 dnf:

$ sudo dnf install git-all

如果你在基于 Debian 的发行版上,如 Ubuntu,请使用 apt:

$ sudo apt install git-all

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

Git GUI:Git提供的图形界面工具

Git Bash:Git提供的命令行工具

当安装Git后首先要做的事情是设置用户名称和email地址。

    1.打开Git Bash     2.设置用户信息:     git config--global user.name"xxx"     git config--global user.email "[email protected]"     查看配置信息     git config--global user.name     git config--global user.email   为常用指令配置别名: 1.打开用户目录,创建.bashrc文件 部分windows系统不允许用户创建点号开头的文件,可以打开gitBash,执行touch~/.bashrc 2.在.bashrc文件中输入如下内容:
#用于输出git提交日志 
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit' 
#用于输出当前目录所有文件及基本信息 
alias 11='1s -al'

3.打开gitBash,执行source ~/.bashrc

 

解决GitBash乱码问题

1.打开GitBash执行下面命令

git config --global core.quotepath false

 2. ${git_home}/etc/bash.bashrc 文件最后加入下面两行

export LANG="zh_CN.UTF-8" 
export LC_ALL="zh_CN.UTF-8"

 

熟悉Git代码托管服务

1.获取本地仓库:

1)在电脑的任意位置创建一个空目录(例如test)作为我们的本地Git仓库

2)进入这个目录中,点击右键打开Git bash窗口

3)执行命令git init

4)如果创建成功后可在文件夹下看到隐藏的.git目录。

 

Git工作目录下对于文件的修改(增加、删除、更新)会存在几个状态,这些修改的状态会随着我们执行Git的命令而发生变化。

如何使用命令来控制这些状态之间的转换:
1. git add(工作区->暂存区)

2. git commit(暂存区->本地仓库)

touch xxx.txt//创建文件
git status//查看状态
git add .//添加所有文件进入暂缓区
git commit -m "标记"//提交暂存区到本地仓库(commit)
git log [options]//查看提交日志
    options
    -all:显示所有分支
    -pretty=oneline:将提交信息显示为一行
    -abbrev-commit:使得输出的commitld更简短
    -graph:以图的形式显示
git-log//查看提交日志
git reset --hard commitID//版本切换
git reflog//查看删除的记录

不需要git管理的文本:创建.gitignore文件

能够使用idea操作git

 

将文件添加到仓库里面
git status:查看仓库的状态,比如可以查看当前仓库处在哪个分支,有哪些文件,以及这些文件当前处在怎样的一个状态


首先来创建文件echo “文件名”>file1.txt
cat file1.txt查看文件内容

git add file1.txt
git commit -m "第一次提交"
不指定-m这个参数,会进入一个交互式的界面,默认会使用vim来编辑提交信息
提交完成之后再来看一下仓库的状态

可以使用通配符来添加多个文件
git add *.txt

添加所有文件:git add .

Reset命令用于回退版本,可以退回到之前的某一个提交的状态
Reset命令有三种用法
后面可以加上三个不同类型的参数
Soft参数:回退到某一个版本,并且保留工作区和暂存区的所有修改内容
Hard参数:回退到某一个版本,并且丢弃工作区和暂存区的所有修改内容
Mixed:介于Soft和Hard这两个参数之间,它表示回退到某一个版本,并且只保留工作区的修改内容,而丢弃暂存区的修改内容
Mixed也是Reset命令的默认参数

 

git diff这命令:查看文件在工作区、暂存区以及版本库之间的差异,查看两个版本之间的差异,或者两个分支之间的差异
git diff默认比较的是工作区和暂存区之间的差异内容,它会显示发生更改的文件以及更改的详细信息
--hede:比较工作区和版本库之间的差异
--cache:比较暂存区和版本库之间的差异

Git diff后面加上两次版本的提交ID就可以比较这两个版本之间的差异内容

比较当前版本和上一个版本之间的差异:git diff HEAD~ HEAD

 

从版本库中删除文件
两种常用的方式:第一种,就是直接删除文件之后提交:rm file1.txt->git add file1.txt->git commit -m"delete file1.txt"
另一种方法:git rm file1.txt->git commit -m"delete file1.txt"

 

Git中的一个特殊文件.gitignore这个文件,这个文件的作用也就是可以让我们忽略掉一些不应该被加入到版本库中的文件


一般来说,我们应该遵循下面这几个原则
1.就是一些系统自动生成的文件
2.就是编译生成的一些中间文件,可执行文件等等
3.就是系统运行过程中自动生成的一些文件
4.带有敏感信息的一些配置文件

echo "access.log" > .gitignore
vi .gitignore
*.log

如果先把other.log这个文件添加到仓库里面了,再对other.log这个文件做一些修改的话


如果先把other.log这个文件添加到了版本库中,然后才修改的.gitignore文件,那么.gitignore文件对other.log是没有作用的,因为它已经被添加到了版本库中
这个时候我们就需要把other.log这个文件先从版本库中先删除掉:git rm -cached other.log

.gitignore文件的匹配规则
1.空行或者以#开头的行会被Git忽略。一般空行用于可读性的分隔,#一般用作注释
2.使用标准的Blob模式匹配,例如:
   星号*通配任意个字符
 问号 ?匹配单个字符
 中括号[]表示匹配列表中的单个字符,比如: [abc] 表示a/b/c
3.两个星号 ** 表示匹配任意的中间目录
4.中括号可以使用短中线连接,比如:[0-9]表示任意一位数字,[a-z]表示任意一位小写字母
5.感叹号!表示取反
github.com/github/gitignore

 

如何在GitHub上创建一个我们自己的仓库,点击一下左上角的logo回到我们的主页->绿色的创建仓库的按钮create repository->

那这是远程仓库地址的
SSH协议
git clone SSH地址

配置SSH的密钥,首先回到我们的用户根目录cd,->进入到点SSH这个目录:cd .shh->ssh-keygen -t rsa -b 4096->test回车
回到GitHub页面->点一下右上角的头像->settings->SSH and GPG keys->新建SSH密钥->粘贴公钥
回到命令行终端:创建config文件并添加
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/test 

Push就是把本地仓库的修改推送给远程仓库
Pull就是把远程仓库的修改拉取到本地仓库

 

使用GitKraken来打开仓库,这样就可以看到每次执行命令之后的变化

标签:文件,Git,版本控制,仓库,暂存区,git,版本,分布式
From: https://www.cnblogs.com/aQxiong/p/18234115

相关文章

  • 分布式ID:SnowFlake 雪花算法 Go实现
    分布式ID特性:趋势有序性(作为数据库主键时,顺序IO相较随机IO更友好)较UUID更短(占用更小的存储,只占64bit)其它(略)64bit构成:时间偏移(42bit) |数据中心ID(5bit)|节点ID(5bit)|序号(12bit)可按需自定义调整某部分的bit长度,比如把节点ID改为3bit 时间偏移:当前时间-初......
  • 【Gitlab】私有Gitlab仓库部署
    背景在做个人项目开发的时候,经常会遇到多地编写互相同步版本的情况,时间久了版本会出现混乱情况。gitlab是一个基于git的代码仓库管理的开源项目,个人也能够非常简便地搭建自己的私有代码管理仓库,用于个人项目的版本管理。在国内可以使用的版本的gitlab有社区版gitlab-ce、g......
  • Git-SSL证书-验证问题-可能由加速器引起:SSL certificate problem: unable to get loca
    一、问题的出现    当我们在使用Git 将本地仓库的代码推送到远程仓库或者从远程仓库克隆到本地时可能遇到以下问题。fatal:unabletoaccess'https://github.com/User/XXX/':SSLcertificateproblem:unabletogetlocalissuercertificate    即......
  • 【Git】远程操作 -- 详解
    一、理解分布式版本控制系统我们目前所说的所有内容(工作区、暂存区、版本库等等)都是在本地,也就是在我们的笔记本或者计算机上。而我们的Git其实是分布式版本控制系统。上面这段话是什么意思呢?可以简单理解为:我们每个人的电脑上都是一个完整的版本库,这样在我们工作的时候......
  • A successful Git branching model
    AsuccessfulGitbranchingmodelhttps://nvie.com/posts/a-successful-git-branching-model/   Themainbranches  SupportingbranchesFeaturebranches ReleasebranchesHotfixbranches  ......
  • 【NAS】Docker Gitea+SakuraFrp+绿联DPX4800标 搭建私有代码托管平台
    本文主要分享Gitea的一些设置,和Https的实现。Gitea的一些设置映射网络HTTPS的实现先准备好一个域名,建议准备一个1Panel创建一个AC账户然后点击申请证书,手动解析。申请完毕后,点击详情,查看证书crt和私钥key自己创建一个txt文本,将证书crt粘贴进去,然后将名字改为xxx.crt......
  • git修改文件后无法push,需要先pull.并且pull后文件有冲突
    和其他人一起编辑了同一个文件,其他人已经commit了,但其他人没有通知你,你也来修改这个文件,导致你想push的时候无法push,提示你需要先pull,提示信息如下此篇文章只针对当前只有master分支error:Yourlocalchangestothefollowingfileswouldbeoverwrittenbymerge:......
  • Git LFS的使用
    GitLFS(LargeFileStorage)是一个Git扩展,它使Git更适合处理大型文件,如音频、视频、图像或任何其他二进制大文件。GitLFS替换仓库中的大文件为文本指针文件,这些文件包含指向实际大文件位置的信息。这样,Git仓库的大小显著减小,同时也保留了对大文件的版本控制能力。......
  • 国内 Github 访问优化
    修改Hosts(推荐)1、下载SwitchHosts下载地址:https://github.com/oldj/SwitchHosts2、配置参考Hosts类型:RemoteHosts标题:随意URL:https://raw.hellogithub.com/hosts自动刷新:最好选1小时这样每次hosts有更新都能及时进行更新,免去手动更新。如下截图所示:3、......
  • Spring Boot入坑-10-Git
    简介一个开源的分布式版本控制系统基于Git协议的代码托管平台主要有Github和Gitlab,国内的也有比如Gitee比较多的企业使用Gitlab构建自己的代码托管平台其主要作用是,对代码或文档进行版本化记录与控制主要概念工作区:个人电脑中能看到的项目的目录暂存区:数据暂......