当前位置: 首页 >  技术宝典 >  代码管理工具git的使用

代码管理工具git的使用

导读:1. git 概述.git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。也是Linus.Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。.2. git 工作流程图.**** 工作流程图如图所示,黄色部分为工作区

1. git 概述

git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。

2. git 工作流程图

**** 工作流程图如图所示,黄色部分为工作区,index为暂存区,Repository为本地仓库,Remote为远程仓库。

中文对照图如下图所示。

工作区:项目所在操作目录,实际操作项目的区域

暂存区: 用于记录工作区的工作(修改)内容

仓库区: 用于备份工作区的内容

远程仓库: 远程主机上的GIT仓库

注意: 在本地仓库中,git总是希望工作区的内容与仓库区保持一致,而且只有仓库区的内容才能和其他远程仓库交互。

3. git 下载与安装

官网下载:https://git-scm.com/download/win 根据自己的电脑操作系统位数下载。

这里也附上百度网盘下载地址:

链接:https://pan.baidu.com/s/1p_gsUpYbDZ-Qlczc7XFOng 提取码:773a

下载好后,进行安装。关于安装可以参考文中最后的参考链接。安装好后:

在命令窗口输入git –version及右键显示如下图所示(表明安装好了)。

4. 初始配置

配置提交者用户名与邮箱名

git config –global user.name “your_username”

git config –global user.email “your_email”

使用git config –list命令可以查看配置信息:

配置好后,会生成一个.gitconfig文件,里面就是我们配置的name与Email。

注意:上面的配置中--global参数将把配置应用到当前用户的全局范围中,配置多少个,也只是后面的配置覆盖前面的配置,在.gitconfig文件中只会有一个用户名与email。而不加--global参数则只会将配置应用到当前仓库的本地范围中。如果想让每个仓库用户名都不同,则在该仓库目录下使用不带--gloal参数的命令配置即可。

5. 基本命令

** **5.1 初始化仓库

使用cd命令进入到你项目的目录下,使用命令git init命令将生成一个git本地仓库(目录),该仓库可以使用git管理。这里我在pycharm中新建了一个项目叫hello_git。

原始hello_git项目内容如下:

使用git init后,会生成一个.git的隐藏文件夹,如果没有看到,点击查看,把显示隐藏文件勾上就能看到了。这个.git文件夹使我们的本地仓库。

5.2 查看本地仓库状态

git status

说明: 初始化仓库后默认工作在master分支,当工作区与仓库区不一致时会有提示。

** 5.3 将工作文件添加到暂存区**

使用git add 文件1 ,文件2将文件1,文件2添加到暂存区。如果想全部(不包含隐藏文件)添加可以使用add .或者使用add *。再次使用git status查看状态,全部为绿色。

添加到暂存区后,会在.git文件夹中生成一个index文件,这个就是暂存区。

** 5.4 取消文件暂存记录**

使用git rm –cached 文件名 取消文件暂存。

5.5 设置忽略文件

在GIT项目中可以在项目根目录添加.gitignore文件的方式,规定相应的忽略规则,用来管理当前项目中的文件的忽略行为。.gitignore 文件是可以提交到公有仓库中,这就为该项目下的所有开发者都共享一套定义好的忽略规则。在.gitignore 文件中,遵循相应的语法,在每一行指定一个忽略规则。

.gitignore忽略规则简单说明:

file 表示忽略file文件

*.a 表示忽略所有 .a 结尾的文件

!lib.a 表示但lib.a除外

build/ 表示忽略 build/目录下的所有文件,过滤整个build文件夹;

创建一个.gitignore文件(注意文件名只能是这个,不能用别的名字)

编辑.gitignore文件,添加忽略的文件。

再次查看git状态。发现main.py与hello.txt消失了。表明我们无法add这些文件到暂存区了,一般这类文件不重要,不需要提交,只给自己看的,比如使用git add *全部add到暂存区时,设置.gitignore后,就会忽略这些文件。

5.6 将暂存区文件同步到本地仓库

语法如下:

git commit [file] -m [message]

说明: -m表示添加一些同步信息,表达同步内容,不加file表示同步所有暂存记录的文件

[message]:是提交信息的内容。你需要用引号将消息内容包裹起来,以确保整个消息被正确解析。

例如:将暂存区所有记录同步到仓库区

git commit -m ‘add files’

再次使用git status查看状态,发现绿色部分没有了,表明已经提交到本地仓库了。可以在.git文件夹中查看文件COMMIT_EDITMSG属性,发现时间是当前时间,他就应该使我们本地仓库存储提交文件的地方了。另外还有logs文件夹内容也发生了变化。其中一个文件如下:

5.7 查看日志记录

git log

git log –pretty=oneline

Git log命令用于显示提交历史记录。它会按照时间顺序列出所有的提交,最新的提交会位于最上面。图中黄色长串部分是哈希值,下面是作者(最前面创建的用户名与邮箱)与日期时间。HEAD->master是一个提示,表示当前处于master分支。HEAD是一个指针,指向当前提交的分支master。

