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

3

我正在本地机器上开展项目工作。 因此,我有不同的数据库详细信息,所以我编辑了两个文件。

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 命令。
但是系统却删除了它们。
需要提交的更改: (使用“git reset HEAD…”取消暂存)
    deleted:    product/db.py
    deleted:    product/prms.py

但是我也不想将它们移除

我应该怎么办呢?

编辑:我不想在远程仓库中推送任何与此相关的内容。我只想从我的电脑上忽略对这些文件的编辑,以便当我到办公室并对文件进行更改时,它可以像往常一样工作。但是从家里进行的任何编辑都应该对git是不可见的。

4个回答

21

方法 1:

不要提交应该因开发人员而异的文件。我所有的配置文件(例如 config.yaml)都在 .gitignore 中;对于每个文件,我会有另一个文件(例如 config.yaml.template),它将向开发人员展示它们需要看起来像什么,只有在结构更改时才进行编辑。

方法 2:

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

这可以让您更改文件,而git不会提交它们。如果您希望再次提交它们,请使用--no-assume-unchanged重新运行。


我可以删除这个文件吗,还是需要保留它在.git/info/exclude中? - user3214546
我已经做了,但它仍然检测到它们被修改了。 - user3214546
不确定你做了什么,但在进行了update-index操作之后,我的文件不再被检测为已修改。exclude.gitignore 对于已经存在于存储库中的文件没有任何效果。 - Amadan
谢谢,解决了。不知道问题出在哪里,我把更改藏起来,然后再次修改并更新索引。这是不是意味着它们永远不会被修改,我可以随时更改。还是说每次修改都要这样做? - user3214546
只有当你使用“--no-assume-unchanged”命令取消标记后,它们才会被视为已修改。 - Amadan

1

似乎没有问题。Git 通知您这些文件曾经在仓库中,现在正在从仓库中删除。

这正是您想要的。Git 将它们从仓库中删除并不一定意味着您正在从本地文件系统中删除它们。实际上,由于您已经使用了

git rm --cached 

他们仍然应该存在于您的文件系统中。

如果在您的分支上推送了添加这些文件的提交,那么您将不得不推送另一个删除这些文件的提交。

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

*.class
/bin

在你的.gitignore文件中,因为你通常不想推送类文件(如果你在使用Java/Scala)或二进制文件,这些文件通常存储在/bin目录下。

但这是否意味着当我推送到远程仓库时,那些文件会被删除还是不会被删除呢?因为其他成员应该像往常一样继续在上面工作。我不想在远程仓库中推送任何关于它的内容。我只想从我的电脑角度忽略对这些文件的编辑,以便当我去办公室并且我在那个文件中进行更改时,它应该像往常一样工作。但是从我的家里进行的任何编辑都应该对Git不可见。 - user3214546
如果您想让这些文件的当前状态保留在存储库中,但是要忽略对这些文件所做的更改,则必须使用git reset HEAD file取消暂存删除这些文件并将它们添加到.gitignore。或者参考这个链接:https://dev59.com/umgv5IYBdhLWcg3wPORm。 - iFytil

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

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

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

如果您使用类似于Bitbucket的东西,您可以转到您正在使用的分支的“源”并从上次提交中获取代码并修复这两个文件。

http://git-scm.com/docs


0

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

有一些实际和哲学上的区别。主要是在预期修改文件时使用skip-worktree。当Git可以安全地假定文件未更改并相应地优化其行为时,请使用assume-unchanged

这里提供了非常详细的解释:Git - Difference Between 'assume-unchanged' and 'skip-worktree'


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接