Python入门自学进阶-Web框架——40、redis、rabbitmq、git——3

git,一个分布式的版本管理工具。主要用处:版本管理、协作开发。

常见版本管理工具:

VSS —— Visual Source Safe
CVS —— Concurrent Versions System
SVN —— CollabNet Subversion
GIT 

GIT安装:下载安装文件:Git-2.41.0-64-bit.exe

运行:

 Git是分布式版本控制系统。(另一种是集中式版本控制系统)

分布式版本控制系统没有“中央服务器”,每台电脑上都有一个完整的版本库。

就是说,一开始,每台电脑上都有一个一样的版本库,然后每个人不需要联网,就可以做自己的版本控制,添加、修改、删除文件等操作,操作保存在自己本地的版本库中,经过一段时间后,再指定一个统一的地方,大家都把本地的版本库合并到这个统一的地方,实际上就是集中式版本系统的中央服务器,合并中有可能出现各种问题,如冲突等,解决完这些冲突,就形成一个大家都认可的版本,每个人再将这个版本的库下载到本地,再次基础上再次进行开发,循环往复,做到版本控制。

一、版本库创建

版本库又名仓库(repository),创建版本库,需要在一个合适的地方,创建一个空目录:

md e:\learngit
cd learngit
git init

Windows下:

 centos6下:

windows下可以使用git bash,环境就是模拟的linux:

 

 windows下可以使用图形界面:即Git GUI

创建仓库后,会创建.git子目录及相关文件、子目录:

 二、使用

1、添加文件到仓库:git add filename

需要在learngit目录下创建文件,这个是工作目录,其他地方git是无法管理的

 

 2、提交文件到仓库:git commit -m “说明信息”

 

 第一次提交,出现提示信息,在linux下,默认使用你的登录名和hostname作为user.name和user.email,可以使用git config --global user.name “USERNAME”  和 git config --global user.email “EMAIL”来设置全局的用户名和邮箱地址,来标识提交文件的主人,不带--global,则只在本仓库有效。Windows中,这两项配置文件为C:\Users\Administrator\.gitconfig :

 windows下:

 配置信息及其保存位置:

git config -l 是三个信息的汇总,分别是:

1).仓库级别 local。 2).用户级别global。 3).系统级别system。

优先级仓库级别最高,用户级别次之,系统级别最低。

1)、仓库级别:git config --local -l

 配置文件在仓库的.git目录下的config文件:

2)、用户级别global、 git  config --global -l

 配置文件在C:\Users\Administrator\.gitconfig

3)、系统界别system. git config --system -l

 配置文件在git安装目录下的etc中的gitconfig文件,如:D:\Program Files\Git\etc\gitconfig

 在centos6.7中

1)、仓库级别:git config --local -l 配置文件在仓库目录下:.git/config

2)、用户级别global、 git  config --global -l 配置文件在用户家目录下的.gitconfig

3)、系统界别system. git config --system -l 配置文件在/etc/gitconfig

3、git status :掌握仓库的当前状态:

当修改了某个文件,而又没有add,更没有commit时,仓库中的文件就与工作区的文件不同了,此时使用gitstatus查看:

 git add后

 提交后,再次修改:使用git diff a1.txt查看不同:

 4、git log 查看提交日志

 黄色的字符串,是commit id,即版本号。简洁版的显示

 

 5、git reset  版本回退(或叫版本回滚),恢复到以前的某个版本

Git必须知道当前版本是哪个版本,Git中,用HEAD表示当前版本,上一个版本使用HEAD^表示,上上一个版本用HEAD^^,版本多了,使用HEAD~#,如HEAD~10,回退到往前第10个版本。

 

 如果要再回到第四次的版本,需要先找到第四次的commitid,方法是使用git reflog

git log无法显示回退前的版本信息。

 这里看到readme.txt-4的commitid,使用如下命令:

git reset --hard commitid

 

 

 6、工作区和暂存区

