git - 在版本控制中忽略文件夹元文件

标签 git version-control mercurial unity3d

Unity 为 Assets 文件夹内的文件夹 创建和删除元文件。

这会在使用版本控制时造成恼人的情况(您可以跳过并转到问题):有人创建了一个包含将被忽略的文件的文件夹,但忘记忽略该文件夹的元文件。 Unity 创建元文件,此人将元文件添加到版本控制中。另一个人获得了变更集,由于他们没有文件夹,他们的 Unity 删除了元文件,他们从版本控制中删除了元文件。并非团队中的每个人都理解这一点,因此该过程在 hell 循环中永久存在。

令人惊讶的是,这种情况一直都在发生。那么,两个问题:

  1. 版本文件夹元文件重要吗?
  2. 有没有办法自动忽略文件夹元文件 - 特别是在 git 或 mercurial 上?

最佳答案

Unity docs说:

When creating new assets, make sure both the asset itself and the associated .meta file is added to version control.

对我来说,这是将它们置于版本控制之下的充分理由。我看到两种解决问题的方法:

  • 组织:为本地文件夹设置命名约定,例如以“_”开头。但我们都知道这是行不通的 ;-)
  • 安装客户端pre-commit hook在所有机器上。我还没有这样做,但看起来很有希望。

我只是玩弄了不同的 git 命令,以下命令可能会有用: git hook 脚本应该首先检查 .gitignore 是否已经改变:

git diff-index --cached --name-only HEAD | grep ".gitignore"

如果它们位于 Assets 文件夹下,则在 .gitignore 中打印出所有新添加的行的目录名称:

git diff --cached --word-diff=plain .gitignore | grep -o -e "{+\/.*\/Assets\/.*+}" | cut -d + -f 2

更新

我刚刚写了这样一个预提交 Hook :-) 请参阅 GitHub 存储库 git-pre-commit-hook-unity-assets对于代码和我的 blog posting有关更多详细信息。

关于git - 在版本控制中忽略文件夹元文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19151247/

相关文章:

git - 处理顺序 pull 请求之间依赖关系的好策略

git - 如何使用 SourceTree 更新我的 fork 存储库?

python - 使用 python-hglib 提交单个文件

Git 警告 : push. 默认未设置;它的隐含值(value)正在改变

git fetch 不获取远程分支 - 如何获取所有远程分支

git - 从 git 提交中提取树 sha1

mercurial - TortoiseHG 将本地 merge 到分支头

ios - 如何测试我的 podspec 文件而不必一直提交我的更改?

visual-studio-2010 - Visual Studio 中 Sharepoint 文件的版本历史

version-control - 在 Emacs Lisp 中获取 VC 根