繁体   English   中英

如何在 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

但我也不想删除它们

我该如何解决

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

方法一:

不要提交每个开发人员应该不同的文件。 我所有的配置文件(例如config.yaml )都在.gitignore 对于每个,我将有另一个文件(例如config.yaml.template ),它将向开发人员展示他们需要的样子,我只会在结构更改时对其进行编辑。

方法二:

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

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

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

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

git rm --cached 

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

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

如果这些文件遵循某种模式,您可能会发现将它们添加到.gitignore很有 例如,它非常致力于添加

*.class
/bin

在您的.gitignore 中,因为您往往不想推送类文件(如果您正在使用 Java/Scala)或倾向于位于/bin 中的二进制文件

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

git stash --keep-index

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

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

如果你使用像 bitbucket 这样的东西,你可以去你正在使用的分支的“源”并从上次提交中获取代码并修复这两个文件。

http://git-scm.com/docs

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

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

这里给出了一个非常彻底的解释: Git - 'assume-unchanged' 和 'skip-worktree' 的区别

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM