Git的使用(程序猿必会)

前言

在学生时期,代码基本都是保存在本地,最多和服务器进行同步。但是进入公司后,代码是需要上传进行统一管理,所以涉及到什么git、branch、push啊吧啊吧,还是得学习一下。我们自己的代码也可以上传github仓库中管理,方便回溯。


基础概念

1. git

Git 是一个分布式版本控制系统,用于跟踪计算机文件(尤其是代码文件)的变化。

它允许++多个开发者同时对项目进行开发++,并且能够高效地合并彼此的修改。Git 是 Linus Torvalds(Linux 操作系统的创始人)为了解决 Linux 内核开发中的版本控制问题而开发的。其核心功能包括:

  • 版本控制: Git 记录文件的历史变化,每一次更改都会生成一个提交(commit),便于回溯历史版本。
  • 分支管理: Git 可以创建多个分支,让不同的开发者在不同的分支上独立工作,之后可以将各个分支的内容合并(merge)起来。
  • 分布式架构: 每个使用 Git 的开发者都拥有整个代码库的副本,不依赖中央服务器。即使没有网络连接,开发者也能进行本地提交,之后再与其他开发者同步。
  • 高效合并与冲突解决: Git 提供高效的合并工具,帮助开发者在不同分支上工作的内容进行合并,减少冲突。

GitHub 是一个基于 Git 的代码托管平台,它为开发者提供了一个在线的服务,用于存储和管理他们的 Git 仓库(repository)。它为 Git 提供了一个云端协作和版本控制的解决方案。GitHub 提供了图形化的界面,便于开发者管理项目、提交代码、查看历史记录、解决代码冲突等。GitHub 还增加了社交功能,允许开发者对其他人的代码进行星标 (star)、分叉 (fork)、提拉请求(pull request)等操作。

2. repository 仓库

在 GitHub 上,repository 是你存储和管理项目代码的地方。当你创建一个新的 GitHub 仓库时,实际上是在创建一个用于存放代码和文件的 Git 仓库。你可以将代码上传到这个仓库,并与其他开发者合作。

3. Branch 分支

分支(Branch) 是 Git 的一个核心概念,它允许你在独立的工作区进行开发,而不会影响主代码(通常是 mainmaster 分支)。分支可以让你在不干扰主分支的情况下,开发新功能、修复bug等,最后通过合并(merge)将这些更改整合进主分支。

我们以机器人开发项目为例,一个机器人开发设计到感知、规控、运控等方面。

机器人作为代码仓库也就是主文件夹,然后下面有感知、规控、运控、slam四个子文件夹。

main分支下划分:slam分支、perception分支、control分支、motion分支。

每个分支都是一个部门管理,那么一个部门中又有不同成员负责独立的一小部分,比如slam分支中,团队有多个人负责不同任务:地图构建slam-map-building)、定位算法slam-localization)、数据融合slam-data-fusion),那么这三部分又基于slam主分支创建,每个子分支专注模块中某个具体功能或任务。
1. 创建新分支:

复制代码
git branch <branch-name>

这会在本地创建一个新的分支,但不会自动切换到该分支。

2. 切换到分支

复制代码
git checkout <branch-name>

或者:

复制代码
git switch <branch-name>
  1. 创建并切换到新分支

    git checkout -b <branch-name>

4. 查看本地所有分支

复制代码
git branch

5. 删除分支

复制代码
git branch -d <branch-name>

6. 合并分支

假设你在 main 分支上,想要将 feature 分支的更改合并进来

复制代码
git merge <branch-name>

4. commit 提交

提交(Commit) 是将文件的更改记录到本地仓库的操作。每个提交都包含了对代码的具体更改,并会记录提交信息,以便追踪变更历史。

  1. 查看文件状态

    git status

该命令会显示当前工作目录和暂存区的文件状态。

  1. 添加文件到暂存区

    git add <file-name>

或者添加所有更改:

复制代码
git add .
  1. 提交更改

    git commit -m "your commit message"

-m 后面是提交的描述信息,通常简短说明这次提交的目的。

  1. 查看提交历史

    git log

5. Push 推送

Push(推送) 是将本地仓库中的更改上传到远程 GitHub 仓库的操作。它使得其他开发者能够访问和同步你所做的更改。

  1. 推送本地更改到远程仓库

    git push origin <branch-name>

  2. 推送所有本地分支

    git push --all origin

6. Pull 拉取

Pull(拉取) 是将远程仓库中的更改同步到本地的操作,通常用于获取其他开发者的最新提交。

  1. 拉取远程仓库的更新

    git pull origin <branch-name>

这会从远程仓库的 <branch-name> 分支拉取更新并自动合并到本地当前分支。

拉取并解决冲突: 在团队协作时,如果多个人同时修改同一文件,可能会出现冲突。拉取更新后,Git 会提示你进行冲突解决,解决完冲突后,需要再次提交。

7. Clone 克隆

Clone(克隆) 是将远程仓库的完整副本下载到本地的操作。通过这个操作,你可以开始在本地修改仓库,并与其他人协作。

  1. 克隆远程仓库

    git clone <repository-url>

8. Pull Request 拉取请求

Pull Request(PR) 是 GitHub 提供的一个功能,它允许开发者请求将某个分支的更改合并到主分支或其他分支。PR 提供了代码审查和讨论的功能,通常用于团队协作。

创建 PR

  • 在 GitHub 上,点击你仓库的 Pull requests 标签页。
  • 点击 New pull request 按钮。
  • 选择你想要合并的分支和目标分支。
  • 提交 PR 并添加描述。

9. 总结

操作 命令 描述
创建新分支 git branch <branch-name> 创建一个新分支
切换分支 git checkout <branch-name>git switch <branch-name> 切换到指定分支
创建并切换分支 git checkout -b <branch-name> 创建并切换到新分支
查看分支 git branch 查看本地所有分支
提交更改 git commit -m "message" 提交更改并写入说明
推送更改 git push origin <branch-name> 将本地分支的更改推送到远程仓库
拉取远程更改 git pull origin <branch-name> 拉取远程分支的更新并合并到本地分支
克隆仓库 git clone <repository-url> 克隆远程仓库到本地
查看提交历史 git log 查看提交记录

实操

假装大家都已经有帐号了,现在我们开始

1. 在github创建代码仓库

2. SSH-Key

参考链接:(30 封私信) github配置SSH-Key保姆级教程 - 知乎

打开powershell,进入.ssh文件,然后获取公钥内容

复制代码
/ 进入ssh目录
$ cd ~/.ssh
// 查看ssh 公钥  进行复制
$ cat id_rsa.pub

如果没有需要创建:

复制代码
ssh-keygen -t rsa -C "xxx@xxx.com"  // 将 "xxx@xxx.com" 替换为你自己的邮箱地址

然后粘贴我们刚才生成的key:

3. git安装

参考:Github入门教程,适合新手学习(非常详细)-CSDN博客

查看版本:

4. VScode

把地址粘贴到vscode上面(http或者ssh)

他会让选择文件夹,把github中的仓库(现在是空的,比如这个空的WALLE_ws)clone到本地

现在我本地就有一个空的WALLE_ws的文件夹,我们把需要上传的文件复制粘贴到这个文件夹下。

然后就可以进行上传操作了。下面操作都在vscode终端中进行

或者直接在终端操作,就需要连接一下。

先在本地空的WALLE_ws目录下初始化git仓库:git init

然后添加远程仓库URL: git remote add origin <远程仓库URL>

如果是SSH方式:git remote add origin git@github.com:username/repository.git

检查远程仓库是否添加成功:git remote -v

会输出下面类似:

origin https://github.com/username/repository.git (fetch)

origin https://github.com/username/repository.git (push)
如果是修改远程仓库URL:

git remote set-url origin git@github.com:username/repository.git

  1. 确保git已经正确配置用户名和邮箱

    git config --global user.name "你的用户名"
    git config --global user.email "你的邮箱"

如果不确定自己是否设置,可以通过下属命令查看:

复制代码
git config --global user.name
git config --global user.email
  1. 创建test分支

    git checkout -b test

    git checkout -b test:创建并切换到一个名为 test 的新分支

    如果分支已经存在,可以直接使用 git checkout test 来切换到该分支。

  2. 添加文件到暂存区

复制到本地仓库的文件添加到 Git 暂存区

复制代码
git add .
# 这会将所有文件添加到暂存区。如果你只想添加特定的文件,可以指定文件路径。

因为我本地是windows,所以会出现warning:

这是因为Windows 和 Linux/macOS 在处理换行符时有所不同:

  • Linux/Mac 使用 LF(\n)作为换行符。
  • Windows 使用 CRLF(\r\n)作为换行符。

Git 默认会在 Windows 系统中将 LF 转换为 CRLF,以适应 Windows 的换行符标准。如果你在 Windows 上使用 Git 来管理代码,Git 会在提交文件时自动进行这种转换。

如果你希望 Git 继续自动将 LF 转换为 CRLF(适应 Windows 的换行格式),可以忽略这个警告,并继续操作。Git 会在提交时自动处理换行符。

如果你希望在所有平台上都使用 LF(尤其是在跨平台开发时),可以设置 Git 来防止换行符自动转换。你可以将 Git 配置为始终使用 LF 换行符,而不管操作系统是什么。

通过执行以下命令,你可以设置 Git 在 Windows 上使用 LF 换行符:

复制代码
git config --global core.autocrlf input
# input:意味着 Git 会将 CRLF 转换为 LF,但是不会将 LF 转换为 CRLF。这对于跨平台开发非常有用。

然后再次:

复制代码
git add .
  1. 提交文件到本地git仓库

    git commit -m "添加文件到test分支"

  2. 将文件推送到远程test分支

    git push origin test

这会将 test 分支推送到 GitHub 上的远程仓库。如果该分支不存在,Git 会在远程仓库中创建一个新的 test 分支。

PUSH的时候可能有大文件导致报错:

需要使用git FLS:

复制代码
sudo apt-get install git-lfs # UBUNTU系统

可能git LFS包没有包含默认的APT源:

复制代码
# 添加 Git LFS 的官方 APT 仓库
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash

# 安装Git LFS
sudo apt-get install git-lfs

然后初始化:

复制代码
git lfs install

跟踪大文件:

使用 git lfs track 命令来告诉 Git LFS 哪些类型的文件应该使用 Git LFS 进行管理。例如,如果你想跟踪 .onnx.rknn 文件,可以运行:

复制代码
git lfs track "*.onnx"
git lfs track "*.rknn"

这将会在你的仓库中生成一个 .gitattributes 文件,该文件记录了 Git LFS 跟踪的文件类型。

确保 .gitattributes 文件已经被加入到版本控制中:

复制代码
git add .gitattributes

然后,将大文件添加到 Git LFS 跟踪中:

复制代码
git add OCSORT_test/ocsort.onnx
git add OCSORT_test/ocsort_rk3576.rknn

提交更改:

复制代码
git commit -m "Add large files using Git LFS"

最后,推送到 GitHub:

复制代码
git push origin test
  1. 确认无误后,可以merge到main分支

先切换到main分支下

复制代码
git checkout main

拉取 main 分支的最新更新

复制代码
git pull origin main

将test 分支的更改合并到main分支中

复制代码
git merge test

合并完成后,推送到main分支的更改到远程仓库

复制代码
git push origin main

ps:博客大部分都是记录自己的学习过程, 可能存在一些问题,也希望大家指正😀

这个git倒腾了好久,目前只学了简单的上传,这样不管是github还是公司的gitlab都是通用的方法。后面会学习怎么使用vscode插件或者pycharm插件管理,并且回溯等操作。

相关推荐
算家云8 小时前
基于GitHub Actions与算力平台API:构建端到端的模型自动训练与部署流水线
github·模型部署·算家云·租算力,到算家云·算力平台
无限进步_8 小时前
C语言动态内存的二维抽象:用malloc实现灵活的多维数组
c语言·开发语言·数据结构·git·算法·github·visual studio
NocoBase10 小时前
8 个最佳 Google Sheets 替代方案(附成本与能力分析)
低代码·开源·github
逛逛GitHub15 小时前
5 个很火火的个人 AI 知识库 GitHub 项目,收藏一波。
github
HelloGitHub17 小时前
《HelloGitHub》第 116 期
开源·github
YongCheng_Liang18 小时前
深度解析:GitHub API 爬虫工具 —— 自动化获取热门 / 推荐开源项目
爬虫·自动化·github
间彧1 天前
Kubernetes声明式API相比传统命令式API在故障恢复场景下的具体优势有哪些?
kubernetes·github
5***o5001 天前
Git在代码中的GitHub
git·github
MarvinZhang1 天前
LeanSpec:一个轻量级的 SDD 框架
架构·开源·github