如何在不更改空格的情况下从 .gitignore 中列出的存储库中删除文件

How to remove files from repository listed in .gitignore without changing whitespace

我在此处阅读了有关如何使用 git 命令从存储库中删除忽略文件中的文件的信息:Remove directory from remote repository after adding them to .gitignore

我正在使用 Visual studio 2019 和 Azure DevOps 中的存储库。我使用了这些步骤:

  1. 从 Git 资源管理器菜单中,“在命令提示符中打开”
  2. git rm -r --cached . 这告诉 git 停止跟踪所有内容,现在我的所有文件都在“暂存更改”中显示为已删除,而少量文件在“更改”中显示为已添加。这看起来不错。我假设被忽略的文件不会再次添加回来,所以当我提交这些添加时,所有应该首先被忽略的文件都将在服务器上被删除。
  3. 舞台。现在看来有问题了。添加的文件显示为已修改。
  4. 推送看看我在浏览器查看变化时的样子: “仅显示前 999 个更改。单击此处加载更多”。我能看到的每个文件都有一个警告:“该文件仅在空白处有所不同”

我猜这是关于行尾,但它几乎不可能查看更改。有没有办法阻止我使用此过程时发生的空白更改?或者扭转空白变化?或者告诉 git 只检查删除的内容?

TLDR 答案 ():

git rm -r --cached .
git config --global core.autocrlf false
git add --renormalize .
git add .
git commit

Stage. Now it looks like there's a problem. The added files are showing as modified.

重复相同的过程,但在第 3 步(暂存)之前,添加:

git config --global core.autocrlf false

这将确保有自动 eol(行尾)转换。
查看 git add .(或 git add --renormalize . with Git 2.16+)后跟 git status 是否仍显示已修改的所有内容。

OP Colin confirms in 以下工作:

git config --global core.autocrlf false
git add --renormalize .
git add .

我认为你使这种方式变得比必要的更复杂。要从 git 中删除文件,您只需执行以下操作:

git rm <files>
git add .
git commit

<files> 替换为您要删除的文件的名称。您可以使用标准的 glob 语法来匹配多个文件。

这将删除之前提交的文件。没有理由使用 --cached 或任何带有 autocrlf 的东西。这些只会使问题复杂化。