Git 忽略对文件的更改,但将其保留在 repo 中

这是一个关于我们的 C# Xamarin 项目的 git 问题。


我们在 Assets 文件夹中有几个文件,这些文件通过预构建事件命令复制到那里。编译器不直接使用这些文件,但如果它们丢失,我们的 CI 服务器将无法构建。所有开发机器上的它们的版本可能不同,所以每当我们在我们的机器上构建时,文件都会被复制进来,git 会显示它们已更改


这很烦人,因为对这些文件的更改真的无关紧要,所以我们永远不需要提交它们。我想忽略对这些文件的更改,但不将它们从存储库中删除。如果按照上述方式删除它们,CI 将失败。如果我直接“删除并停止跟踪”它们,它们将在 CI 服务器拉出时被删除。


从其他堆栈溢出问题我尝试了这两个:


git update-index --assume-unchanged [path]

git update-index --skip-worktree [path]

两者都成功隐藏了文件更改,但都存在以下问题。当我尝试切换分支时,它告诉我必须在切换之前丢弃未暂存的更改并列出这些文件。然后我输入:


git reset -- .

git checkout .

在我反转 update-index 命令之前,两者都无法放弃对文件的更改,只有这样我才能放弃更改并被允许切换分支。


有针对这个的解决方法吗?我们是在做一些跳出框框的事情还是完全错了?



青春有我
浏览 163回答 1
1回答

哈士奇WWW

这是一个非常普遍的问题。有时是众所周知的custom.js, custom.min.js, custom.css,custom.min.css等。其他时候,它是另一种“源文件”,为了使软件能够工作,不知何故需要“存在”,但我们并不真正关心其中的内容。听起来很熟悉?它被称为编译文件。现在我知道它们实际上不是编译文件——它们是源文件。但是对于所有意图和用途,这些文件与编译文件几乎相同。它们并不是你真正关心的任何东西,宁愿计算机只是想出如何维护它们。为什么将它们与实际编译的文件区别对待?您提到每次构建时都会生成预构建事件命令。这实际上使它们成为构建过程的一部分。解决方案相当简单。在 CI 服务器上包含生成文件的预构建事件,在实际编译之前,并将文件添加到.gitignore文件中。
打开App,查看更多内容
随时随地看视频慕课网APP