如何在 git 中本地取消跟踪几个文件

How can untrack few files locally in git

我正在本地机器上处理项目。 所以我有不同的数据库详细信息,所以我编辑了 2 个文件。

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   product/db.py
        modified:   product/prms.py

现在我不想提交它并想在本地忽略它们,这样无论我在这些文件中编辑什么,它们都不会被推送到远程仓库

我试着把它们放在

.git/info/exclude

然后我做了

git rm --cached <file>

但随后系统正在删除它们

要提交的更改: (使用 "git reset HEAD ..." 取消暂存)

    deleted:    product/db.py
    deleted:    product/prms.py

但我也不想删除它们

我该如何解决

编辑:我不想就此将任何内容推送到远程仓库。我只想从我的计算机角度忽略对这些文件的编辑。这样当我到办公室然后我在该文件中进行 chnage 时,它​​应该可以正常工作。但是在我家,git

应该看不到任何编辑

似乎没有问题。 Git 通知您那些文件 曾经 在存储库中并且正在从存储库中删除。

这正是您想要的。 git 从存储库中删除它们的事实并不 必然 意味着您要从本地文件系统中删除它们。事实上,自从您使用

git rm --cached 

它们应该仍在您的文件系统中。

如果在任何时候有一个提交被推送到添加了这些文件的分支上,您必须推送另一个将删除这些文件的提交。

如果这些文件遵循某种模式,您可能会发现将它们添加到 .gitignore 中很有用。例如,添加

是非常重要的
*.class
/bin

在你的 .git 中忽略 因为你往往不想推送 class 文件(如果你正在做 Java/Scala)或往往位于 /bin

中的二进制文件

方法一:

不要提交因开发人员而异的文件。我所有的配置文件(例如 config.yaml)都在 .gitignore 中;对于每一个,我都会有另一个文件(例如 config.yaml.template),它会向开发人员展示他们需要的外观,我只会在结构发生变化时编辑它。

方法二:

git update-index --assume-unchanged product/db.py product/prms.py

会让你更改文件,git不会提交它们。如果您确实希望再次提交它们,请使用 --no-assume-unchanged.

重新运行它

如果你想从提交中省略文件,你应该使用'stash'方法。

git stash --keep-index

这将存储所有未提交的更改 -- 您以后可以随时取消存储它们。 现在您可以继续工作,而无需将这些文件推送到您的远程存储库。

请记住,您可以拉动并继续协作,同时仍保留这些更改。

如果您使用 bitbucket 之类的东西,您可以转到您正在使用的分支的 'source' 并从上次提交中获取代码并修复这两个文件。

http://git-scm.com/docs

另一种选择是使用:git update-index --skip-worktree path/to/file

存在一些实际和哲学上的差异。主要是希望修改文件时使用skip-worktree。当 git 可以安全地假定文件未更改并相应地优化其行为时使用 assume-unchanged

这里给出了非常详尽的解释:Git - Difference Between 'assume-unchanged' and 'skip-worktree'