• 【Linux】环境基础开发工具使用(万字汇总)


    🎇Linux:环境基础开发工具使用


    • 博客主页:一起去看日落吗
    • 分享博主的在Linux中学习到的知识和遇到的问题
    • 博主的能力有限,出现错误希望大家不吝赐教
    • 分享给大家一句我很喜欢的话: 看似不起波澜的日复一日,一定会在某一天让你看见坚持的意义,祝我们都能在鸡零狗碎里找到闪闪的快乐🌿🌞🐾。

    在这里插入图片描述

    🐳1. Linux 软件包管理器 yum

    • 软件包
      什么是软件包
    • 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.
    • 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装.
    • 软件包和软件包管理器, 就好比 “App” 和 “应用商店” 这样的关系.
    • yum(Yellow dog Updater, Modified)是Linux下非常常用的一种包管理器. 主要应用在Fedora, RedHat,Centos等发行版上.
    • 关于 rzsz

    这个工具用于 windows 机器和远端的 Linux 机器通过 XShell 传输文件.
    安装完毕之后可以通过拖拽的方式将文件上传过去.

    注意事项:

    关于 yum 的所有操作必须保证主机(虚拟机)网络畅通!!!
    可以通过 ping 指令验证

    ping www.baidu.com
    
    • 1

    请添加图片描述

    • 查看软件包

    **通过 yum list 命令可以罗列出当前一共有哪些软件包. 由于包的数目可能非常之多, 这里我们需要使用 grep 命令只筛选出我们关注的包. **

    例如:

    yum list | grep lrzsz
    
    • 1

    结果如下:

    请添加图片描述

    注意事项:

    • 软件包名称: 主版本号.次版本号.源程序发行号-软件包的发行号.主机平台.cpu架构.
    • “x86_64” 后缀表示64位系统的安装包, “i686” 后缀表示32位系统安装包. 选择包时要和系统匹配.
    • “el7” 表示操作系统发行版的版本. “el7” 表示的是 centos7/redhat7. “el6” 表示 centos6/redhat6.
    • 最后一列, base 表示的是 “软件源” 的名称, 类似于 “小米应用商店”, “华为应用商店” 这样的概念.
    • 如何安装软件

    通过 yum, 我们可以通过很简单的一条命令完成 gcc 的安装.

    sudo yum install lrzsz
    
    • 1

    yum 会自动找到都有哪些软件包需要下载, 这时候敲 "y" 确认安装.
    出现 "complete" 字样, 说明安装完成.

    注意事项:

    • 安装软件时由于需要向系统目录中写入内容, 一般需要 sudo 或者切到 root 账户下才能完成.
    • yum安装软件只能一个装完了再装另一个. 正在yum安装一个软件的过程中, 如果再尝试用yum安装另外一个软件, yum会报错.
    • 如果 yum 报错, 请自行百度.
    • 如何卸载软件

    仍然是一条命令:

    sudo yum remove lrzsz
    
    • 1
    • 好玩的命令

    行驶的小火车: 下载:yum install -y sl 执行:sl

    在这里插入图片描述

    说话的牛:下载:yum install -y cowsay 执行:cowsay hello

    在这里插入图片描述


    🐳2. Linux开发工具

    • 在以前,别人问你,你在什么环境下写代码 ?你在什么环境下调试代码?你在什么环境下编译、链接代码?你会怎么回答呢?
    • vs code 2020
    • 对于上面这种环境,我们称之为集成开发环境。相比我们在 Linux 中大部分情况下我们所使用的工具都是独立的工具 —— 比如我们写代码用 vim、编译用 gcc/g++、调试用 gdb、维护项目关系用 make/Makefile 等

    在这里插入图片描述


    🐳3. Linux编辑器-vim使用

    🐬3.1 vim的基本概念

    vim是一个文本编辑器,和记事本没有区别,只负责写代码

    🐬3.2 vim的安装

    • 已安装

    Linux通常都已经默认安装好了 vi 或 Vim 文本编辑器,我们只需要通过vim命令就可以直接打开vim编辑器了

    请添加图片描述

    • 未安装

    有些精简版的Linux操作系统,默认并没有安装vim编辑器。当我们在终端中输入vim命令时,系统会提示"command not found"。

    解决办法:

    有网的前提下,可以使用yum工具对vim编辑器进行安装

    # 安装vim且询问是否时自动选择yes
    # yum install vim -y
    
    • 1
    • 2

    🐬3.3 vim的三种常用模式

    vim是一款多模式的编辑器,有三种常见模式:命令模式、插入模式,底行模式。

    请添加图片描述

    • 命令模式:

    控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode,可以通过快捷键对文件内容进行复制、粘贴、删除等操作

    • 插入模式

    在命令模式下输入小写字母a或小写字母i即可进入编辑模式,只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。

    • 底行模式

    在命令模式下输入冒号shift + :即可进入末行模式,可以在末行输入命令来对文件进行查找、替换、保存、退出等操作


    🐬3.4 vim的基本操作

    • 进入vim,在系统提示符号输入vim及文件名称后,就进入vim全屏幕编辑画面:
    • $ vim test.c
    • 不过有一点要特别注意,就是你进入vim之后,是处于[正常模式],你要切换到[插入模式]才能够输入文字。
    • 命令模式 -> 插入模式(输入 a / i / 0)
    • 插入模式 -> 命令模式(ESC)
    • 命令模式 -> 底行模式(shift + :
    • 底行模式 -> 命令模式(ESC)
    • 退出vim及保存文件,在[命令模式]下,按一下「:」冒号键进入「Last line mode」:
    • :w (保存当前文件)
    • :wq (存盘并退出 vim)
    • : q! (不存盘强制退出 vim)

    🐬3.5 vim正常模式命令集

    • 进入插入模式/底行模式
    • 按【i】切换进入插入模式后,是从光标当前位置开始输入文字
    • 按【a】进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字
    • 按【o】进入插入模式后,是插入新的一行,从行首开始输入文字
    • 按【:】进入底行模式
    • 移动光标

    vim可以直接用键盘上的光标来上下左右移动,但正规的vim是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格

    命令效果
    按「G」移动到文章的最后
    按「$ 」移动到光标所在行的“行尾”
    按「^」移动到光标所在行的“行首”
    按「w」光标跳到下个字的开头
    按「e」光标跳到下个字的字尾
    按「b」光标回到上个字的开头
    按「#l」光标移到该行的第#个位置,如:5l,56l
    按[gg]进入到文本开始
    按[shift+g]进入文本末端
    按「ctrl」+「b」屏幕往“后”移动一页
    按「ctrl」+「f」屏幕往“前”移动一页
    按「ctrl」+「u」屏幕往“后”移动半页
    按「ctrl」+「d」屏幕往“前”移动半页
    • 删除文字
    命令效果
    「x」每按一次,删除光标所在位置的一个字符
    「#x」例如,「6x」表示删除光标所在位置的“后面(包含自己在内)”6个字符
    「X」大写的X,每按一次,删除光标所在位置的“前面”一个字符
    「#X」例如,「20X」表示删除光标所在位置的“前面”20个字符
    「dd」删除光标所在行
    「#dd」从光标所在行开始删除#行
    • 复制
    命令效果
    「yw」将光标所在之处到字尾的字符复制到缓冲区中。
    「#yw」复制#个字到缓冲区
    「yy」复制光标所在行到缓冲区。
    「#yy」例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。
    「p」将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。
    • 替换
    命令效果
    「r」替换光标所在处的字符。
    「R」替换光标所到之处的字符,直到按下「ESC」键为止。
    • 撤销上一次操作
    命令效果
    「u」如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次回复。
    「ctrl + r」撤销的恢复
    • 更改
    命令效果
    「cw」更改光标所在处的字到字尾处
    「c#w」例如,「c3w」表示更改3个字
    • 跳至指定行
    命令效果
    「ctrl」+「g」列出光标所在行的行号。
    「#G」例如,「15G」,表示移动光标至文章的第15行行首。

    🐬3.6 vim底行模式命令集

    • 列出行号

    「set nu」: 输入「set nu」后,会在文件中的每一行前面列出行号。

    • 跳到文件中的某一行

    「#」:「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章的第15行

    • 查找字符
    命令效果
    「/关键字」先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止。
    「?关键字」先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」

    问题:/ 和 ?查找有和区别?操作实验一下

    / 是从文本的开头开始往下查找,? 是从文本结尾开始往上查找。

    • 保存文件

    「w」: 在冒号输入字母「w」就可以将文件保存起来

    • 离开vim
    • 「q」:按「q」就是退出,如果无法离开vim,可以在「q」后跟一个「!」强制离开vim。
    • 「wq」:一般建议离开时,搭配「w」一起使用,这样在退出的时候还可以保存文件。

    🐬3.7 配置vim

    • 不建议在root下面配置vim
    • 在目录 /etc/ 下,有个 .vimrc 的文件,这是系统中公共的 vim 配置文件,对所有用户都有效
    • 而在每个用户的主目录下,都可以建立自己私有的配置文件,命名为 .vimrc。例如,/root 目录下,通常已经存在一个 .vimrc 文件,如果不存在,则自己创建
    • 切换用户成为自己执行 su,进入自己的主工作目录执行 cd~
    • 打开自己目录下的 .vimrc 文件,执行 vim .vimrc

    🐬3.8 sudo提升权限问题

    • 曾经我们在普通用户的操作中,想使用 sudo 来短期提升权限,却并不能如愿,这是因为默认这个用户是不受信任的

    解决办法:

    • 切换成root
    • 输入指令:vim /etc/sudoers
    • 对应位置
    • 帮上面那行指令复制,把ALL改成自己的用户名

    在这里插入图片描述


    🐳4. Linux编辑器-gcc/g++使用

    • 背景知识
      我们的 C 代码写完,要变成可执行程序需要四个阶段:
    1. 预处理(进行宏替换)
    2. 编译(生成汇编)
    3. 汇编(生成机器可识别代码)
    4. 连接(生成可执行文件或库文件)

    🐬4.1 gcc如何使用

    格式 :gcc [选项] 要编译的文件 [选项] [目标文件]

    # 例如: 执行程序-> gcc code.c -o code

    请添加图片描述

    🐬4.2 预处理(进行宏替换等)

    • 预处理功能主要包括宏定义,文件包含,条件编译,去注释等。
    • 预处理指令是以#号开头的代码行。

    实例: gcc –E code.c –o code.i

    • 选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程
    • 选项“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序

    code.c

    在这里插入图片描述

    code.i

    在这里插入图片描述

    预处理之后还是C语言


    🐬4.3 编译(生成汇编)

    • 在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc 把代码翻译成汇编语言。
    • 用户可以使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码

    实例: gcc –S code.i –o code.s

    在这里插入图片描述

    code.s
    在这里插入图片描述

    这是汇编语言,虽然我们没有学过但也需要大概知道是什么


    🐬4.4 汇编(生成机器可识别代码)

    • 汇编阶段是把编译阶段生成的“.s”文件转成目标文件
    • 读者在此可使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了

    实例: gcc –c code.s –o code.o

    code.o
    请添加图片描述


    🐬4.5 连接(生成可执行文件或库文件)

    • 在成功编译之后,就进入了链接阶段。

    实例: gcc code.o –o code

    请添加图片描述


    🐬4.6 gcc选项汇总

    • E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面
    • S 编译到汇编语言不进行汇编和链接
    • c 编译到目标代码
    • o 文件输出到 文件
    • static 此选项对生成的文件采用静态链接
    • g 生成调试信息。GNU 调试器可利用该信息 。
    • shared 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.
    • O0
    • O1
    • O2
    • O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
    • w 不生成任何警告信息。
    • Wall 生成所有警告信息。

    为了方便记忆,我们可以看看键盘的左上角的 Esc 键,它刚好对应我们的 -E、-S、-c 选项;而生成的文件的后缀刚好对应镜象文件的后缀 .iso


    🐬4.7 动态库和静态库

    • 在这里涉及到一个重要的概念:函数库

    我们的C程序中,并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实“printf”函数的呢?


    最后的答案是:系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没有特别指定时,gcc 会到系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去,这样就能实现函数“printf”了,而这也就是链接的作用

    • 静态库和动态库
    • 静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为“.a”
    • 动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为“.so”,如前面所述的 libc.so.6 就是动态库。
    • gcc 在编译时默认使用动态库。完成了链接之后,gcc 就可以生成可执行文件,如下所示。
      gcc code.o –o code
    • gcc默认生成的二进制程序,是动态链接的,这点可以通过file 命令验证。
    • file code file 辨别code 的类型

    请添加图片描述

    • ldd code ldd 命令查看 mytest 所依赖的库

    请添加图片描述

    若要采用静态链接,需要带选项

    gcc code.c -o code_static -static

    -static:表面使用静态链接的方式形成可执行程序

    在新版本的 Linux 系统下一般都不会安装 libc.a,只会安装 libc.so,所以就使用不了 -static,解决方法就是安装 glibc-static

    //安装指令
    sudo yum install glibc-static   //c静态库
    sudo yum install libstdc++-static  //c++静态库
    
    • 1
    • 2
    • 3

    请添加图片描述

    光是一个简单的程序,静态链接的大小就比动态链接高出 100 倍以上


    🐳5. Linux调试器 —— gdb使用

    🐬5.1 背景

    • 程序的发布方式有两种,debug模式和release模式
    • Linux gcc/g++出来的二进制程序,默认是release模式
    • 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上-g 选项
    • 当我们遇到一个程序不理解,我们就可以用到调试

    在这里插入图片描述

    • 首先我们先生成一个可执行程序,然后进行gdb
    gdb text
    
    • 1

    请添加图片描述

    • Linux 中默认生成的可执行程序是 release 版本的, 如果需要 debug 版本,就需要-g
    gcc text2.c -o text_debug -g
    gcc text2.c -o text_release
    
    • 1
    • 2

    在这里插入图片描述

    • Linux 中生成的可执行程序,它的二进制的格式是 elf 的,readelf 可以读取内部的格式:
    readelf
    
    • 1

    请添加图片描述

    • 选项 -S 查看可执行程序的分段情况
    readelf -S text_debug | grep debug
    readelf -S text_realease | grep debug
    
    • 1
    • 2

    请添加图片描述


    🐬5.2 使用命令汇总

    命令效果
    ctrl + d/D 或 quit/q退出调试
    list/l 行号(, 行号)显示 binFile 源代码,显示的是当前行号周围的代码,可以利用另一个行号来指定一段区间
    list/l 函数名列出某个函数的源代码
    r 或 run运行程序
    n 或 next单条执行
    s 或 step进入函数调用
    break(b) 行号在某一行设置断点
    break 函数名在某个函数开头设置断点
    info break/I b查看断点信息
    finish执行到当前函数返回,然后停下等待命令
    print§打印表达式的值,通过表达式可以修改变量的值或调用函数,类似于 p
    p/P 变量打印变量值
    set var修改变量的值
    continue 或 c从当前位置开始连续而非单步执行程序
    delete breakpoints/d 或 d删除所有断点
    delete breakpoints n 或 d n删除序号为 n 的断点
    enable (breakpoints) 序号启用断点,默认全启
    disable 序号禁用断点,默认全禁
    display 变量名跟踪查看一个变量,每次停下来都显示它的值
    undisplay取消对先前设置的那些变量的跟踪
    until X 行号跳至 X 行
    breaktrace 或 bt查看各级函数调用及参数
    info (i) locals查看当前栈帧局部变量的值
    quit退出 gdb

    🐳6. Linux项目自动化构建工具-make/Makefile

    • 背景
    • 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力
    • 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作
    • makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
    • make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。
    • make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。
    • 依赖关系

    其次我们再了解一下什么是 make,什么是 makefile:

    • make 是一条命令,它可以帮我们自动化构建项目
    • makefile 是一个文件,自动化构建项目的过程是它完成的
    • 这个文件里包含目标文件和原始文件的依赖关系和依赖方法。
    • 协助理解:

    我是我老爸的儿子 ————依赖关系
    老爸给我发生活费————依赖方法

    • 实例:

    格式: 目标文件:依赖文件
    「tab」依赖方法

    在这里插入图片描述

    make直接编译代码:
    请添加图片描述

    make clean 清理文件

    请添加图片描述

    • .PHONY
    • .PHONY 表示定义·伪目标·,它的意义是 make clean 时 clean 总是可执行的
    • 这个 clean 没有依赖关系,但有依赖方法
    • 执行make命令是没有效果的(底层是通过对比修改时间和可执行时间实现的),然而make clean 即便刚刚执行过,也可以随便执行。

    make会根据你编写的依赖关系,从上往下自动推导程序的执行
    make会在当前目录下找名字叫Makefile或makefile的文件。然后它会默认找文件中的第一个目标文件(target),并把这个文件作为最终的目标文件。

    实例:
    当我们连续make两次:
    在这里插入图片描述

    只会执行一次,第二次不会执行

    当我们连续make clean:
    请添加图片描述

    因为含有伪命令,所以make clean 可以无限次执行,所以叫做总是可执行的

    问题:makefile怎么知道我的可执行文件是最新的呢?

    根据文件最近的更改时间来判断(比较源文件和生成文件时间)

    请添加图片描述

    • 原理:
      make是如何工作的,在默认的方式下,也就是我们只输入make命令。那么,
    1. make会在当前目录下找名字叫“Makefile”或“makefile”的文件。
    2. 如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“hello”这个文件,并把这个文件作为最终的目标文件。
    3. 如果hello文件不存在,或是hello所依赖的后面的hello.o文件的文件修改时间要比hello这个文件新(可以用touch 测试),那么,他就会执行后面所定义的命令来生成hello这个文件。
    4. 如果hello所依赖的hello.o文件不存在,那么make会在当前文件中找目标为hello.o文件的依赖性,如果找到则再根据那一个规则生成hello.o文件。(这有点像一个堆栈的过程)
    5. 当然,你的C文件和H文件是存在的啦,于是make会生成 hello.o 文件,然后再用 hello.o 文件声明
      make的终极任务,也就是执行文件hello了。
    6. 这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。
    7. 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错,而对于所定义的命令的错误,或是编译不成功,make根本不理。
    8. make只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起,我就不工作啦。

    🐳7. Linux第一个小程序-进度条

    • \r&&\n

    我们需要了解两个概念:

    回车\r:回到当前行的最开始
    换行\n:列不变,新起一行

    在这里插入图片描述

    • 行缓冲区
    #include 
    
    int main()
    {
         printf("hello Makefile!\n");//带\n
         sleep(3);
         return 0;
    }
    
    --------------------------------------------------------------------------------------
    // 运行发现,sleep的过程中,并没有打印。
    #include 
    #include 
    
    int main()
    {
         printf("hello Makefile!");//没有\n
         sleep(3);
         return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    这是为什么呢?

    这是顺序结构,那肯定是从上至下执行。那为什么没有打印呢?
    其实这里 sleep 时,printf 已经执行了,也就是说,printf 已经执行了,并不代表信息会被我们看到。
    printf不带\n在向显示器打印时,数据不会立即刷新,而是会暂时保存在用户C语言级别的缓冲区中(c语言给我们提供的一块内存),显示器的刷新策略就是行刷新,遇到\n即把之前的字符串全部显示出来。

    解决方法:

    fflush(stdout);
    
    • 1
    • 进度条的实现:

    不换行,从左至右变长,走完再换行

    #include
    #include
    #include
    
    #define NUM 102  
     
    int main()
    {
    	char bar[NUM];
    	memset(bar,0,sizeof(bar));
    	const char *lable="|/-\\";//旋转效果,防止程序卡住不知道
    	int cut = 0;
    	while(cut <= 100)
    	{
    		printf("[%-100s][%d%%] %c\r", bar, cut, lable[cut%4]);                                         
    		fflush(stdout);
    		usleep(200000);
    		bar[cut++] = '#';          																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																					
    	}
        printf("\n");
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    在 Linux 中 sleep 是以秒为单位,usleep 是以微秒为单位的。

    在这里插入图片描述


    🐳8. 使用git命令行

    • 第一步:把本地仓库和gittee仓库同步
    git clone +仓库链接
    
    • 1

    复制HTTPS链接
    在这里插入图片描述

    请添加图片描述

    • 第二步:进入本地仓库创建相应文件

    在这里插入图片描述

    • 第三步: 将代码放到本地的目录中

    命令:git add 「文件名」

    在这里插入图片描述

    这里用的"."代表把没有在本地目录中的代码都放到本地目录中
    将需要用 git 管理的文件告知 git


    • 第四步:提交改动到本地
    git commit -m "日志信息"//日志信息不可以随意写,防止合作项目的时候混乱
    
    • 1

    如果是第一次运行,还需要绑定自己的信息
    请添加图片描述

    然后才能提交

    请添加图片描述


    • 第五步:同步到远端服务器上
    git push
    
    • 1

    需要填入用户名密码. 同步成功后, 刷新 Github 页面就能看到代码改动了.

    请添加图片描述

    完成啦,成功把自己的代码同步到gitee了
    在这里插入图片描述


  • 相关阅读:
    实现微服务会带来哪些挑战?
    Unity记录几个5.x升级到2018问题
    NX二次开发UF_CAM_set_auto_blank 函数介绍
    ShardingSphere 云上实践:开箱即用的 ShardingSphere-Proxy 集群
    是时候,重新认识一下项目经理了
    【目标检测】swin-transformer训练自己的数据集
    在winform中如何嵌入第三方软件窗体✨
    【华为联机对战服务】SDK初始化方法,返回1001错误码
    【类、抽象与继承】
    API低代码开发应用场景
  • 原文地址:https://blog.csdn.net/m0_60338933/article/details/126437699