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

news2024/11/27 6:42:50

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.coloradmin.cn/o/952641.html

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

相关文章

Nexus仓库介绍以及maven deploy配置

一 、Nexus仓库介绍 首先介绍一下Nexus的四个仓库的结构&#xff1a; maven-central 代理仓库&#xff0c;代理了maven的中央仓库&#xff1a;https://repo1.maven.org/maven2/&#xff1b; maven-public 仓库组&#xff0c;另外三个仓库都归属于这个组&#xff0c;所以我们的…

Oracle21C--Windows卸载与安装

卸载方法&#xff1a; &#xff08;1&#xff09;WinR&#xff0c;输入services.msc,打开服务&#xff0c;把Oracle相关的服务全部停止运行&#xff08;重要&#xff09; &#xff08;2&#xff09;WinR&#xff0c;输入regedit&#xff0c;打开注册表&#xff0c;删除Oracle开…

国产芯片设备达到3纳米,还打入台积电,美日荷被彻底赶出市场

由于众所周知的原因&#xff0c;荷兰和日本的光刻机对中国供应面临限制&#xff0c;其他芯片设备和材料也受到很大的限制&#xff0c;这促使国产芯片产业链积极完善&#xff0c;以实现纯国产芯片工艺&#xff0c;虽然在光刻机方面还稍微落后&#xff0c;不过有一项国产芯片设备…

Maven入门教程(三):Maven语法

视频教程&#xff1a;Maven保姆级教程 Maven入门教程(一)&#xff1a;安装Maven环境 Maven入门教程(二)&#xff1a;idea/Eclipse使用Maven Maven入门教程(三)&#xff1a;Maven语法 Maven入门教程(四)&#xff1a;Nexus私服 Maven入门教程(五)&#xff1a;自定义脚手架 6.Mav…

2023年高教社杯数学建模思路 - 案例:粒子群算法

文章目录 1 什么是粒子群算法&#xff1f;2 举个例子3 还是一个例子算法流程算法实现建模资料 # 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 什么是粒子群算法&#xff1f; 粒子群算法&#xff08;Pa…

Qt按钮按动、划过背景设置

title: Qt按钮按动、划过背景设置 date: 2023-08-30 19:29:49 tags: Qt按钮按钮背景设置按钮动态效果 categories:Qt学习之路 给按钮添加背景后&#xff0c;原先按钮的按动效果就没了&#xff0c;&#xff08;按钮没有反馈&#xff0c;我的手就会一直在抖&#xff0c;哈哈哈哈…

最新社区团购电商小程序源码 无bug完美运营版+详细搭建部署教程

分享一个开源社区团购电商小程序源码&#xff0c;无bug完美运营版&#xff0c;含完整前后端详细搭建部署教程。 系统运营模式&#xff1a;整合线下社区资源&#xff0c;由各快递代收点、社区便利店、社区物业、业主等发起的社区微信群&#xff0c;推送商品信息&#xff0c;消费…

leetcode原题: 最小值、最大数字

题目1&#xff1a;最小值 给定两个整数数组a和b&#xff0c;计算具有最小差绝对值的一对数值&#xff08;每个数组中取一个值&#xff09;&#xff0c;并返回该对数值的差 示例&#xff1a; 输入&#xff1a;{1, 3, 15, 11, 2}, {23, 127, 235, 19, 8} 输出&#xff1a;3&…

运维Shell脚本小试牛刀(三)::$(cd $(dirname $0); pwd)命令详解

运维Shell脚本小试牛刀(一) 运维Shell脚本小试牛刀(二) 运维Shell脚本小试牛刀(三)::$(cd $(dirname $0)&#xff1b; pwd)命令详解 一&#xff1a; $(cd $(dirname $0); pwd) 命令详解 path $(cd $(dirname $0); pwd)解析&#xff1a; 1、取当前运行脚本的所在路径&#xf…

【AI模型】LibTorch深度学习框架配置与使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍LibTorch深度学习框架配置与使用。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次…

Jmeter性能压测 —— 高并发思路

测试场景&#xff1a;模拟双11&#xff0c;百万级的订单量一个物流信息的查询接口。 条件&#xff1a;接口响应时间<150ms以内。10万并发量每秒。 设计性能测试方案 1、生产环境 ①10W/S--并发量&#xff08;架构师/技术负责人提供&#xff09; ②20台机器&#xff08;…

java八股文面试[多线程]——ThreadLocal底层原理和使用场景

源码分析&#xff1a; ThreadLocal中定义了ThreadLocalMap静态内部类&#xff0c;该内部类中又定义了Entry内部类。 ThreadLocalMap定了 Entry数组。 Set方法&#xff1a; Get方法&#xff1a; Thread中定义了两个ThreaLocalMap成员变量&#xff1a; Spring使用ThreadLocal解…

STP生成树

文章目录 一、二层环路带来的问题二、生成树定义三、STP相关概念BPDU&#xff08;Bridge Protocol Data Unit&#xff09;定义分类用来选举的参数 四、STP的选举机制五、STP初始化流程交换机端口状态 六、STP计时器七、STP拓扑变更机制八、STP的问题九、RSTP&#xff08;Rapid …

200 Smart 与 PLC 4000 PN/PN Coupler通讯

1、打开200 smart 菜单栏选择工具&#xff0c;profinet网络&#xff0c;添加控制器 2、200 Smart PN /PN Coupler 做为控制器组态IO均配置128个BYTE. 3、S7400 在硬件配置里组态 PN/PN Coupler通讯 并添加报文长度为128BYTE 4、通过程序将200 msart中的IO点写到DB数据块内

c++11 标准模板(STL)(std::basic_stringstream)(一)

定义于头文件 <sstream> template< class CharT, class Traits std::char_traits<CharT> > class basic_stringstream;(C11 前)template< class CharT, class Traits std::char_traits<CharT>, class Allocator std::alloc…

机器学习基础17-基于波士顿房价(Boston House Price)数据集训练模型的整个过程讲解

机器学习是一项经验技能&#xff0c;实践是掌握机器学习、提高利用机器学习 解决问题的能力的有效方法之一。那么如何通过机器学习来解决问题呢&#xff1f; 本节将通过一个实例来一步一步地介绍一个回归问题。 本章主要介绍以下内容&#xff1a; 如何端到端地完成一个回归问题…

Ansible学习笔记8

group模块&#xff1a; 创建一个group组&#xff1a; [rootlocalhost ~]# ansible group1 -m group -a "nameaaa gid5000" 192.168.17.105 | CHANGED > {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}…

【Tkinter系列05/15】小部件(框架标签和列表)

续接上文&#xff1a;【Tkinter系列04/15】界面小部件&#xff08;选择钮、行编辑器&#xff09; 11. 小部件Frame 框架基本上只是其他小部件的容器。 应用程序的根窗口基本上是一个框架。 每个框架都有自己的网格布局&#xff0c;因此每个框架中小部件的网格化 框架独立工作…

ARP欺骗(大白话)

前提条件&#xff1a; 有三台主机&#xff0c;PC1&#xff0c;PC2&#xff0c;PC3&#xff0c;现要实现PC1与PC2的关联&#xff08;如图&#xff09; 不存在ARP欺骗时 步骤&#xff1a; 首先查看arp表&#xff08;有ip和mac的关系&#xff09; 如果表中有PC2的信息&#xf…

图像二值化

目录 1.固定值二值化 2.自适应阈值二值化 3.Android JNI完整代码 1.固定值二值化 固定阈值二值化是OpenCV中一种简单而常用的图像处理技术&#xff0c;用于将图像转换为二值图像。在固定阈值二值化中&#xff0c;像素值根据一个预定义的阈值进行分类&#xff0c;大于阈值的…