停止在 git 中跟踪文件 - 无需在本地或拉取时将其删除

问题描述 投票:0回答:3

我想忽略之前跟踪的文件/目录树 - 永远忽略它,但在拉取时将其删除 not - 只需在发生拉取的存储库上忽略它即可。这可能吗 ?为什么不(如果不是)?我应该如何进行?

注意:从 Git 存储库中删除文件而不从本地文件系统中删除它中接受的答案 - 即

git rm --cached path
- 将导致文件在拉取时被删除。可恶的。不仅如此,“如果您签出删除前的修订版,然后签出删除后的修订版,它将删除您的文件”(请参阅此评论)请参阅此问题以获取其他有趣的评论/答案,但这些评论/答案并不不过解决我的问题。

我完全清楚

--assume-unchanged
标志,但这不是我想要的 - 我想告诉 git (和所有存储库克隆)“嘿,停止跟踪这个文件/树”,而不是“删除这个文件/树” - 所以我想在全球范围内实现
--assume-unchanged
。如果不可能(为什么?)我需要一个解决方法

为了记录,我正在尝试引导 git 使用它来保存/共享历史记录,并且我希望能够随意停止跟踪文件/目录 - 而不删除它们

相关:

git gitignore
3个回答
3
投票

我也遇到了同样的问题,我使用了

git rm --cached <file>
并且它在本地工作,但是一旦我推送到远程服务器,它也删除了文件,我不想要这样。然后我找到了 git
update-index --assume-unchanged <file>
并且它忽略本地更改并且不会从远程服务器中删除它,效果非常好!


1
投票

这是不可能的。为了防止跟踪新的更改,您需要从存储库中删除该文件(使用

git rm
git rm --cached
)。这会添加对删除文件的提交进行更改。当该更改应用于其他存储库时,将执行删除操作,导致文件被删除。


0
投票

我也有同样的问题。 如果我按照这个顺序做:

  1. 创建文件并提交
  2. 添加到.gitignore

文件包含在存储库和新克隆中,但不会跟踪本地更改,并且在执行拉取命令时不会更新文件。

但是,如果我按照这个顺序这样做:

  1. 在 .gitignore 中添加覆盖整个文件夹的条目
  2. 在文件夹中创建文件,git add -f,提交

文件已添加到远程存储库,但文件已被跟踪。 我无法在远程存储库中取消跟踪此文件。 我可以执行“git rm --cached file”,但这会在提交时删除远程存储库上的文件。 我可以执行“git update-index --assume-unchanged file”,这将阻止我的本地索引跟踪更改,但如果我执行拉取时远程存储库上的文件发生更改,它们将被覆盖。

这些都不是我想要实现的 - 即拥有为新克隆创建但不被跟踪的文件的“初始”版本。第一种方式似乎有效,但反之则不然,而且无法撤消它 - 这很糟糕。

© www.soinside.com 2019 - 2024. All rights reserved.