首页 > 解决方案 > Git: Keep system generated/modifed files unaffected my commits

问题描述

I am working on C# dot net project where recenly introduced git.

While building It will generated many dll files and modifies many tracked js files.

These files anyway I don't need to commit and push. But these files preventing me to pull latest from a branch, switching to different branch etc. I would like to get a simple solution for this problem so that

  1. It should allow me to switch branch by keeping these files as it is.
  2. While pulling new changes if any changes are to be applied to these js files from remote It should be applied on but still it should allow me to switch branch and pull new changes.
  3. I should be able commit other files that I changed easily

Please suggest the steps for this in git commands.

(I made those generated and system modified files as untracked but while pulling new changes it is not going because there are changes to be applied on files that I made untracked)

标签: git

解决方案


对于您不想放入源代码管理的文件,请使用该.gitignore文件。由于文件已经在 repo 中,您将需要采取措施删除它们 - 至少通过向每个分支添加提交以删除它们(请参阅git rm --cached),或者可能通过编辑历史记录(例如使用git filter-branch)。

您可以在此处搜索每个主题并找到许多解释它们的答案。您也可以参考 git 文档,例如

对于您希望能够从远程接收更改但又不想被阻止更改分支的文件......这无法以任何远程安全的方式完成。要么文件处于源代码控制之下,要么共享更改,要么应用有关管理未提交更改的所有规则;或者它不受源代码控制,并且在每个克隆中独立管理。

在最简单的情况下,您将拥有 3 种不同类型的文件: 由构建过程生成的文件,您从不编辑它们并且不存储在源代码管理中;来自 3rd 方源的文件,例如依赖项,您也不会编辑或放入源代码控制中,但在构建期间由依赖项管理软件拉入;和您编辑的文件,它们永远不会通过自动方式修改,并且是源代码控制中唯一的东西,因此您总是希望共享对这些文件的更改,并且永远不会有自动更改会阻止您进行拉取或分支切换。

如果您的流程要求您拥有不符合这些类别的文件,那么我要做的第一件事就是审查您的流程 - 因为源代码控制问题只是第一个(也是最轻微的)问题,来自拥有一个需要从 2 个或更多这些类别中更改。

如果您必须让构建过程修改本地创作和源代码控制的文件,或者是带有依赖项的第 3 方文件,那么构建过程应该复制该文件并对副本进行操作。修改后的副本应该是.gitignored 并且原始应该由构建过程单独留下。

如果您必须拥有将本地创作的更改混合到第 3 方文件中的文件,那么您应该为引入此类文件的依赖项的“您的版本”设置一个 repo(如果他们也使用 git 进行源代码控制,则为 fork) ,带有供应商分支,以便您能够在需要时合并他们对文件所做的未来更改。同样,这是一个您可以搜索并找到许多现有答案的主题。


推荐阅读