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

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

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

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

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


当前回答

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

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

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

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

其他回答

单线回答git更新索引--假定不变[路径]

每当您有一个位于中央存储库和本地存储库中的文件时,请使用此选项。您需要对该文件进行更改,但不能将其转移/提交到中央存储库。此文件不应添加到.gitignore中。因为如果系统管理员引入了文件中的新更改,高级开发人员需要在所有本地repo中分发。

最佳示例:DB连接的配置文件。在中央存储库中,您将拥有生产数据库服务器的所有用户名、密码、主机和端口值。但在本地开发中,您应该只使用本地或任何其他开发DB服务器(您的团队已设置)。在这种情况下,您希望在配置文件中进行更改,但不应提交到中央存储库。

最好的

我假设您正在询问如何删除特定文件夹或bin文件夹中的所有文件,而不是单独选择每个文件。

您可以使用以下命令:git rm-r-f/<floder名称>\*确保您位于该目录的父目录中。此命令将递归地“删除”bin/或build/文件夹中的所有文件。所谓delete,我的意思是git将假装这些文件被“删除”,而这些文件将不会被跟踪。git确实将这些文件标记为处于删除模式。

请确保您的.gitignore已准备好迎接即将到来的提交。文档:git rm

只需调用git-rm-缓存在要从修订控制中删除的每个文件上就可以了。只要本地忽略模式正确,您就不会在git状态的输出中看到这些文件。

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

要防止git检测到这些文件中的更改,还应使用以下命令:

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

你可能想做什么:(从下面@Ryan Taylor回答)

这是为了告诉git您想要自己的独立版本的文件或文件夹。例如,您不想覆盖(或删除)生产/登台配置文件。git更新索引--跳过工作树<路径名>

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

在这个答案中给出了一个几乎无需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。

问题可能是由操作顺序引起的。如果您首先修改了.gitignore,然后修改了git-rm-cached-xxx,那么您可能不得不继续遇到这个问题。

正确的解决方案:

git rm--缓存的xxx修改了.gitignore

顺序不变!

修改后的.gitignore重载!