Git使用教程(Step By Step)[核心问题解决了,其他都没问题]

本文详细介绍Git的基本使用场景,包括将独立工程代码合入GitLab项目、撤销代码合入、跨分支应用提交,以及如何在Git中创建标签。同时,解决Git命令行中文字符显示问题。

Table of Contents

1、git如何安装自行百度

2、基本命令场景

2.1 场景1.把独立工程代码合入已建立gitlab工程中

2.2 场景2-git 打标签

2.3 场景3-git命令行中中文字符显示错误


1、git如何安装自行百度

2、基本命令场景

2.1 场景1.把独立工程代码合入已建立gitlab工程中

  • git clone http://dsfdsdidsafd.com:8080.git 工程到本地

  • cp需要上传到代码到clone的目录

  • git checkout branch 切换分支

  • git status 查看当前分支

  • git add ./[needtouploadCode] 添加所需要合入的代码

  • git commit -m "This is the code to upload." 添加注释

  • git pull origin [branchName] 更新现有工程

  • git push origin [branchName] 合入代码到远端

2.在master分支中撤销合入的代码,撤销部分合入到newFunc分支操作:

  • 1.git revert <提交ID>

    (先撤销master合入操作,commit回退到unstage阶段)

    1.在gitlab--activity中找到提交记录:找到提交记录ID(在URL连接后面)

    2.执行:git revert 998fc8cdbb513e6339adcd0e33523462562526

    #2.1:如果失败,可能是尚有改动没有提交,尝试git status查看存

    Note:

    Untracked基本为需要忽略的文件,可以在gitlab中设置全局

    可以看到是由于当前分支还存在变动及commit阶段的文件未被提交导致的,解决办法是先把commit阶段的回退到unstage

    阶段 执行1:git reset HEAD init.py 可见:

    [20:27:45] root:label git:(master*) $ git reset HEAD __init__.py 
    Unstaged changes after reset:
    D wpe-etl-python/label/__init__.py
    M wpe-etl-python/label/self_support/label_entry.py

    执行2:git status 可见 所有改动都回退到unstage阶段

     

    执行3:git stash 保存该分支下改动到stash(缓存),可见此时已经无unstage阶段

     

    #2.2如果没有失败,则继续

  • 2.执行:git push origin master (在当前分支 push 本次改动)

  • 3.执行:git checkout newFunc (切换到新分支)

  • 4.执行:git pull origin newFunc(同步最新代码)

  • 5.执行:git status (查看最新状态)

  • 6.执行:git pull origin master (从当前分支拉取master分支代码,与master同步)

    #1 此时可以通过 git log -3 查看master分支提交记录

  • 6.1执行:git push origin newFunc (??????)

  • 7.执行:git cherry-pick <commit ID> 把某次提交应用到当前分支

    e.g. 假设master_a有一个87a97aca6ed91c0ce3666561eb6a7536f7431a52的提交,master_b也需要这个改动: git checkout master_b git cherry-pick 87a97aca6ed91c0ce3666561eb6a7536f7431a52 git add <xxx> git commit –m ‘xxx’ git push origin master_b

  • 8.执行: git push origin newFunc 直接提交本次变更到当前分支

注意:本地push的修改实际是只是commit ID 对应的修改,并没有涉及到2.1中正在修改的变更

所以如果需要2.1中提到的master分支中为提交的变更也同步到当前分支,则需要执行:

git stash apply git commit -all git push origin newFunc

2.2 场景2-git 打标签

附注标签 在 Git 中创建附注标签十分简单。 最简单的方式是当你在运行 tag 命令时指定 -a 选项: 

1、git tag -a  <版本号及其名称>  -m "说明信息"
2、git tag    “显示提交信息”
3、git push origin <tagname>

可能报错:RPC错误

原因:缓存值太小,远程便捷HTTP传输请求数据时最大的缓存字节数,默认时1M字节

git config http.postBuffer 524288000 然后才push

2.3 场景3-git命令行中中文字符显示错误

由于初始化时未设置格式,此时显示的是八进制格式字符,需要命令行设置:

git config --global core.quotepath false

