【问题标题】:Make everyone's git to ignore an already tracked files (but don't delete from repository)让每个人的 git 忽略已经跟踪的文件(但不要从存储库中删除)
【发布时间】:2018-04-25 12:22:17
【问题描述】:

所以我可以这样做:Stop tracking files in git (without deleting them)

但这只会影响我的 git。

远程存储库中已经跟踪了一些默认设置文件,如何在不删除文件的情况下删除对该文件的跟踪?我不想从远程存储库中删除它,但该文件是运行应用程序所必需的,因此任何进行全新安装的人都需要该文件,因此他们在执行 git clone 时应该拥有该文件。

但是对于开发,任何开发人员都可以对文件进行更改,但绝不应该跟踪这些更改,只有默认值应该保留在远程存储库中。

我尝试将文件添加到 .gitignore 列表,但它不起作用 - 因为它已经被跟踪了,我猜?我希望每个人都拥有该文件,但每个人都不能更改该文件。

那么我该怎么做呢?

【问题讨论】:

  • 放到.gitignore文件中,在.gitignore文件中签入?
  • 我做到了,但似乎变化仍然存在,我认为这是因为 git 已经跟踪它们?
  • 该文件将存在,进一步的更改将被忽略,如果您需要删除一个文件,您还需要 git remove 它。
  • 将文件添加到.gitignore,提交并推送到远程repo,然后在git-hook中执行git update-index --assume-unchanged,可以在git clonegit checkout时触发。

标签: git


【解决方案1】:

如何在不删除文件的情况下删除对该文件的跟踪?

git rm --cached -- afileToIgnore

它将从 Git 索引中删除,但将保留在本地磁盘上。

如果随后将该文件添加到 .gitignoregit status 将不再显示它以进行添加/更改。

但是,这会将文件记录为从 Git 存储库中删除,这不是您想要的。

因此,实际的解决方案是将相同的文件添加为 模板

 copy aFileToIgnore aFileToIgnre.tpl
 git add aFileToIgnre.tpl
 git commit -m "record template value file"

然后声明一个污点content filter driver,它会自动重新生成该文件(忽略,因为它在.gitignore中)

smudge 脚本(可以版本化)

copy aFileToIgnore.tpl aFileToIgnre

另见“How can I track system-specific config files in a repo/project?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 2018-09-28
    • 2017-01-01
    • 2011-12-15
    相关资源
    最近更新 更多