如何在Git中停止跟踪和忽略对文件的更改?

20 浏览
0 Comments

如何在Git中停止跟踪和忽略对文件的更改?

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

我已经在我的本地.gitignore文件中添加了*.csproj,但这些文件已经在存储库中。

当我输入git status时,它显示我对csproj的更改,但我不感兴趣跟踪或提交这些更改以供补丁。

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

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

admin 更改状态以发布 2023年5月23日
0
0 Comments

有三个选项;你可能想选择第三个

  1. 这个选项会为你保留本地文件,但是在别人 pull 代码时会删除文件。

    git rm --cached <文件名>git rm -r --cached <文件夹名>

  2. 这个选项用于优化,比如一个拥有大量文件的文件夹,例如 SDK。这告诉 Git 在本地不再检查这个巨大的文件夹是否有变化,因为它不会有任何变化。如果文件/文件夹有更新,assume-unchanged 索引会被重置并被文件覆盖(当你 pull 代码时)。

    git update-index --assume-unchanged 
    

  3. 这个选项告诉 Git 你想保留自己独立版本的文件或文件夹。例如,你不想覆盖(或删除)生产/暂存配置文件。

    git update-index --skip-worktree 
    

    重要的是要知道,git update-index不会被 Git 自动推送,所以每个用户都必须独立运行它。

0
0 Comments

只需在你想要从版本控制中删除的每个文件上调用git rm --cached,就应该没问题了。只要本地的忽略模式是正确的,你就不会在git status的输出中看到这些文件。

请注意,此解决方案会从仓库中删除文件,因此所有开发人员都需要维护自己本地的(非版本控制的)文件副本。

为了防止git检测到这些文件的更改,你还应该使用以下命令:

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

你可能想要做的事情:(来自下面Ryan Taylor的答案

  1. 这是告诉git你想要自己独立的文件或文件夹版本。例如,你不想覆盖(或删除)生产/暂存配置文件。

git update-index --skip-worktree

完整的答案在这个URL中:http://source.kohlerville.com/2009/02/untrack-files-in-git/

0