【问题标题】:How can I have git ignore parts of Atmel Studio's .cproj file?如何让 git 忽略 Atmel Studio 的 .cproj 文件的部分内容?
【发布时间】:2019-06-06 18:37:32
【问题描述】:

我们有几个人在 git 存储库中处理单个 Atmel Studio 7 项目。每次有人打开项目时,Atmel Studio 都会对项目文件 (*.cproj) 进行一些用户特定的更改,例如添加调试探针的序列号并更新打开它时使用的确切 Atmel Studio 版本号。我想忽略这些更改,但仍将文件保留在 repo 中,因为它包含所有必要的项目设置。

有没有人能很好的解决这个问题?

【问题讨论】:

  • 如果.cproj 文件已经在repo 中,为什么不能将它添加到.gitignore
  • git update-index --assume-unchanged <file>。每个用户都必须在自己的沙箱中运行此命令。
  • 这个问题几乎可以肯定是重复的,但我的搜索并没有显示出你想要的问题。
  • 好的,所以我仍然找不到关于这个的好帖子,即使我确定我在 SO 上学习了这个解决方案,所以我发布我的解决方案作为答案。

标签: xml git gitignore atmelstudio


【解决方案1】:

你可以使用git update-index来完成你想要的。

在每个用户的沙箱中,运行以下命令:

git update-index --assume-unchanged <file>

这将告诉 Git 从现在开始忽略此沙箱中对 &lt;file&gt; 的所有更改。

如果您改变主意并想要将更改提交到&lt;file&gt;,您必须先撤消该操作,因为git add 和其他命令不会看到标记为assume-unchanged 的文件的任何更改:

git update-index --no-assume-unchanged <file>

两年后编辑……

更好的解决方案是使用:

git update-undex --skip-worktree <file>

这正是这里的用例。

【讨论】:

  • 谢谢,这会起作用的!这样做和将文件添加到 .gitignore 之间的唯一区别是您的新方法在我的机器上保持本地吗?
  • 看起来它也适用于通配符,所以我可以运行git update-index --assume-unchanged *.cproj
  • 不,更大的区别是.gitignore 永远不会对已经跟踪的文件产生任何影响。它只会从未跟踪的文件列表中过滤掉一些东西,但是一旦一个文件被跟踪,Git 认为它必须跟随它的变化。我相信只有假设不变的设置才能覆盖它。
  • 好的,有道理。那么这是否意味着索引更新将适用于使用 repo 的每个人,或者只适用于我?
  • 只有您,并且仅在您运行它的沙箱中。这就是为什么每个用户都必须运行它,如果您使用多个沙箱,则必须在每个沙箱中运行。
猜你喜欢
  • 2014-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-25
  • 2014-11-12
  • 2012-03-21
  • 1970-01-01
  • 2011-07-17
相关资源
最近更新 更多