Unreal Engine03:Git代码管理
Git是一种高效的代码管理工具。这里主要是针对UE4项目进行使用的介绍。
·
写在前面
Git是一种高效的代码管理工具。这里主要是针对UE4项目进行使用的介绍。
一、下载Git
主要是参考博客:Git入门与使用 (一) Git介绍与安装。
几个关键的点如下:
- 推荐下载Git for Windows Setup版本,因为功能比较全面。
- 安装的选项基本是默认即可。
- 但是默认的编辑器建议不要用vim(官方也不建议用)。如果是在Windows平台上的话,改用Notepad++或者Sublime Text 3都更加方便好用。
二、本地运行Git
Git其实就是在某个本地文件夹中建立仓库,然后托管该文件夹中的文件(大致的逻辑应该是)。因此,我们首先是要选择需要进行文件夹的选择。在本文中,由于是要托管UE4项目,所以是进入该项目的根目录下建立仓库。
- 进入项目根目录文件夹,右键选择Git Bash Here,调出Git自带的控制台。
- 常用的命令如下。可以直接参考博客:Git入门与使用 (二) Git相关命令的介绍与使用。
# 初始化仓库,即在当前目录下新建一个.git隐藏文件
git init
# 设置用户信息
git config user.name 你的用户名 # 设置用户名
git config user.email 你的邮箱 # 设置邮箱
cat .git/config # 查看配置信息
# 查看工作区和暂存区文件状态
git status
git status filename
git status -s # 详细信息
# 从工作区到暂存区添加文件
git add . # 添加当前路径下所有的文件
git add filename
# 从暂存区提交文件到本地仓库
git commit -m "提交信息" filename
git commit filename
git commit
注意的一些地方如下:
1.设置用户信息。
- 每次新建一个仓库都应该重新设置用户信息。但也可以直接设置全局的用户信息,省略每次新建仓库时的信息设置。
2.设置.gitignore
文件。
- 在
git add .
之前,一定要先设置要忽略的文件。直接在当前根目录下新建一个.gitignore
,Git之后的add和commit操作就会自动省略里面声明的文件和文件夹。这将极大节省代码托管的空间和时间(毕竟代码托管相当于备份,用的也是自己硬盘的空间)。 - UE4的
.gitignore
文件可以用下面的设置,主要参考了博客:虚幻引擎图文笔记:使用git做版本控制工具时的.gitignore文件设置和https://github.com/github/gitignore/blob/main/UnrealEngine.gitignore。 - 托管的文件夹包括Config,Content和Source,以及
.uproject
文件,其他文件大多可以省略。如果还有别的文件要省略也可以继续加。
# Visual Studio 2017 user specific files
.vs/
# Compiled Object files
*.slo
*.lo
*.o
*.obj
# Precompiled Headers
*.gch
*.pch
# Compiled Dynamic libraries
*.so
*.dylib
*.dll
# Fortran module files
*.mod
# Compiled Static libraries
*.lai
*.la
*.a
*.lib
# Executables
*.exe
*.out
*.app
*.ipa
# These project files can be generated by the engine
*.xcodeproj
*.xcworkspace
*.sln
*.suo
*.opensdf
*.sdf
*.VC.db
*.VC.opendb
# Precompiled Assets
SourceArt/**/*.png
SourceArt/**/*.tga
# Binary Files
Binaries/*
Plugins/*/Binaries/*
# Builds
Build/*
# StartContent
Content/StartContent/*
# ThirdParty
ThirdParty/*
# Whitelist PakBlacklist-<BuildConfiguration>.txt files
!Build/*/
Build/*/**
!Build/*/PakBlacklist*.txt
# Don't ignore icon files in Build
!Build/**/*.ico
# Built data for maps
*_BuiltData.uasset
# Configuration files generated by the Editor
Saved/*
# Compiled source files for the engine to use
Intermediate/*
Plugins/*/Intermediate/*
# Cache files for the editor to use
DerivedDataCache/*
- 设置好
.gitignore
之后可以用git status
看一下是不是不需要的文件都被忽略了再添加和提交。
3.Git提交时的信息
- 直接用
git commit -m "提交信息" filename
进行提交的时候,提交信息写不了太长。 - 用
git commit filename
提交信息就可以写很长。输入该命令并回车后,会自动用默认设置的编辑器打开一个文件,然后把提交信息写在文件里面即可。
三、提交到远程仓库Github
Github相当于一个远程的仓库平台,可以将本地的仓库放到上面去,这样别人也可以随时访问了。
主要参考博文:Git入门与使用 (三) 使用GitHub进行代码托管的相关操作。常用的命令如下。
# 查看目前已有的远程地址别名映射
git remote -v
# 添加新的远程地址别名映射
git remote add 远程仓库别名 远程仓库的https地址
# 将本地仓库推送到远程仓库
git push 远程仓库别名 本地仓库分支名
一些注意的地方如下:
-
添加新的远程地址别名映射后,会有两个相同的别名映射,一个负责fetch,一个负责push。
-
push到远程仓库的时候需要登陆Github账号才行。而且有时可能因为国内被墙的缘故,push会不成功。
-
如果登录账号的时候出错,可以删除该远程仓库之后重新添加,如下:
# 删除该远程仓库的连接
git remote rm 远程仓库别名
- 终止git操作可以用
ctrl + c
。
补充1:如果远程仓库使用http/https上传失败,则可能要用ssh方式进行连接:
- 主要参考博文:如何生成SSH key?
- 在git bash中用如下命令:
# 查看全局配置信息
git config --global --list
# 如果没有,则设置全局用户信息
git config --global user.name 你的用户名
git config --global user.email 你的邮箱
# 生成密钥
ssh-keygen -t rsa -C 你的邮箱
- 密钥生成过程中推荐全程回车即可,也就是使用默认的路径和不设置密码。
- 生成的密钥在用户文件夹中:
linux: ~/.ssh
windows: C:\Users\DELL.ssh
- 在
.ssh
文件夹中打开cmd,输入下面命令读取公钥:
more id_rsa.pub
- 复制公钥的内容,粘贴到远程仓库的
SSH Keys
设置中; - 这样之后在本电脑再push的时候就不需要输入密码了;
- 对远程仓库上的所有仓库均适用。
补充2:如果远程仓库被修改过,比如团队的其他人修改过,则:
- 需要先从远程仓库把别人的代码拉取下来
git pull 远程仓库别名 本地仓库分支名
pull
命令相当于git fetch + git merge
两个命令的组合;fetch
是把远程仓库的分支下载到一个临时分支中;merge
是把下载的临时分支和本地的分支合并;- 详细的机制可以参考博文:详解git fetch与git pull的区别;
- 然后再执行:
git push 远程仓库别名 本地仓库分支名
补充3:删除远程仓库的文件
- 如果是本地的文件也删除了,直接add+commit后,push到远程仓库即可;
- 如果本地的文件没有删除,可以删除暂存区的文件后commit,然后push到远程仓库:
# 只删除暂存区文件而不擅长工作区文件
git rm -r --cached 要删除的文件或者文件夹
git commit -m '提交信息'
git push 远程仓库别名 本地仓库分支名
补充4:Git判断文件改动的方式
- Git主要是通过文件的内容判断当前文件是否有改动的,底层判断是用Hash码;
- 可以参考博客:GIT 底层原理;
- 编码Hash的时候,用到:(1)文件内容;(2)文件类型;(3)文件内容长度;
- 同时会用Index文件保存文件名;
- 如何检测rename的呢?应该还是通过文件内容进行判断。如果重命名后的文件内容没有改动,也就是Hash码没有改变,则判断为
rename
,否则判断为delete
后create
; - 另外,在文件系统中用同名但生成时间不同的文件覆盖源文件后,Git会认为文件仍然是连续的,因为文件名没有发生变化。然后再去比对文件内容的改变,这样历史记录还是连续的。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献4条内容
所有评论(0)