Git 忽略对文件的更改但将其保留在回购协议中
Git ignore changes to file but keep it in the repo
这是一个关于我们的 C# Xamarin 项目的 git 问题。
我们在 Assets 文件夹中有几个文件,这些文件是通过预构建事件命令复制到那里的。编译器不直接使用这些文件,但如果缺少它们,我们的 CI 服务器将无法构建。它们在所有开发机器上的版本可能不同,所以每当我们在我们的机器上构建时,文件都会被复制进来并且 git 显示它们已 changed
这很烦人,因为对这些文件的更改真的无关紧要,所以我们永远不需要提交它们。我想忽略对这些文件的更改,但不想将它们从存储库中删除。如果按上述方式删除它们,CI 将失败。如果我直接 "remove and stop tracking" 它们,它们将在拉取时从 CI 服务器中删除。
从其他堆栈溢出问题我已经尝试了这两个:
git update-index --assume-unchanged [path]
git update-index --skip-worktree [path]
两者都成功地隐藏了文件更改,但都存在以下问题。当我尝试切换分支时,它告诉我必须在切换前放弃未暂存的更改并列出这些文件。然后我输入:
git reset -- .
git checkout .
在我撤销 update-index 命令之前,两者都无法放弃对文件的更改,只有这样我才能放弃更改并允许切换分支。
有解决办法吗?我们是在做一些跳出框框的事情还是完全错误?
这是一个很常见的问题。
有时是众所周知的 custom.js
、custom.min.js
、custom.css
、custom.min.css
等。其他时候,它是另一种 "source files",以某种方式需要 "there" 才能使软件运行,但我们并不真正关心它们中包含什么。
听起来很熟悉?它被称为编译文件。现在我知道它们不是 实际上 编译文件——它们是源文件。但就所有意图和目的而言,这些文件与编译文件几乎相同。它们并不是你真正关心的任何东西,而宁愿计算机只是想出如何维护它们。
为什么对待它们与实际编译的文件有什么不同?您提到预构建事件命令会在您每次构建时生成这些文件。这实际上使它们成为构建过程的一部分。
解决方案相当简单。在 CI 服务器上包括生成文件的预构建事件,在实际编译之前,并将文件添加到 .gitignore
文件。
这是一个关于我们的 C# Xamarin 项目的 git 问题。
我们在 Assets 文件夹中有几个文件,这些文件是通过预构建事件命令复制到那里的。编译器不直接使用这些文件,但如果缺少它们,我们的 CI 服务器将无法构建。它们在所有开发机器上的版本可能不同,所以每当我们在我们的机器上构建时,文件都会被复制进来并且 git 显示它们已 changed
这很烦人,因为对这些文件的更改真的无关紧要,所以我们永远不需要提交它们。我想忽略对这些文件的更改,但不想将它们从存储库中删除。如果按上述方式删除它们,CI 将失败。如果我直接 "remove and stop tracking" 它们,它们将在拉取时从 CI 服务器中删除。
从其他堆栈溢出问题我已经尝试了这两个:
git update-index --assume-unchanged [path]
git update-index --skip-worktree [path]
两者都成功地隐藏了文件更改,但都存在以下问题。当我尝试切换分支时,它告诉我必须在切换前放弃未暂存的更改并列出这些文件。然后我输入:
git reset -- .
git checkout .
在我撤销 update-index 命令之前,两者都无法放弃对文件的更改,只有这样我才能放弃更改并允许切换分支。
有解决办法吗?我们是在做一些跳出框框的事情还是完全错误?
这是一个很常见的问题。
有时是众所周知的 custom.js
、custom.min.js
、custom.css
、custom.min.css
等。其他时候,它是另一种 "source files",以某种方式需要 "there" 才能使软件运行,但我们并不真正关心它们中包含什么。
听起来很熟悉?它被称为编译文件。现在我知道它们不是 实际上 编译文件——它们是源文件。但就所有意图和目的而言,这些文件与编译文件几乎相同。它们并不是你真正关心的任何东西,而宁愿计算机只是想出如何维护它们。
为什么对待它们与实际编译的文件有什么不同?您提到预构建事件命令会在您每次构建时生成这些文件。这实际上使它们成为构建过程的一部分。
解决方案相当简单。在 CI 服务器上包括生成文件的预构建事件,在实际编译之前,并将文件添加到 .gitignore
文件。