unity学习4:git和SVN的使用差别

目录

[1 svn](#1 svn)

[1.1 操作逻辑](#1.1 操作逻辑)

[1.2 对应工具](#1.2 对应工具)

[1.3 SVN避免冲突的好习惯](#1.3 SVN避免冲突的好习惯)

[2 git](#2 git)

[2.1 git的基础操作逻辑](#2.1 git的基础操作逻辑)

[2.1.1 commit时,提交文件之外的其他文件需要pull](#2.1.1 commit时,提交文件之外的其他文件需要pull)

[2.1.2 commit时,发现要提交的本地文件和服务器的文件冲突了](#2.1.2 commit时,发现要提交的本地文件和服务器的文件冲突了)

[2.1.3 pull 时](#2.1.3 pull 时)

[2.2 对应工具](#2.2 对应工具)

[2.3 git的好习惯?](#2.3 git的好习惯?)

[3 例子1:处理本地要提交的文件和服务器文件冲突](#3 例子1:处理本地要提交的文件和服务器文件冲突)

[3.1 例子](#3.1 例子)

[3.2 错误方法:遇到冲突,直接丢弃的办法,不能彻底解决问题](#3.2 错误方法:遇到冲突,直接丢弃的办法,不能彻底解决问题)

[3.3 如何解决git 的合并冲突 (正确方法)](#3.3 如何解决git 的合并冲突 (正确方法))

[4 git命令的学习](#4 git命令的学习)

[4.1 初始化 Git 仓库 git init](#4.1 初始化 Git 仓库 git init)

[4.2 检查当前状态git status](#4.2 检查当前状态git status)

[4.3 添加更改到暂存区 git add .](#4.3 添加更改到暂存区 git add .)

[4.4 提交更改 git commit](#4.4 提交更改 git commit)

[4.5 查看提交历史 git log](#4.5 查看提交历史 git log)

[4.6 推送到远程仓库 git push](#4.6 推送到远程仓库 git push)

[4.6.1 添加远程仓库](#4.6.1 添加远程仓库)

[4.6.2 git push](#4.6.2 git push)

[4.7 获取最新更改 git pull](#4.7 获取最新更改 git pull)

[4.8 合并冲突](#4.8 合并冲突)

[4.9 查看当前分支:git branch](#4.9 查看当前分支:git branch)

[4.10 创建新分支:git checkout -b <新分支名>](#4.10 创建新分支:git checkout -b <新分支名>)

[4.11 切换分支:git checkout <分支名>](#4.11 切换分支:git checkout <分支名>)

[4.12 删除本地分支:git branch -d <分支名>](#4.12 删除本地分支:git branch -d <分支名>)

[4.13 克隆远程仓库:git clone <远程仓库地址>](#4.13 克隆远程仓库:git clone <远程仓库地址>)

[5 阅读报错和处理](#5 阅读报错和处理)


1 svn

1.1 操作逻辑

  • 1 不要求项目内所有文件全部相同
  • 2 只要求同1个文件,先取得最新版本后才能修改这个文件
  • 3 为了防止冲突,SVN还可以对每个文件加lock,避免出现2个人同时修改1个文件冲突的情况。

1.2 对应工具

  • 一般svn使用 tortoise

1.3 SVN避免冲突的好习惯

  • 文件先在SVN里加锁lock功能,需要设置
  • 先 更新要提交的文件
  • 然后使用前先解锁
  • 再进行 commit等操作

2 git

2.1 git的基础操作逻辑

2.1.1 commit时,提交文件之外的其他文件需要pull

针对1个分支,git要求整体更新,也就是进行操作前,必须和服务器上的分支版本全部一模一样了才能进行后面的操作

  • 提交前,必须保证除了你要修改得这个文件比服务器上的新,其他文件得全部相同。也就是所有项目工程内的文件都必须和服务器一样新,不能比服务器上旧。
  • 比如虽然之前已经pull了,但是在你操作的这个间隙,有其他人提交了一个其他文件的修改,你的本地就比服务器有一个文件旧了。
  • 否则就需要先把你这个要提交的新文件
  1. 先stash, 暂存到其他地方
  2. 然后pull,更新本地和服务器一样新
  3. 然后再 把stash的内容pop回来
  4. 再进行commit
  5. 再进行 push

(适用于文本文件,非二进制的文件)

  • 1先将本地修改存储起来

  • $ git stash

  • 这样本地的所有修改就都被暂时存储起来 。

  • 2 用git stash list可以看到保存的信息。

  • 其中stash@{0}就是刚才保存的标记。

  • 3暂存了本地修改之后,就可以pull了

  • $ git pull

  • 4 还原暂存的内容

  • $ git stash pop stash@{0}

2.1.2 commit时,发现要提交的本地文件和服务器的文件冲突了

需要进行冲突解决

step1: 选择要留下那个版本

  • 保留本地文件 git checkout --ours Data/configs.xlsx
  • 选择保留远程文件:git checkout --theirs Data/configs.xlsx (一般选择这个)

step2 标记冲突已解决

  • 确认你已经选择了正确的文件后,添加文件到暂存区:
  • git add Data/configs.xlsx

step3: 完成合并

  • 提交解决后的更改:
  • git commit -m "Resolved merge conflict in Data/configs.xlsx"

step4: 同步代码

  • 最后,将代码推送到远程仓库:git push

2.1.3 pull 时

  • 如果你想进行拉取,git pull

  • 服务器上有内容比你本地新

  • if 你本地什么修改也没有,OK

  • if 你本地有其他比服务器新的内容,就会报错, 怎么处理呢?

  • 如果你本地有一些修改了,要么丢弃,要么先提交,总之得先保证和分支得服务器全部内容一模一样

  • 那如果我不pull,直接commit是不是就行了?

  • 也不行,这就是回到 2.1.1 会让你先stash ,再pull, 再提交

2.2 对应工具

  • 一般git使用 sourcetree
  • git也可以使用 tortoise
  • 还可以用 git bash

2.3 git的好习惯?

以下来自于百度AI

  • 如果 Data/configs.xlsx 经常发生冲突,可以考虑以下方法:
  • 避免多人编辑同一二进制文件。
  • 使用文件锁定机制(比如 Git LFS 提供的锁定功能)。
  • 将二进制文件存储在外部(如共享网盘或其他存储服务),而不是直接放在 Git 中。

3 例子1:处理本地要提交的文件和服务器文件冲突

3.1 例子

  • 别人修改了A文件,已经上传
  • 你也修改了A文件,准备上传。但是和服务器上的别人改的A文件内容不同。
  • 服务器的文件和本地要提交的文件冲突了

3.2 错误方法:遇到冲突,直接丢弃的办法,不能彻底解决问题

  • 比如,遇到冲突
  • git merge --abort
  • git reset --merge
  • git status
  • git status 可以查看现在的这个分支的的状态,是否有提交冲突等
  • 前说有冲突,我把我本地放弃了,也能pull了。但是还是说有警告:因为冲突需要解决,不能删了了事,等你git pull的时候,还会报错

3.3 如何解决git 的合并冲突 (正确方法)

  • 你的问题是合并冲突,特别是二进制文件 Data/configs.xlsx 出现冲突,Git 无法自动合并。
  • 二进制文件(比如 Excel 文件)无法像文本文件一样进行合并,需要手动解决冲突。
  • 以下是解决方法:

step1: 使用 git status 查看冲突的文件时哪些,git diff 看冲突的具体内容

  • 检查冲突:运行 git status 查看哪些文件处于冲突状态。
  • 查看冲突详情:使用 git diff 查看具体的冲突内容。

step2: 选择要留下那个版本

  • 保留本地文件 git checkout --ours Data/configs.xlsx
  • 选择保留远程文件:git checkout --theirs Data/configs.xlsx (一般选择这个)

step3 标记冲突已解决

  • 标记冲突为已解决:对于每个已解决的冲突文件,运行 git add <文件名> 将其标记为已解决。
  • 确认你已经选择了正确的文件后,添加文件到暂存区:
  • git add Data/configs.xlsx

step4: 完成合并

  • 提交解决后的更改:
  • git commit -m "Resolved merge conflict in Data/configs.xlsx"

step5: 同步代码

  • 最后,将代码推送到远程仓库:git push

伪代码流程:

git status # 查看冲突文件

git diff --name-only --diff-filter=U | xargs code & # 使用code编辑器打开所有未解决的冲突文件

手动解决冲突...

git add . # 添加所有解决后的文件

git commit # 提交更改

4 git命令的学习

4.1 初始化 Git 仓库 git init

  • 如果你的项目尚未初始化为 Git 仓库,可以使用以下命令:
  • 此命令将在当前目录创建一个新的 Git 仓库。

4.2 检查当前状态git status

  • 在任何操作前,建议检查当前工作区和暂存区的状态:
  • 此命令会显示哪些文件已更改、哪些文件未被跟踪,以及哪些文件已准备提交。

4.3 添加更改到暂存区 git add .

  • 添加单个文件: git add <文件名>
  • 添加所有更改的文件:git add .
  • 提示:git add . 会将当前目录及其子目录中所有更改过或新增的文件添加到暂存区。

4.4 提交更改 git commit

  • 使用以下命令提交已暂存的更改到本地仓库:
  • git commit -m "<提交信息>"
  • -m: 提交时添加的简短描述。
  • 提交信息应简洁明了,通常描述本次更改的内容

4.5 查看提交历史 git log

  • 使用以下命令查看仓库的提交记录:git log
  • 如果想简化显示,可以使用:git log --oneline

4.6 推送到远程仓库 git push

4.6.1 添加远程仓库

4.6.2 git push

  • 将本地提交推送到远程仓库:git push origin <分支名>
  • 例如,推送到主分支:git push origin main

4.7 获取最新更改 git pull

  • 在多人协作的情况下,先拉取远程仓库的最新更改:
  • git pull origin <分支名>
  • git pull实质上是git fetchgit merge FETCH_HEAD的组合,它会获取(fetch)远程仓库中所有分支的更新并与你的本地分支进行合并(merge)。

4.8 合并冲突

  • 如果在拉取或合并代码时发生冲突,Git 会提示需要手动解决冲突。步骤如下:
  • 编辑冲突文件,解决冲突标记(<<<<<<<, =======, >>>>>>>)。
  • 将解决后的文件添加到暂存区:git add <冲突文件>
  • 提交解决冲突后的代码:git commit -m "Resolve merge conflict"

4.9 查看当前分支:git branch

4.10 创建新分支:git checkout -b <新分支名>

4.11 切换分支:git checkout <分支名>

4.12 删除本地分支:git branch -d <分支名>

4.13 克隆远程仓库:git clone <远程仓库地址>

5 阅读报错和处理(待完善)

https://zhuanlan.zhihu.com/p/40452986https://zhuanlan.zhihu.com/p/40452986

相关推荐
特种加菲猫1 小时前
构建完整工具链:GCC/G++ + Makefile + Git 自动化开发流程
linux·笔记·git·自动化
Franklin12 小时前
VS 版本更新git安全保护问题的解决
git
我是一只代码狗16 小时前
idea中合并git分支
git
我是一只代码狗16 小时前
idea中使用git
git·gitee·github
恋喵大鲤鱼16 小时前
git restore
git·git restore
李少兄17 小时前
Git Commit Message写错后如何修改?已Push的提交如何安全修复?
git·安全
Fireworkitte17 小时前
git stash
git
pe7er1 天前
git submodule简易指南
git
xiaocainiao8811 天前
Python 实战:构建 Git 自动化助手
git·python·自动化