(个人)VR太极拳学习系统-创新实训第四、五周(1)

近期工作

前些日子由于个人的原因(备考GRE)所以在这边的工作上停滞了一段时间,这段时间内我主要是处理了一些与版本控制相关的问题,下面我记录一下较重要的部分:

git删除文件

之前在提交工作时不小心将一个1.2G的文件提交到了本地仓库,在推送时github拒绝了提交,提示不能够上传大于1G的文件。这样就比较麻烦了,因为该文件已经被git追踪了,所以即使删除掉它,git中还是会存留记录,所以直接删除是没有作用的,因此需要将它的记录从仓库中彻底删除。为此,可以使用下面这条命令:

git filter-branch --force --index-filter \ 
    'git rm --cached --ignore-unmatch path_to_file' \ 
    --prune-empty --tag-name-filter cat -- --all

在path_to_file处填入需要删除的文件,执行命令就可以将其从仓库中删除。下面是各个参数的含义:

  • filter-branch 该参数的作用是让git重写每一个分支
  • –force 即使遇到冲突也强制执行
  • –index-filter 指定重写的时候执行什么命令,这里就是后面的 git rm –cached –ignore-unmatch path_to_file,如果有匹配则删除缓存的文件
  • –prune-empty 表明如果重写导致某些commit为空,那么就忽略这个commit
  • –tag-name-filter 表示对每一个tag如何重命名,重命名的命令跟在其后,当前的tag会传给后面的命令,而cat命令是直接打印输入,所以tag名就不会改变
  • 这个仅仅表示分隔符
  • –all 表示所有的文件都考虑在内

或者如果还没有推送到远端的话,可以直接删掉本地仓库重新从远端拉取,只不过本地的资料就全部丢失了(っ °Д °;)っ,根据情况其实也可以选择这种方式╮(╯-╰)╭

git追踪被忽略目录下的文件

上面那个问题解决之后,又来了新的问题。大于1G的那个文件是Sphinx-UE4识别中文语音所必须的文件,它在Content/model目录下,考虑到该目录下的文件都是Sphinx-UE4插件使用的文件,而插件本身不会变动,根本就没有必要将model目录纳入到版本控制的范围内,所以可以直接将这个目录添加到gitignore中去。然而,实际上有一个需要被跟踪的文件恰好还真就在model目录下…(⊙_⊙;)…,就是上一篇博客中讲到了的用于配置具体语音映射的文件。插件这种不会变的东西让其他成员自己安装一次就可以了,但是以后还会添加更多的命令,如果这个配置也要其他人自己修改的话版本控制系统就是摆设了。
好在gitignore文件中可以使用 ! 符号修饰路径来表明需要追踪某个文件,于是我在gitignore中添加以下两行:

/Content/model
!/Content/model/zn/zn.dict

然后就大功告成!
不存在的,要是这么简单我就不会把这个记录上来了。
这两行的结果,是model目录整个被忽略了,下面的一行根本没有起到应有的效果。
google一下之后发现了一个解释:是由于zn目录已经被忽略了,所以git找不到zn.dict文件,从而无法将其追踪。
正确的写法是下面这样:

/Content/model/*
!/Content/model/zn
/Content/model/zn/*
!/Content/model/zn/zn.dict

也就是说,要一层一层地指定需要跟踪的每一个目录。
可以想想如果目录树较深的话这个就要写好多行,这一点来看git还是不太方便,在gitignore有更简单的语法之前,只能够通过合理规划目录结构来缓解了。

新的任务

由于语音方面在基于Sphinx-UE4插件的基础上几乎没有什么可以变动的地方了,剩下的就是根据具体使用情况增减命令和调整tolerance而已,所以我在部分的工作算是完成了,接下来我将会去搭建具体的关卡,与其他同学做的DTW算法对接,实现一个训练模式。

猜你喜欢

转载自blog.csdn.net/dying_isaac/article/details/80224158