删除.vs 隐藏文件后引发 git 异常

通常认为 VS2017 与 TFS 是黄金搭档,大部分使用 VS2017 的开发者,源码托管工具为 TFS。其实 VS2017已经内置并支持 git,至于使用 git 作为源码工具的原因,这里不作赘述。本文仅谈 VS2017 与 git 配合使用出现的异常问题——删除.vs 隐藏文件后引发 git 异常。

VS2017 在解决方案根目录下会生成一个名为“.vs”的隐藏文件夹,该文件夹在每次打开 VS2017 时,会自动生成相关文件并锁定(db.lock)。使用 VS2017 上的 git 方式管理源码时,稍不注意,就会将“.vs”文件夹签入 git 源码托管平台中,单人开发解决方案或项目时,这并不会引起什么问题。当多人联合开发时,“.vs”会带来极大的不便,如上所述,VS2017 启动解决方案后,会生成“.vs”下的文件,如果多人同时签入代码,则会引发“.vs”的文件冲突,但是“.vs”某些锁定文件在 VS2017 启动状态不允许被修改——这导致多人协作不便。解决办法是取消“.vs”文件与 git 关联。

我试图通过向解决方案根目录下,“.gitignore”文件中添加“/.vs/*”规则来忽略“.vs”中所有文件与 git 的关联,但并不有效,在每次签入代码时,仍然会推送“.vs”文件到 git。然后我突发奇想,尝试删除“.vs”文件来取消 git 关联,但再次启动 VS2017 后进行 git 操作时,始终出现以下提示:

.vs/{solution}/v15/Server/sqlite3/storage.ide-shm 
.vs/{solution}/v15/Server/sqlite3/storage.ide-wal

其中{solution}为解决方案名称。

通过 Google 搜索该问题的解决办法,均不可行——看起来该问题无解。最后,通过搜索“git 忽略文件不起作用”,找到解决问题的关键办法,参考链接:https://blog.csdn.net/example440982/article/details/70371563

以下是上述链接对“.gitignore”文件不起作用的说明,做了部分整理:

想要.gitignore起作用,就得让这些文件不在暂存区中,.gitignore文件只是忽略没有被 staged(cached) 文件,对于已经被 staged 文件,加入 ignore 文件时一定要先从 staged 移除。想要知道忽略的文件还是显示被追踪状态,用 git status 查看状态。git 忽略目录中,新建的文件在 git 中会有缓存,如果某些文件已经被提交到版本管理中,就算是在.gitignore中声明了忽略文件也是不起作用的,这时候我们应该先把本地缓存删除,然后再进行 git add,这样就不会追踪忽略的文件了。

最终解决办法及命令如以下步骤:

1、打开 Git Bash,使用命令定位到解决方案目录,如下图

gitbash
gitbash

2、查看文件被追踪状态:git status

查看文件追踪状态
查看文件追踪状态

3、删除 git 本地缓存:git rm -r --cached . 注意不要漏掉最后的点(“.”)号

删除本地缓存
删除本地缓存

4、重新添加 git 缓存:git add . 注意不要漏掉最后的点(“.”)号

重新添加git缓存
重新添加git缓存

5、提交更新 .gitignore:git commit -m 'update .gitignore'

提交更新
提交更新

问题解决完成,全文完。

《删除.vs 隐藏文件后引发 git 异常》的相关评论

发表评论

必填项已用 * 标记,邮箱地址不会被公开。