【发布时间】:2019-08-21 12:20:33
【问题描述】:
我想将config.js 推送一次(如默认配置)到 repo。但是当我推送它时,添加到 gitignore,当我尝试拉取时,它会删除我的 config.js。我应该怎么做才对?
【问题讨论】:
我想将config.js 推送一次(如默认配置)到 repo。但是当我推送它时,添加到 gitignore,当我尝试拉取时,它会删除我的 config.js。我应该怎么做才对?
【问题讨论】:
将包含 config.js 的提交推送到远程仓库后,您可以告诉 Git 停止检查它的更改:
git update-index --skip-worktree path/to/config.js
如果您想稍后对其进行一些更改,您需要先告诉 Git 再次开始检查它:
git update-index --no-skip-worktree path/to/config.js
注意这仅适用于您的本地存储库——克隆存储库的每个人都必须运行相同的命令才能停止跟踪对 config.js 的更改文件,这可能是也可能不是问题。
一个常见的替代解决方案是方法described by @k0pernikus,即在单独的文件中提交默认配置(例如config.js.default),并有一个脚本将该文件复制并重命名为config.js,如果它没有已经存在了。
【讨论】:
我会提出另一个解决方案:
config.js 添加到.gitignore(并将其从存储库中完全删除)config.js.template 作为您的存储库的一部分README(也可能是安装脚本的一部分)中,让其他用户将config.js.template 复制到config.js 并填写他们的值这样您就不会错误地向 config.js 添加更改,并且您可以将其创建作为引导过程的一部分。
有一些方法可以告诉 git 将文件视为未更改,但在与它搏斗后我认为它不值得。
【讨论】:
一种更适合您尝试的解决方案的解决方案(尽管我不会真正推荐)是使用:
git update-index --assume-unchanged <file>
在更改您的本地 config.js 之后。
如果你想撤销它,你可以使用:
git update-index --no-assume-unchanged <file>
请记住,这些更改不会传播到遥控器。因此,对于每个克隆,您必须明确告诉 git 假设文件没有更改。
【讨论】: