如何在 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' 并从上次提交中获取代码并修复这两个文件。
另一种选择是使用:git update-index --skip-worktree path/to/file
存在一些实际和哲学上的差异。主要是希望修改文件时使用skip-worktree
。当 git 可以安全地假定文件未更改并相应地优化其行为时使用 assume-unchanged
。
这里给出了非常详尽的解释:Git - Difference Between 'assume-unchanged' and 'skip-worktree'
我正在本地机器上处理项目。 所以我有不同的数据库详细信息,所以我编辑了 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' 并从上次提交中获取代码并修复这两个文件。
另一种选择是使用:git update-index --skip-worktree path/to/file
存在一些实际和哲学上的差异。主要是希望修改文件时使用skip-worktree
。当 git 可以安全地假定文件未更改并相应地优化其行为时使用 assume-unchanged
。
这里给出了非常详尽的解释:Git - Difference Between 'assume-unchanged' and 'skip-worktree'