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

问题描述 投票:2回答:1

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

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

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

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

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

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

git reset -- .
git checkout .

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

这个问题有方法解决吗?我们在盒子外面做些什么或者只是做错了吗?

c# git ignore
1个回答
0
投票

这是一个非常普遍的问题。

有时它是众所周知的custom.jscustom.min.jscustom.csscustom.min.css等。其他时候它是另一种“源文件”,为了让软件工作,不知何故需要“存在”,但我们并不真正关心它们中的内容。

听起来很熟悉?它被称为编译文件。现在我知道它们实际上并不是编译文件 - 它们是源文件。但是对于所有意图和目的,这些文件与编译文件几乎相同。它们并不是你真正关心的任何东西,而是宁愿计算机只是弄清楚如何维护它们。

为什么对待它们与实际编译文件不同?您提到了一个预构建事件命令,每次构建时都会生成这些文件。这实际上使它们成为构建过程的一部分。

解决方案相当简单。在CI服务器上包括在实际编译之前生成文件的预构建事件,并将文件添加到.gitignore文件中。

© www.soinside.com 2019 - 2024. All rights reserved.