还可以使用git log命令的一些选项和参数来修改和过滤提交历史记录的显示方式,例如--oneline、--graph、--author等。

下面的命令查看了提交历史,并以单行显示每个提交的信息。

** 5.8 暂存区恢复到工作区**

语法:git checkout [commit] – [file]

[commit]是指定的提交,可以是提交的哈希值、分支名或标签名。[file] 是要恢复或检出的文件路径。不写[commit]时,表示恢复到最新的保存值。

恢复test.py文件后,工作区的test.py将更新为暂存区的最近一次add的test.py。

如果使用git mv 目录1 目录2,则将目录1移动到目录2。使用git rm文件名可以删除文件。

6. 版本控制

6.1 回退到上一个commit节点

git reset –hard HEAD^

说明: 一个^表示回退1个版本,依次类推。当版本回退之后工作区会自动和当前commit版本保持一致。

用于将当前分支的 HEAD 指向上一次提交(即上一个提交)的状态,并重置工作目录和暂存区,丢弃之前的所有更改(无论是否已经add到暂存区,都将丢弃,可以考虑回退之前使用git stash命令封存当前更改,关于stash后面会讲到)。

注意,在windows中cmd.exe)会按照配置进行分页显示(通常是每次显示一屏内容),以便在输出较长时可以按页浏览。当命令执行后,如果输出内容超过一页时,会出现 “More?” 提示,表示还有更多内容需要显示,等待用户输入命令来翻页或退出。使用管道将命令输出传递给 more 命令,以便一次性显示所有内容。如下图:

6.2 退回到指定的commit_id节点

git reset –hard [commit_id]

[commit_id]可以是完整的哈希值或部分哈希值。

** 6.3 查看所有操作记录**

git reflog

注意:最上面的为最新记录,可以利用commit_id去往任何操作位置。

** 6.4 标签的创建及操作**

标签在项目的重要commit位置添加快照,保存当时的工作状态,一般用于版本的迭代。

git tag [tag_name] [commit_id] -m [message]

该命令用于在指定的提交上创建一个新的标签,并为该标签添加一个描述信息。

说明: commit_id可以不写则默认标签表示最新的commit_id位置,message也可以不写,但是最好添加。

查看标签:

git tag

去往某个标签节点

git reset –hard [tag]

删除标签

git tag -d [tag]

7. 工作区保存及其他操作

7.1 保存工作区

git stash save [message]

说明: 将工作区未提交的修改封存,让工作区回到修改前的状态。

这里新建了一个stash.py文件。红色表示未add到暂存区。这里使用git add明林将该文件add到暂存区。

再次查看pycharm,这个stash.py文件没有了。

配置秘钥到gitee后,为什么clone还需要输入用户名与密码

7.2 查看工作区列表

git stash list

说明:最新保存的工作区在最上面

7.3 应用某个工作区

git stash apply [stash@{n}]

此时在pycharm中stash.py文件又出现了。

7.4 删除工作区

git stash drop [stash@{n}] 删除某一个工作区

git stash clear 删除所有保存的工作区

8. 分支管理

分支即每个人在原有代码(分支)的基础上建立自己的工作环境,完成单独开发,之后再向主分支统一合并工作内容。使用分支的好处是各自开发互不干扰,防止误操作对其他开发者的影响。

8.1 分支的查看

git branch

说明: 前面带 * 的分支表示当前工作分支

8.2 创建分支

git branch [branch_name]

说明: 基于a分支创建b分支,此时b分支会拥有a分支全部内容。在创建b分支时最好保持a分支”干净”状态。创建分支并不会自动切换到新分支,仍然会保持在当前的分支上。

8.3 切换工作分支

git checkout [branch]

注意:如果使用git checkout -b [branch_name] 可以同时完成创建分支和切换分支的工作

8.4 合并分支

git merge [branch]

注意:分支的合并一般都是子分支向父分支中合并

8.5 删除分支

git branch -d [branch] 删除分支

git branch -D [branch] 删除没有被合并的分支

下面给出了分支结构的操作图。

8.6 分支冲突问题

当分支合并时,原来的父分支发生了变化,在合并过程中就会产生冲突问题,这是合并分支过程中最为棘手的问题。

冲突情形 1:原来的分支增加了新文件或者原有文件发生了变化

此时合并可能会出现:”请输入一个提交信息以解释此合并的必要性…”,此时,随便输入就额可以了。

冲突情形 2:子分支和父分支修改了相同的文件。此时,需要修改后,add,commit操作后合并。

以上git命令操作没有涉及到远程仓库操作,接下来介绍gitee,使用命令及pycharm可视化操作对代码进行管理。

9. github 与gitee的使用

github与gitee操作差不多,这里github不容易访问,暂时介绍gitee的使用。

9.1 gitee 介绍

码云(Gitee)是 OSCHINA 推出的代码托管协作开发平台,支持 Git 和 SVN,提供免费的私有仓库托管。官网是https://gitee.com/。使用前先注册,另外gitee可以关联github,可以fork github中的项目。

