我克隆了一个包含一些.csproj文件的项目。我不需要/喜欢我的本地csproj文件被Git跟踪(或在创建补丁时被提起),但很明显,项目中需要这些文件。

我已经将*.csproj添加到我的LOCAL.gitignore中,但文件已经在repo中。

当我键入gitstatus时,它显示了我对csproj的更改,我对跟踪或提交补丁程序不感兴趣。

如何从我的个人存储库中删除这些文件的“跟踪”(但将它们保存在源中,以便我可以使用它们),以便我在执行状态(或创建补丁)时不会看到更改?

是否有正确/规范的方法来处理这种情况?


当前回答

在这个答案中给出了一个几乎无需git命令的方法:

要忽略每个本地存储库的某些文件,请执行以下操作:

创建文件~/.gitignore_global,例如在终端中使用touch~/.gotignore_gglobal。运行git-config--global-core.excludsfile~/.gitignore_global一次。将要忽略的文件/dir路径写入~/.gitignore_global.example-modules/*.H,该路径将被假定为在您的工作目录中,即$WORK_dir/modules/*.H。

要忽略单个本地存储库的某些文件,请执行以下操作:

对repo中的文件.git/info/exclude执行上述第三步,即将要忽略的文件/dir路径写入.git/info/dexclude中,例如modules/*.C,它将被假定在您的工作目录中,即$WORK_dir/modules/*.C。

其他回答

要告诉Git不要跟踪对本地文件/文件夹的更改(这意味着Git状态不会检测到对它的更改),请执行以下操作:

git update-index --skip-worktree path/to/file

要让Git再次跟踪本地版本的更改(以便您提交更改),请执行以下操作:

git update-index --no-skip-worktree path/to/file

防止git监视文件或路径

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

并将其恢复使用

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

参考类似用例的回购https://github.com/awslabs/git-secrets

接受的答案对我仍然不起作用

我用过

git rm-r--缓存。git添加。gitcommit-m“正在修复.gitignore”

从这里找到答案

有3个选项;你可能想要#3

这将为您保留本地文件,但将在其他人拉动时删除该文件。git rm--缓存<文件名>或git rm-r--缓存<文件夹名>这是为了优化,就像一个包含大量文件的文件夹,例如可能永远不会更改的SDK。它告诉Git停止每次在本地检查巨大的文件夹是否有更改,因为它没有任何更改。如果文件/文件夹有上游更改(当您拉动时),则假设未更改的索引将被重置,文件将被覆盖。git更新索引——假设<路径名>不变这是为了告诉Git你想要自己的独立版本的文件或文件夹。例如,您不想覆盖(或删除)生产/登台配置文件。git更新索引--跳过工作树<路径名>重要的是要知道git更新索引不会随git传播,因此每个用户都必须独立运行它。

如果您执行git更新索引--假设file.csproj不变,git不会自动检查file.cspro是否有更改:这将在您更改它们时阻止它们以git状态出现。因此,您可以这样标记所有.csproj文件,尽管您必须手动标记上游回购发送给您的任何新文件。(如果您的.gitignore或.git/info/exclude中有它们,那么您创建的将被忽略)

我不完全确定.csproj文件是什么。。。如果它们与IDE配置类似(类似于Eclipse的.Eclipse和.classpath文件),那么我建议它们根本不应该是源代码控制的。另一方面,如果它们是构建系统的一部分(如Makefile),那么它们显然应该——并且一种获取可选本地更改的方法(例如从local.csproj a la config.mk)会很有用:将构建划分为全局部分和本地覆盖。