<think>嗯,用户这次明确要查找Buildroot的使用方法和指南,包括配置、构建流程和相关文档。之前我注意到用户提问时还提到了"参考站内引用",但后续又说明那些引用只是参考,需要更多结合上下文。用户可能是开发者或嵌入式系统工程师,正在搭建嵌入式Linux环境。用户的需求很清晰:想要系统性的Buildroot实践指导。考虑到Buildroot是专业性较强的工具,可能需要从基础概念讲起。上次回答关于Buildroot的介绍比较简短,这次需要展开详细流程,尤其要突出实操步骤。首先应该强调官方文档的重要性,因为Buildroot更新频繁,第三方教程容易过时。用户要的"文档"不仅指静态手册,还包括官方提供的资源获取途径。配置环节需要详细说明menuconfig的操作逻辑,这是新手最容易卡住的地方。构建流程部分要注意风险点提示,比如网络问题导致下载失败、依赖冲突等常见坑。用户可能是在离线环境中工作,所以离线构建模式要单独说明。最后补充FAQ很必要,因为根据社区经验,PATH配置和文件权限问题能绊住80%的新手。突然想到用户没提具体硬件平台,但ARM体系架构的示例最具普适性。教程引用选择时要标注Linux社区项目链接,这样比纯文字描述更直观。对了,最后主动提出延伸帮助能更好满足潜在需求——用户看完教程后很可能需要实战支持。</think> 好的,Buildroot 是一个**功能强大且广泛使用的工具**,用于简化**嵌入式 Linux 系统**的交叉编译过程(从配置内核、根文件系统到生成可直接使用的镜像)。以下是基于其官方文档和社区最佳实践的**详细使用教程、配置指南和构建流程**核心要点:[^1] **核心概念 & 目标:** * **目标系统:** 为嵌入式设备(通常是非PC架构,如ARM, MIPS, PowerPC等)构建一个完整的、可启动的Linux系统。 * **宿主系统:** 执行Buildroot的机器(通常是x86_64 Linux PC)。 * **交叉编译:** 在宿主系统上生成目标系统架构的可执行程序。 * **产出:** 最终生成: * Linux 内核镜像 (`uImage`, `zImage`, `Image`, `bzImage` 等) * 根文件系统镜像 (`rootfs.tar`, `rootfs.cpio`, `rootfs.ext2/3/4`, `rootfs.squashfs`, `rootfs.jffs2` 等) * Bootloader(可选,如 U-Boot) * 包含所有构建结果的完整目录 (`output/images/`) * 包含可移植头文件和库的 SDK (`output/host/`) --- **核心使用流程与配置 (Step-by-Step)** 1. **准备宿主系统 (Prerequisites):** * **确保宿主系统满足要求:** * 推荐使用主流的 **Linux 发行版** (Ubuntu, Debian, Fedora, CentOS, Arch Linux)。 * 安装必要的构建工具和依赖库:`make`, `gcc/g++`, `libncurses-dev` (用于`menuconfig`界面), `bison`, `flex`, `python`, `perl`, `which`, `find`, `tar`, `gzip`, `bzip2`, `xz`, `patch`, `cpio`, `unzip`, `rsync`, `wget`, `git`, `bc`, `file` 等。 * **获取Buildroot源码:** * 强烈建议从官方 [Buildroot 下载页面](https://buildroot.org/downloads/) 获取**稳定版本 (`stable`) 或长期支持版本 (`LTS`)** 的 tarball。 * 或者克隆官方 Git 仓库获取最新开发版(但可能不稳定): ```bash git clone https://git.busybox.net/buildroot ``` 2. **配置目标系统 (Configuration):** * **启动配置界面 (图形化推荐):** ```bash cd /path/to/buildroot make menuconfig # 最常用,基于 ncurses 的文本界面 # 或者: make nconfig # 类似 menuconfig,但基于 `ncursew` 可能有更好体验 make xconfig # 基于 Qt 的 GUI (需要安装 Qt 开发库) make gconfig # 基于 GTK 的 GUI (需要安装 GTK 开发库) ``` * `menuconfig` 是最常用、依赖最少的界面。 * **关键配置项 (Target Options):** * `Target Architecture`:选择目标设备的CPU架构 (e.g., `ARM (little endian)`). * `Target Architecture Variant`:选择具体的CPU核心指令集 (e.g., `cortex-A9`). * `Target ABI`:选择应用二进制接口 (e.g., `EABIhf` for ARM with HW Float). * `Target Binary Format`: 通常 `ELF`。 * `Floating point strategy`:选择浮点支持方式 (`Soft`, `Hardware` VFP, `NEON` 等)。 * **关键配置项 (Build Options):** * `Location to download tarballs`: 包下载目录 (建议保留默认 `dl/`)。 * `Host utilities to install`:选择需要的宿主工具(如 `ccache` 可加速后续编译,强烈推荐)。 * `Enable compiler cache`:激活 `ccache`(若安装)。 * **关键配置项 (Toolchain):** * `Toolchain type`: * `Buildroot toolchain`:**默认且推荐**。Buildroot 会自动下载并构建完整的交叉编译工具链(gcc, binutils, libc 等)。 * `External toolchain`:如果已有预编译的交叉工具链(如 Linaro, CodeSourcery),可在此指定路径和类型。 * `C library`:选择使用的C库。`glibc` 功能最全,`uclibc-ng`/`musl` 更精简、对嵌入式更友好。 * **关键配置项 (System configuration):** * `Root filesystem overlay directories`:**重要!** 指定包含要覆盖/添加到目标根文件系统的额外文件/目录的路径(如你的启动脚本、自定义配置文件、软件预置数据)。 * `/dev management`: 选择 `/dev` 设备节点的管理方式 (常用 `Dynamic using devtmpfs + eudev`)。 * `Init system`: 选择 init 程序 (如 `BusyBox init`, `systemd`)。 * `Root password`: 设置目标系统 root 用户的密码(留空则为无密码)。 * **关键配置项 (Kernel):** * `Linux Kernel`: 选择 `Yes`。 * `Kernel version`: 指定版本号或自定义 git/tarball 位置。 * `Kernel configuration`: * `Using a defconfig`: 使用已有配置文件 (e.g., `imx_v7_defconfig` for NXP i.MX 7)。 * `Using an in-tree defconfig file`:选择内核源码树中的配置。 * `Using a custom config file`:指定你自己的 `config` 文件路径。 * `Kernel binary format`:选择需要的内核镜像格式 (e.g., `uImage` for U-Boot, `Image` for newer). * **关键配置项 (Target packages):** * 浏览 `Target packages` 菜单,**按需选择** 需要在目标系统上运行的软件包 (库和应用)。 * `Libraries -> Audio/Video handling`:选择音视频编解码库。 * `Libraries -> Graphics`:选择图形库 (e.g., `SDL`, `DirectFB`, `Qt5`)。 * `Libraries -> Networking`:选择网络库 (e.g., `openssl`, `libcurl`, `zlib`)。 * `Networking applications`:选择网络应用 (e.g., `dropbear` for SSH, `ntp`, `iperf3`)。 * `Text editors and viewers`:选择文本工具 (e.g., `nano`, `vim`, `less`)。 * `Filesystem images`:**重要!** 选择需要生成的根文件系统镜像格式 (e.g., `ext2/3/4`, `squashfs`, `jffs2`, `cpio`)。通常选 `ext4` 和一个只读格式如 `squashfs`。 * `Bootloaders`:如果 Buildroot 需要帮你编译 bootloader (如 U-Boot),在此配置。 * **保存配置:** * 配置完成后,按 `Exit` 或 `<OK>` 逐级退出,**最后选择 `Yes` 保存配置**。配置会保存为当前目录下的 `.config` 文件。可随时重新运行 `make menuconfig` 修改。 3. **开始构建 (Build):** ```bash cd /path/to/buildroot make # 开始构建过程,可以加 -jN (如 make -j8)使用多核加速编译 ``` * **过程详解:** 1. **下载:** Buildroot 根据配置,自动从官方网站/镜像下载所需的源码包(内核、工具链、目标软件包等)到 `dl/` 目录。**确保网络畅通**。 2. **工具链构建:** 如果选择了 `Buildroot toolchain`,这会是最耗时的步骤之一。Buildroot 构建完整的交叉编译器 (`gcc`, `binutils`) 和 C 库 (`glibc`/`uclibc-ng`/`musl`)。 3. **内核构建:** 使用刚生成的交叉工具链编译 Linux 内核。 4. **目标包构建:** 再次使用交叉工具链,**依次编译** 所有选中的目标软件包 (`busybox`, `openssh`, `qt5`, ...)。 5. **根文件系统生成:** * 创建根文件系统骨架。 * 安装目标包编译好的程序、库和配置文件。 * 应用 `Root filesystem overlay directories` (如果配置了)。 * 根据配置添加系统用户、设备节点、设置启动脚本等。 6. **生成镜像:** 将组装好的根文件系统内容打包成之前选择的格式(如 `rootfs.ext4`, `rootfs.squashfs`)。同时生成内核镜像 (`uImage`, `Image` 等) 和 bootloader (如果配置了)。 7. **生成 SDK:** 在 `output/host/` 目录下生成包含交叉编译工具链、目标系统头文件和库的 SDK。 * **构建输出:** 所有最终结果都放在 `output/` 目录下: * `images/`: **最重要的目录!** 包含可刷写或启动的镜像文件 (`uImage`, `rootfs.ext4`, `rootfs.squashfs` 等)。 * `build/`: 包含所有中间构建目录(内核、工具链、软件包源码和构建目录)。 * `target/`: 包含目标系统的**完整根文件系统内容**(安装好所有软件包和配置后)。这是生成 `images/` 里文件系统镜像的源。 * `host/`: 包含宿主系统使用的工具(构建工具链和SDK)。 4. **部署与使用 (Deployment):** * 将 `output/images/` 下生成的内核镜像 (`uImage`, `Image`, ...) 和根文件系统镜像 (`rootfs.ext4`, `rootfs.squashfs`, ...) 按照目标硬件平台的规范,**烧录到对应的存储介质** (eMMC, SD卡, SPI NOR/NAND Flash, USB Disk等)。 * 如果目标板需要 bootloader (U-Boot),通常也需要将其镜像放入对应的存储位置(启动顺序的第一阶段)。 * **启动目标板**,你应该能看到 Linux 启动信息和最终的 busybox shell (或你配置的 init/login 流程)。 * **使用SDK:** `output/host/` 下的工具链可以单独使用编译你自己的应用程序: ```bash export PATH=/path/to/buildroot/output/host/bin:$PATH # 使用交叉编译器 (前缀通常是 <arch>-linux-gnu- 或 <arch>-unknown-linux-<libc>-) arm-buildroot-linux-gnueabihf-gcc -o myapp myapp.c # 将生成的 myapp 复制到你的根文件系统覆盖层或通过 scp 传输到运行的目标板。 ``` --- **重要文档资源:** 1. **官方手册 (必读):** 位于Buildroot源码目录 `docs/manual/manual.pdf` 或在线访问 [Buildroot User Manual](https://buildroot.org/downloads/manual/manual.html)。这是最权威、最全面的指南,涵盖**所有配置选项、详细构建步骤、FAQ、技巧和原理说明**[^1]。 2. **快速入门指南 (Quick Start):** 文档中也包含一个 [Buildroot Quick Start Guide](https://buildroot.org/downloads/manual/manual.html#quick-start),提供最简化的配置和构建流程。 3. **官方培训材料 (External):** Buildroot开发者提供的培训幻灯片(搜索 `"buildroot training slides"` 通常能找到)。 4. **社区支持:** * **邮件列表:** 官方 [Buildroot 邮件列表](https://lists.buildroot.org/mailman/listinfo/buildroot) (`buildroot@buildroot.org`) 是获取帮助和讨论的主要渠道。提问前请阅读文档并用好搜索功能。 * **IRC:** `#buildroot` on Libera Chat。 * **Bug 跟踪:** [Bug Tracker](https://bugs.buildroot.org/)。 * **Wiki:** 非官方但可能有社区维护的Wiki页面(可用搜索引擎查找)。 **常见问题 & 技巧 (FAQ/Tips):** * **构建失败:** 最常见的原因是**依赖缺失**(宿主系统缺少某开发库)、**网络问题**(无法下载包源码)或**配置冲突**(启用了不兼容的软件包或选项)。检查终端输出的错误信息,搜索关键字或复制错误信息到邮件列表/Bug Tracker搜索。 * **更新配置后重新编译:** 如果只修改了 `.config` 文件(如增减软件包),再次运行 `make` 通常足够,Buildroot 会自动重新配置并只编译受影响的软件包。如果修改了内核配置 (`make linux-menuconfig`) 或 bootloader 配置 (`make uboot-menuconfig`),重新运行 `make` 会重新编译内核或bootloader。 * **彻底清理:** ```bash make clean # 清理所有构建的输出 (build/, target/), 保留配置 (.config) 和下载包 (dl/)。 make distclean # 彻底清理,删除所有构建内容(包括 dl/ 下载的包和 .config!)。除非必要,一般不需要。 ``` * **离线构建:** 首次成功构建后,可以将 `dl/` 目录完整备份。在无网络环境下,将此 `dl/` 目录复制到新的Buildroot源码目录下再进行配置和构建 (`make source` 会自动检查 `dl/` 中的文件而不下载)。 * **版本控制:** 将你的 Buildroot 配置 `.config` 文件和自定义的 `board/<yourcompany>/<yourboard>/` 目录(如果有板级支持包BSP)和 `overlay/` 目录纳入版本控制(如 git)。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值