9.2 在gitee中创建仓库

按如图所示操作,新建仓库操作。

点击创建后,如下图所示。记住这里有HTTPS与SSH,后面会用到。

9.3 pycharm 中配置git路径

这里配置前面安装的git路径(也可以在plugins中安装使用gitee插件)。

9.4 pycharm 中commit到本地仓库

点击commit后,stash.py代码被提交到了本地仓库。

9.5 pycharm push 到远程gitee仓库

点击push,或者选择自己想要的文件push。会出现一个选框,需要填入gitee登录的账号与密码,忘记截图了,这里提醒一下。

最后提交成功了(如下图所示),上面提交过程中遇到过问题(好像是push被拒绝了,怎么解决忘了),然后在gitee中查看:

9.4 命令提交代码

push的前提是先commit到本地仓库。

添加远程仓库 URL

git remote add origin https://gitee.com/wancy_20172023_7_19.git

这是后面添加的,所以显示已存在。

推送本地 master 分支到远程仓库

git push -u origin master

刷新网页。

git pull操作,这里我在网页中修改了command_push.py里面的内容。不变的话pull会显示Already up to date。

使用ssh的url也是可以的(但是如果配置ssh秘钥后,只能使用ssh的url地址了了)。

9.5 搭建私钥公钥实现免密认证

这里给个图算了,我没有弄这个,windows应该是记住密码了,在linux中每次pull、push都需要输入账号与密码。网上很多ssh的加密操作教程。

找到控制面板windows凭据中能找到确实是gitee的账号与密码。

注意使用ssh秘钥,在gitee配置公钥后,使用git命令从远程仓库pull clone时,使用的url不再是https那个了,而是SSH那个url。

10. 功能与特点

分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。

从一般开发者的角度来看,git有以下功能:

1、从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。

2、在自己的机器上根据不同的开发目的,创建分支,修改代码。

3、在单机上自己创建的分支上提交代码。

4、在单机上合并分支。

5、把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。

6、生成补丁(patch),把补丁发送给主开发者。

7、看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。

8、一般开发者之间解决冲突的方法,开发者之间可以使用pull 命令解决冲突,解决完冲突之后再向主开发者提交补丁。

从主开发者的角度(假设主开发者不用开发代码)看,git有以下功能:

1、查看邮件或者通过其它方式查看一般开发者的提交状态。

2、打上补丁,解决冲突(可以自己解决,也可以要求开发者之间解决以后再重新提交,如果是开源项目,还要决定哪些补丁有用,哪些不用)。

3、向公共服务器提交结果,然后通知所有开发人员。

小结: 除了git外,还有SVN(Subversion,SVN是集中式的)版本控制系统,也是一个开源的版本控制系统。本文使用的环境系统是windows系统,会记住密码。可能与linux存在少许不同之处。尽量在项目中降低耦合度,不同的分支只编写自己的模块。如果必须修改原来父级分支的文件内容,那么做好分工,不要让多个分支都修改同一个文件。

参考资料:

https://baike.baidu.com/item/GIT/12647237?fr=ge_ala

https://blog.csdn.net/nanxun201314/article/details/127719569

https://www.cnblogs.com/xueweisuoyong/p/11914045.html(git的安装)

https://blog.csdn.net/weixin_61485030/article/details/131114418(git的安装)

不足或错误之处欢迎指正与评论,觉得有用,请点个赞!

内容
  • Docker的Portainer认识、安装、使用
    Docker的Portainer
    2023-12-08
    一、认识.docker的图形化界面.Portainer 是一个轻量级的容器管理界面,可以让用户更轻松地管理 Docker
  • misc刷题
    misc刷题
    2023-12-04
    lsb隐写.引用一段百度内容.> LSB隐写就是修改RGB颜色分量的最低二进制位也就是最低有效位(LSB),而人类的眼睛
  • 虹科案例 | 丝芙兰xDomo:全球美妆巨头商业智能新玩法
    虹科案例 | 丝芙兰xDomo:
    2023-12-05
    全球美妆行业的佼佼者丝芙兰,其走向成功绝非仅依靠品牌知名度和营销手段。身为数据驱动型企业,2018年以来,丝芙兰就率先在
  • 密评相关要求介绍
    密评相关要求介绍
    2023-12-04
    密评相关要求介绍.项目建设单位需从物理和环境安全、网络和通信安全、设备和计算安全、应用和数据安全等四个层面采用密码技术措
  • SonarQube系列-通过配置扫描分析范围,聚焦关键问题
    SonarQube系列-通过配置
    2023-12-04
    在许多情况下,你可能不希望分析项目中每个源文件的各个方面。例如,项目可能包含生成的代码、库中的源代码或有意复制的代码。在
  • SublimeText实现Markdown快速预览
    SublimeText实现Mar
    2023-12-07
    SublimeText是什么?.SublimeText是一个文本编辑器,同时也是一个先进的代码编辑器。SublimeTe