工作区(working Directory):就是电脑中能看到的目录,比如这里的e:\learngit

版本库(Repository):工作区中有一个隐藏目录“.git”,这个不算工作区,而是Git版本库。

版本库中存了很多东西,其中最重要的就是称为stage(或叫index)的暂存区,Git自动创建的第一个分支master,以及指向master的一个指针叫做HEAD。

 

 把文件往Git版本库⾥添加的时候,是分两步执行的:
第一步是用“git add”把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用“git commit”提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,
commit就是往master分支上提交更改。

需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

对于第一次修改后,执行了git add,然后又进行了第二次修改,然后直接进行git commit,则在工作区的第二次修改因为没有放入暂存区,所以,git commit只把暂存区的第一次修改提交了,第二次修改不会被提交。

使用:git diff HEAD -- filename 来比较工作区和版本库里面最新版本的区别:

 所以,每次工作区的修改最好都add一下,最后一起commit。

7、撤销修改

对于存在不一致的文件,如下:

 git提示,可以使用git restore <file>来丢弃工作区的修改

 使用git checkout -- <filename>也可以实现。

git restore --staged <file>丢弃暂存区的修改,即git add的修改丢弃,但只是丢弃暂存区的修改,所以执行后,status会回到Changes not staged for commit状态。

关于git checkout命令

Git社区发布了Git的新版本2.23。在该版本中,有一个特性非常引人瞩目,就是新版本的Git引入了两个新命令 git switchgit restore,用以替代现在的 git checkout。换言之,git checkout 将逐渐退出历史舞台。

Git社区决定这样做,是因为目前 git checkout 命令承载了太多的功能,这让新手们感到困惑。git checkout 的核心功能包括两个方面,一个是分支的管理,一个是文件的恢复。这两个核心功能,未来将由 git switch 和 git restore 分别负责。

相比之下,新命令旨在将职责明确分为两个较窄的类别:更改分支的操作​​和更改文件的操作

8、删除文件

已经提交的文件,在工作区删除了

 需要使用git rm <file>执行删除的添加,或者还是使用git add <file>,将删除的信息添加到暂存区,然后git commit,就将仓库中的文件删除了。

 恢复:

9、远程仓库:github

本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:
第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"
需要把邮件地址换成自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也不需设置密码。在用户主目录中找到.ssh目录,有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

第2步,设置github上的SSH KEY

 

 这样,就可以在本地连接github了。

先在github上创建一个空仓库,learngit:

然后在本地learngit工作区中执行:

git remote add origin git@github.com:kaoa000/learngit.git

这样,就将本地仓库与github上的learngit仓库进行了关联。添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的。

git push -u origin master   将本地仓库推送到远程仓库。

(github访问确实是慢,而且时断时续)

推送前

 推送后:

 把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。

由于远程库是空的,第一次推送master分支时,加上了-u参数,Git不但会把本地的 master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master 分支关联起来,在以后的推送或者拉取时就可以简化命令。

现在只要本地作了提交,就可以通过命令: $ git push origin master

把本地master分支的最新修改推送至GitHub

从远程库克隆:

git clone git@github.com:kaoa000/learngit.git

 gitee的使用与github相似:

git remote add origin https://gitee.com/persistself/giteetest.git

git clone https://gitee.com/persistself/giteetest.git

 不同的是,需要输入gitee的账号和密码。

10、分支管理:

创建与合并分支:

每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。目前为止只有一条时间线,在Git中,这个分支叫主分支,即 master分支。
HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。
一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点:

 创建新的分支,如dev,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:

 从现在开始,对工作区的修改和提交就是针对dev分支了,如新提交一次后,dev 指针往前移动一步,而master指针不变:

 在dev上的工作完成了,就可以把dev合并到master上。就是直接把master指向dev的当前提交,就完成了合并:

 可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,就剩下了一条master分支:

 创建dev分支,然后切换到dev分支:

git checkout -b dev

git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

git branch dev
git checkout dev

使用git branch查看当前分支:

 git branch列出所有分支,当前分支前标有一个星号:*

在dev分支上提交:

 切换回master:

git checkout master

 可以看到,readme.txt中dev分支上提交的修改没有了。因为那个提交是在dev分支上。

 现在,把dev分支的工作成果合并到master分支上:

git merge dev :此命令用于合并指定分支到当前分支。

 删除dev分支,合并完成后,就可以删除dev分支:

git branch -d dev

 Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch name    
切换分支:git checkout name    或 git switch name
创建+切换分支:git checkout -b name   或 git switch -c name
合并某分支到当前分支:git merge name
删除分支:git branch -d name

新版本增加git switch切换分支。

11、解决冲突

git switch -c feature1

修改readme.txt最后一行,在feature1上提交,切换到master分支:

git switch master   ,修改readme.txt,然后提交master分支上

 此时:

 这种情况下,Git无法执行“快速合并”,即Fast-forward,这种合并会有冲突:

 

 Git用<<<<<<<,=======,>>>>>>标记出不同分支的内容

修改readme.txt,保存后再次添加提交:

 现在,分支变成如下图:

 查看合并情况:git log --graph --pretty=oneline --abbrev-commit

 删除feature1分支:git branch -d feature1

强行删除分支:git branch -D feature1   :在feature1分支上已经添加并提交,但是还没有合并,可以使用-D强制删除分支。

12、分支管理策略

合并时,使用Fast forward模式,删除分支后,会丢掉分支信息,可以强制禁用Fast forward模式。Git就会在merge时生成一个新的commit,这样从分支历史上就可以看出分支信息。

 

 13、Bug分支:

git stash
git stash list
git stash apply     git stash drop
git stash pop

14、多人协作:

从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。

查看远程库的信息,用:git remote  或git remote -v

 抓取(fetch)和推送(push)的origin的地址。如果没有推送权限,就看不到push的地址。

推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样Git就会把该分支推送到远程库对应的远程分支上:

git push origin master

推送其他分支:git push origin dev

使用push推送的分支,如果远程库中不存在,会创建

抓取分支:其他人克隆远程库,以进行协作开发时,从远程库clone时,默认情况下,只能看到本地的master分支,可以用git branch查看。

 要在mydev分支上开发,就必须创建远程origin的mydev分支到本地,使用如下命令创建本地mydev分支:

git checkout -b mydev origin/mydev

 冲突及解决:

如果其他人向origin/mydev分支推送了提交,而碰巧自己也对同样的文件做了修改,并试图推送,就会推送失败。其他人先推送

 自己修改后又要推送:

 解决办法是按照Git的提示,使用git pull把最新的提交从

origin/mydev抓下来,然后在本地合并,解决冲突在推送:

 git pull 一开始也出错了,需要git branch --set-upstream-to=origin/mydev mydev关联上

 修改完后需要再次git add 和git commit,然后gitpush

其他人要接着开发时,一般先git pull一下,抓取最新的版本,再继续开发:

 因此,多人协作的工作模式通常是这样:
1. 首先,可以试图用git push origin branch-name推送自己的修改;
2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
3. 如果合并有冲突,则解决冲突,并在本地提交;
4. 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to branch-name origin/branch-name。

多人协作小结
• 查看远程库信息,使用git remote -v;
• 本地新建的分支如果不推送到远程,对其他人就是不可见的;
• 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓
取远程的新提交;
• 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branchname,本地和远程分支的名称最好一致;
• 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name
origin/branch-name;
• 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

15、忽略文件

在git的工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。

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

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

相关文章

pytest pytest.ini 配置日志输出至文件

创建pytest.ini 文件 [pytest] log_file pytest_log.txt log_file_level INFO log_file_date_format %Y-%m-%d %H:%M:%S log_file_format %(asctime)s | %(filename)s | %(funcName)s | line:%(lineno)d | %(levelname)s | %(message)s import pytest import loggingdef …

Mysql中九种索引失效场景分析

表数据&#xff1a; 索引情况&#xff1a; 其中a是主键&#xff0c;对应主键索引&#xff0c;bcd三个字段组成联合索引&#xff0c;e字段为一个索引 情况一&#xff1a;不符合最左匹配原则 去掉b1的条件后就不符合最左匹配原则了&#xff0c;导致索引失效 情况二&#xff…

34、springboot切换内嵌Web服务器(Tomcat服务器)与 生成SSL证书来把项目访路径从 HTTP 配置成 HTTPS

知识点1&#xff1a;springboot切换内嵌Web服务器&#xff08;Tomcat服务器&#xff09; 知识点2&#xff1a;生成SSL证书来把项目访路径从 HTTP 配置成 HTTPS ★ Spring Boot默认的Web服务器&#xff08;Tomcat&#xff09; ▲ 基于Servlet的应用&#xff08;使用Spring MV…

【CSS】CSS 特性 ( CSS 优先级 | 优先级引入 | 选择器基本权重 )

一、CSS 优先级 1、优先级引入 定义 CSS 样式时 , 可能出现 多个 类型相同的 规则 定义在 同一个元素上 , 如果 CSS 选择器 相同 , 执行 CSS 层叠性 , 根据 就近原则 选择执行的样式 , 如 : 出现两个 div 标签选择器 , 都设置 color 文本颜色 ; <style>div {color: re…

[Linux]进程

文章目录 1. 进程控制1.1 进程概述1.1.1 并行和并发1.1.2 PCB1.1.4 进程状态1.1.5 进程命令 1.2 进程创建1.2.1 函数1.2.2 fork() 剖析 1.3 父子进程1.3.1 进程执行位置1.3.2 循环创建子进程1.3.3 终端显示问题1.3.4 进程数数 1.4 execl和execlp函数1.4.1 execl()1.4.2 execlp(…

python spyder环境配置

首先安装python&#xff0c;配置环境变量等等 其次 pip install spyder 安装 spyder 最后启动 spyder&#xff0c;cmd下 执行 spyder&#xff0c;就打开了 调试下面的代码看看是否是系统的python import sys print(sys.executable) print(sys.path) 工具-偏好-python调试器 …

Hive-启动与操作(2)

&#x1f947;&#x1f947;【大数据学习记录篇】-持续更新中~&#x1f947;&#x1f947; 个人主页&#xff1a;beixi 本文章收录于专栏&#xff08;点击传送&#xff09;&#xff1a;【大数据学习】 &#x1f493;&#x1f493;持续更新中&#xff0c;感谢各位前辈朋友们支持…

three.js(七):内置的二维几何体

二维几何体 PlaneGeometry 矩形平面CircleGeometry 圆形平面RingGeometry 圆环平面 PlaneGeometry 矩形平面 PlaneGeometry(width : Float, height : Float, widthSegments : Integer, heightSegments : Integer) width — 平面沿着X轴的宽度。默认值是1。height — 平面沿着Y…

测试左移——代码审计SonarQube 平台搭建

一、sonarqube代码分析技术体系 1、代码分析工具 IDE 辅助功能 xcode、android studio阿里巴巴 java 开发手册 ide 插件支持 独立的静态分析工具 spotbugs、findbugs、androidlint、scan-build、Checkstyle、FindSecBugspmd 阿里巴巴 java 开发手册 pmd 插件 综合性的代码…

Windows系统中Apache Http服务器简单使用

1 简介 Apache HTTP服务器是一个开源的、跨平台的Web服务器软件。它由Apache软件基金会开发和维护。Apache HTTP服务器可以在多种操作系统上运行&#xff0c;如Windows、Linux、Unix等&#xff0c;并且支持多种编程语言和技术&#xff0c;如PHP、Perl、Python、Java等。…

[笔记] 阿里云域名知识

文章目录 前言一、域名二、域名常见分类2.1 泛域名2.2 为什么要设置子域名 三、记录类型3.1 A- 将域名指向一个PV4地址3.2 CNAME- 将域名指向另外一个域名3.3 AAAA- 将域名指向一个PV6地址3.4 MX- 将域名指向邮件服务器地址3.5 SRV- 记录提供特定的服务的服务器使用场景 3.6 TX…

【前端demo】将二进制数转换为十进制数 原生实现

https://github.com/florinpop17/app-ideas 总结 文章目录 效果JavaScript实现进制转换原生代码遇到的问题 效果 二进制转换为十进制若输入为空或不是二进制&#xff0c;提示清空 JavaScript实现进制转换 parseInt parseInt(111,2)手动实现 bin是输入的字符串。 functio…

【C++】关于fixed和setprecision的学习和介绍

前言 在学习swap函数的时候&#xff0c;偶然了解到了fixed和setprecision&#xff0c;这两条控制语句&#xff0c;在了解了之后&#xff0c;觉得很有用&#xff0c;于是写一篇文章来介绍fixed和setprecision这两条控制语句 fixed控制输出形式 使用fixed语句需要包含<ioma…

Matlab图像处理-图像缩放

基本概念 图像缩放是指将给定的图像在x轴方向按比例缩放a倍&#xff0c;在y轴方向按比例缩放b倍&#xff0c;从而获得一幅新的图像。 如果ab&#xff0c;即在x轴方向和y轴方向缩放的比率相同&#xff0c;则称这样的比例缩放为图像的全比例缩放。 如果a≠b&#xff0c;图像比…

在腾讯云服务器OpenCLoudOS系统中安装svn(有图详解)

1. 安装svn yum -y install subversion 安装成功&#xff1a; 2. 创建数据根目录及仓库 mkdir -p /usr/local/svn/svnrepository 创建test仓库&#xff1a; svnadmin create /usr/local/svn/test test仓库创建成功&#xff1a; 3. 修改配置test仓库 cd /usr/local/svn/te…

Visual Studio 2017安装和项目配置

目录 前言1. What、Why and How1.1 What1.2 Why1.3 How 2. 安装3. 创建新项目4. 配置OpenCV库4.1 下载opencv安装包4.2 配置系统环境变量4.3 VS项目环境配置4.4 总结 5. 已有项目添加6. Tips6.1 常用快捷键6.2 字体和颜色选择6.3 配置编译路径 结语下载链接参考 前言 最近因为项…

安装启动Stable Diffusion教程

一、下载源码 GitHub - AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UI 二、安装miniconda 参考&#xff1a;安装启动yolo5教程_苍穹之跃的博客-CSDN博客 三、安装CUDA 参考&#xff1a;安装启动yolo5教程_苍穹之跃的博客-CSDN博客 四、创建虚拟环境 co…

SpringBoot入门篇3 - 整合junit、整合mybatis、基于SpringBoot实现ssm整合

目录 1.整合JUnit Spring整合JUnit SpringBoot整合JUnit 测试类注解&#xff1a;SpringBootTest 作用&#xff1a;设置JUnit加载的SpringBoot启动类 2.整合mybatis ①使用spring initializr初始化项目的时候&#xff0c;添加依赖。 ②设置数据源application.yml spring:d…

搭建一个你的文件共享站

说起文件共享&#xff0c;类似文件站这样的功能。在很久之前我使用过用apache httpd这个方案&#xff0c;这个的话就是太过于简单了。当然是满足需求的&#xff08;又不是不能用&#xff09; 今天来分享一个开源的文件共享平台。Pingvin Share 作者的github地址&#xff1a;ht…

git私房菜

文章目录 1、公司项目开发Git协作流程2、合并相关的操作3、Git常用命令总结 公司中如何使用Git协同开发的&#xff1f;本文将具体介绍开发模式&#xff0c;以及一些常用命令。 1、公司项目开发Git协作流程 公司一个完整的项目出来&#xff0c;项目的推进是在主分支master上进行…