Experience Git - chaolunner/CloudNotes GitHub Wiki
- 添加Unity专用的.gitignore
- 打开编辑器设置窗口通过 Edit > Project Settings > Editor
- 使.meta文件可见,以避免损坏引用对象
Version Control / Mode: “Visible Meta Files“
- 使用纯文本序列化可以避免无法解决的合并冲突
Asset Serialization / Mode: “Force Text”
- 你也可以通过直接修改ProjectSettings/EditorSettings.asset文件来达到一样的效果
m_ExternalVersionControlSupport: Visible Meta Files m_SerializationMode: 2
- 使.meta文件可见,以避免损坏引用对象
- 启用Git Large File Storage通过添加.gitattributes
# 删除当前目录下没有被track过的文件和文件夹
git clean -df
# 还原当前目录下被track过的文件
git reset --hard
# 将当前目录下所有变化的文件,放入暂存区
$ git add .
# 将指定目录下所有变化的文件,放入暂存区
$ git add <directory>
# 合并某个分支上的单个commit到当前分支
git cherry-pick 62ecb3
# 刷新远程仓库分支列表
git remote update origin -p
# 生成 SSH 公钥
ssh-keygen -t rsa -b 4096 -C"<添加注释>"
git config --global credential.helper manager
# 克隆Repository
git clone <repo-name>.git
# 移除.git文件目录
rm -rf .git
# 仅使用最新内容重建本地仓库
git init
git add .
git commit -m "Initial commit"
# 推到Remote
git remote add origin <repo-name>.git
git push -u --force origin master
-
错误1:[404] Object does not exist on the server
解决方法1:通过命令行上传指定文件
git lfs push --object-id origin f8efcb92cf226f3cd236f7aa4a31e5cda7cd94a89bcece6241dbfc97986fe5e4
解决方法2:通过命令行上传全部文件
git lfs push --all origin master
-
错误2:Encountered 2 file(s) that should have been pointers, but weren’t
直接修改
.gitattributes
,导致已在储存库中的文件没有正确的 Git LFS 连结解决方法(这里以
.fbs
文件为例):-
先删掉
.gitattributes
,让 Git LFS 不要跟踪任何文件 -
接着用
git lfs track
指令,来设定 Git LFS 要管理的文件这个指令的好处是它会把储存库中符合的文件也修改成 Git LFS 所需的格式,而直接修改
.gitattributes
就没有这个好处 -
设定好后,应该会有一堆文件变成已修改 (modified),这时就可以用
git commit
指令提交修改了
git rm .gitattributes git lfs track "*.fbs" git commit -m "Re-track *.fbs in git lfs"
-
-
安装Git LFS v2.2.1 (or later)
-
重写例如当前分支上所有Remote上不存在的*.mp4视频文件:
git lfs migrate import --include="*.mp4"
-
或者,重写给定分支上的所有*.mp4视频文件,而不管它们是否存在于Remote(可能需要force-push):
git lfs migrate import --include="*.mp4" --include-ref=refs/heads/master --include-ref=refs/heads/my-feature
-
将转换后的Repository作为新Repository推送:
git push --force
-
迁移后清理.git目录
上面的代码成功地将先前存在的git对象转换为lfs对象。 但是,常规对象仍保留在.git目录中。 这些将最终由git清除,但是要立即清除它们,请运行:
git reflog expire --expire-unreachable=now --all git gc --prune=now
-
克隆Repository
git clone --mirror [email protected]:<username>/<repo-name>.git
通过添加镜像标签可以得到一个包含所有分支的.git文件夹
-
备份克隆下来的.git文件夹,以防之后出现错误可以还原回这个版本
-
Fetch LFS
cd <repo-name>.git git lfs fetch --all
理论上上一步的镜像克隆已经取得了LFS,但似乎这个并没有支持的很完美,出于安全的考虑还是在执行一次该操作
-
使用BFG转换Git历史记录
确保你已经下载了最新的BFG版本
调用如下指令:
java -jar <path to>bfg-x.x.x.jar --convert-to-git-lfs "*.{png,mp4}" --no-blob-protection
是你下载的bfg-x.x.x.jar的绝对路径,本示例中只转换png和mp4两种类型的文件
这将重写所有分支的所有历史记录,并用LFS版本替换所有png或mp4文件
这里再提供一个完整版本的指令:
java -jar <path to>bfg-x.x.x.jar --convert-to-git-lfs "*.{cubemap,unitypackage,apk,exe,ipa,pdf,dll,pdb,so,7z,bz2,gz,rar,tar,zip,3dm,3ds,blend,c4d,collada,dae,dxf,fbx,jas,lws,lxo,ma,max,mb,obj,ply,skp,stl,ztl,abc,aif,aiff,it,mod,mp3,ogg,s3m,wav,xm,otf,ttf,bmp,exr,gif,hdr,iff,jpeg,jpg,pict,png,psd,tga,tif,tiff,ai,asd,pmp,asf,avi,flv,mov,mp4,mpeg,mpg,ogv,wmv,a,arobject,lxo,reason,rns}" --no-blob-protection
-
Prune LFS
git reflog expire --expire = now --all && git gc --prune = now
BFG重写历史记录,将文件提取到lfs或objects,并添加.gitattributes进行LFS跟踪
-
初始化Git LFS
git lfs install
这会将pre-push hook添加到Repository中
-
将转换后的Repository推回Remote
git push --force --all
这会将所有大文件推送到LFS存储,然后用新的历史记录覆盖原来的历史记录
-
在操作中你可能遇到如下问题: